一、基础知识
1、什么是dns
dns 域名系统,作为将域名和IP地址相互映射的一个分布式数据库,帮助人们方便的访问互联网。
2、dns的分类
权威名称服务器(权威dns:直接有客户需要的答案,客户给一个域名,直接能访问到答案)
存储并提供某区域(整个DNS域或DNS域的一部分)的实际数据
权威名称服务器的类型包括:
Master:包含原始区域数据,有时称作“主要”名称服务器
Slave:备份服务器,通过区域传送,从Master服务器获得的区域副本,有时称作:次要“名称服务器。
非权威/递归名称服务器(非权威dns里边没有客户需要的答案,但他会通过114.114.114.114等权威DNS找到答案给客户)
客户端通过其查找来自权威名称服务器的数据
3、缓存DNS服务器
BIND是最广泛使用的开源名称服务器
在RHEL中,通过bind软件包提供
防火墙开启端口 53/TCP 和 53/UDP
BIND 的主配置文件是 /etc/named.conf
/var/named 目录包含名称服务器所使用的其他数据文件
4、DNS排错
dig时显示的信息,显示来自dns查找的详细信息,其中包括为什么查询失败
NOERROR:查询成功
NXDOMAIN:DNS服务器提示提示不存在这样的内容
SERVFAIL:DNS服务器停机或DNSSEC响应验证失败
REFUSED:DNS服务器拒绝回答(也许是出于访问控制原因)
5、数据访问流程
【1】客户端Stub解析器将查询发送至/etc/resolv.conf 查看DNS中的nameserver指向
【2】进入指向的主机 /etc/named/named.conf中
【3】如果名称服务器对应请求具有权威性,会将权威答案发送至客户端
【4】如果名称服务器在其缓存中有请求信息,则会将非权威答案发送至客户端
【5】如果缓存中没有该信息,名称服务器将搜索权威名称服务器,以查找信息
【6】从根区域开始,按照DNS层次结构向下搜索,直至对于信息具有权威性的名称服务器,以此获得客户端答案。
6、DNS资源记录
DNS区域采用资源记录的形式存储信息。每条资源记录均具有一个类型,表明其保留的数据类型
A | 名称至IPV4地址 |
---|---|
AAAA | 名称至IPV6地址 |
CNAME | 名称至“规范名称“(包含A/AAAA 记录的另一个名称) |
PTR | IPV4/IPV6地址至名称 |
MX | 用于名称的邮件交换器(向何处发送其电子邮件) |
NS | 域名的名称服务器 |
SOA | ”授权起始“,DNS区域的信息(管理信息) |
7、必须知道的知识
DNS协议 对应端口53
简单邮件传输协议 smtp 对应端口25
二、高速缓存DNS的部署
【1】在内网里面搭建一台高速缓存dns服务器,属于非权威dns,目的是为了提高内网的访问速率
【2】为什么要搭建高速缓存dns服务器?
当一个企业内网里面的每一台主机都要访问114.114.114.114这个权威dns进行域名解析
但是内网通往114.114.114.114只有一根传输线,此时每台的访问速率都非常慢
内网访问速率慢,但内网之间访问速率快
现在我们想把企业内部的一台服务器搭建成高速缓存dns,其他主机不再需要问114.114.114.114,直接问高速缓存dns服务器即可
只需要高速缓存dns去问114.114.114.114,然后共享给主机。
【3】高速缓存DNS的搭建
高速缓存dns的搭建需要/etc/rndc.key这个文件的存在(如果加密字符太短就不存在)
systemcel start named (起不来)开启以后这个文件才会存在,存储加密字符
此时敲击物理键盘,使他的加密字符变长,此时这个文件才会有,系统才会起来
cat /etc/random 敲击物理键盘则生成 /etc/rndc.key
实验:在虚拟机上部署与测试
主机:
【1】
连网
【2】
cd proc/sys
cd net/ipv4
icmp_echo_ignore_all开启内核数据接口
echo 1 > icmp_echo_ignore_all
sysctl -a | grep ip_forward 查看状态
vim /etc/sysctl.conf
net.ipv4.ip_forward=1 # 开启路由功能
firewall-cmd --add-masquerade
firewall-cmd --list-all #开启防火墙伪地址(包装)
vim /etc/sysconfig/network
GATEWAY=172.25.254.76 #设置为真机IP,真机连网了,将数据包扔给网关主机
【2】
yum install bind -y
【3】
systemctl start firewalld.service
firewall-cmd --permanent --add-service=dns #在防火墙上允许dns服务,防外网
firewall-cmd --list-all
【4】
vim /etc/resolv.conf
nameserver 114.114.114.114
【5】
vim /etc/named.conf
systemctl restart named
netstat -antulpe | grep named #查看53监听端口
dig www.baidu.com #查询到的IP会变,轮循工作
vim /etc/sysconfig/network
vim /etc/resolv.conf
nameserver 172.25.254.176
dig www.baidu.com
2、搭建权威dns服务器
使176非权威dns不再向114权威dns询问,向自己询问。将自己已有的共享出去,没有的向114查询
与上述步骤类似,唯一不同
vim /etc/resolv.conf
nameserver 172.25.254.176
下面实验均在搭建的权威dns176上进行
三、正向解析
在主dns服务器(server中)
【1】
vim /etc/named.conf
显示所有的域包含在 /etc/named.rfc1912.zones
vim /etc/named.rfc1912.zones
vim westos.com.zone
$TTL 1D #最多维持一天
@[==域名]
IN SOA[授权起始]
dns.westos.com.[由谁授权]
root.westos.com.[由谁维护]
(0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum #时间
NS dns.westos.com. #授权
dns A 172.25.254.119 #授权dns的信息
www A 172.25.254.119 #这个域中的主机名www
ip是172.25.254.119
【5】
systemctl restart named
测试:
客户端(在desktop中):
dig www.westos.com
ANSWER SECTION
四、模拟IP轮循
dig查询到百度的IP域名:
www.baidu.com 对外
www.a.shifen.com 内部域名
实验·:
【1】
vim /etc/named.rfc1912.zones
cd /var/named
cp -p named.localhost westos.com.zone
vim westos.com.zone
bbs 客户访问域名
linux 内部域名
CNAME #change name改变名称,转换域名
【4】
systemctl restart named
测试:
在客户端(desktop主机):
【1】
dig bbs.westos.com
五、邮件
我们平常发送邮件都是先登陆腾讯的服务器,再将邮件发出去
qq.com这台服务器使用[email protected]发送邮件
需要通过dns解析找到mx记录163.com.对应的IP
二者通过smtp协议的25端口进行邮件传送
简单邮件传输协议 (Simple Mail Transfer Protocol, SMTP) 是在Internet传输email的事实标准
SMTP是一个相对简单的基于文本的协议。在其之上指定了一条消息的一个或多个接收者(在大多数情况下被确认是存在的),然后消息文本会被传输
可以很简单地通过telnet程序来测试一个SMTP服务器,SMTP使用TCP端口25
要为一个给定的域名决定一个SMTP服务器,需要使用MX (Mail eXchange) DNS
实验:
在主dns(虚拟机server上)
【1】
在dns服务器上查询25端口是否开启
netstat -antluep | grep master
vim /var/named/westos.com.zone
even.com. MX 1 172.25.254.124.
#MX邮件交换器1表示级别,表示一个记录而不是地址,所有有.
systemctl restart named
测试
【1】客户端给服务端发邮件
mail [email protected]
dig -t mx even.com #查询IP
mailq #查看邮件信息
mail #查看不了内容,未开启25端口
六、反向解析(通过IP找域名)
实验:
【1】
dig -x 172.25.254.111 #查域名
vim /etc/named.rfc1912.zones
cd /var/named/
cp -p named.loopback westos.com.ptr #复制文件及属性
ll
root named #所属用户所属组
vim westos.com.ptr
systemctl restart named
测试:
【1】
在客户端(desktop 虚拟机上)
vim /etc/resolv.conf
nameserver 172.25.254.176
dig -x 172.25.254.111
dig -x 172.25.254.112
ANSWER SECTION
六、双向解析
内网用户与外网用户dig查询到的地址不同
实验:
【1】
cd /var/named/
cp -p westos.com.zone westos.com.localnet
vim westos.com.localnet 全文替换172.25.254为192.168.0
:%s/172.25.254/192.168.0/g
cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.localnet
vim /etc/named.rfc1912.localnet
vim /etc/named.conf
dig www.westos.com
vim /etc/resolv.conf
nameserver 172.25.254.20
dig www.westos.com
七、辅助dns
设置辅助dns,针对外网访问dns服务器来说,缓解访问dns服务器的压力。
实验:
【1】
为防止影响实验效果,注释掉server主机上双向dns设定
再打开一台虚拟机(desktop)
ip 设置为172.25.254.20
【2】
在辅助dns上:
yum install bind -y
【3】
vim /etc/named.conf
vim /etc/named.rfc1912.zones
systemctl restart named
【5】
vim /etc/resolv.conf
nameserver 172.25.254.20
firewall-cmd --permanent --add-service=dns
firewall-cmd --reload
firewall-cmd --list-all
【7】
dig www.westos.com
vim /etc/resolv.conf
nameserver 172.25.254.20
dig www.westos.com --->得到和172.25.254.20相同的结果
若主dns对应IP发生更改后,辅助dns无法同时更新,必须删除文件/var/named/slaves/westos.com.zones,然
后重启named,生成新的文件,实现同步更新。在企业中这种方法显然不可行。
主辅同步设置:
若文件中IP修改同时修改serial值
dns服务器比对serial值,发生变化后通知辅助dns进行数据同步
serial 最好修改成时间 2019080401 [不超过十位]
实验:
【1】
vim /etc/named.rfc1912.zones
vim /var/named/westos.com.zone
systemctl restart named
测试:
在辅助dns(desktop虚拟机)中:
dig www.westos.com
dig www.westos.com
九、允许别人更新
##allow-transfer {172.25.254.200; }; 企业rhel7及之前在更新时必须加,之后不用
实验:
在主dns上:
【1】
vim /etc/named.rfc1912.zones
allow-update { 172.25.254.76; }; #允许76主机更新
【2】
chown root.named /var/named
chmod 770 /var/named
【3】
systemctl restart named
getenforce 0 #selinux必须设置为警告模式,否则会影响实验
测试:
在172.25.254.76上
nsupdate
> server 172.25.254.176
> update add hello.westos.com 86400 A 172.25.254.123
> send
注意:
86400 #单位:秒,指A记录最多缓存一天
此时在主dns上生成
/var/named/named.zones.jnl
若此时在主dns上使用systemctl restart named则:
/var/named/westos.com/zone.jnl会和/var/named/westos.com.zone合并,若后续会用到此文件,可将/var/named/westos.com.zone备份后,在使用重启命令。
测试:
【1】
主dns
dig hello.westos.com
dig hello.westos.com
nsupdate
> server 172.25.254.176
> update delete hello.westos.com
> send
【2】在主dns上
rm -fr /etc/named/westos.com.zone*
cp -p /mnt/westos.com.zone /var/named/
十、通过密钥更新
allow-update中为IP时主机名发生变化,则更新主机发生变化,别人可以通过更改IP进行操作,不安全。
使用key(钥匙)更新,提高安全性。
实验:
在主dns(虚拟机server上)
【1】恢复之前设置
systemctl restart named
rm -fr westos.com.zone*
cp -p /mnt/westos.zone /var/named #之前备份过的
systemctl restart named
cat /etc/rndc.key #显示为MD5类型加密
#使用与其目录下相同类型的加密,防止出错
cd /mnt/
dnssec-keygen -a HMAC-MD5 -b 128 -n host westos
-a 加密方式
-b 密钥大小
-n 以什么方式识别
【2】
MD5对称加密,两个文件中的钥匙都一样
ls /mnt/
Kwestos.+157+50462.key Kwestos.+157+50462.private
cat Kwestos.+157+50462.key
westos. IN KEY 512 3 157 KsAGuuY2DnMO58Oq93nPUQ==
cp -p /etc/rndc.key /etc/westos.key
vim /etc/westos.key
key "westos" {
algorithm hmac-md5;
secret "KsAGuuY2DnMO58Oq93nPUQ==";
};
【4】添加密钥文件
vim /etc/named.conf
#在option语句块外添加
include "/etc/westos.key";
vim /etc/named.rfc1912.zones
zone "westos.com" IN {
type master;
file "westos.com.zones";
allow-update { key westos; };
also-notify { 172.25.254.200; };
};
systemctl restart named
vim /etc/named.rfc1912.zones
【5】
发放密钥给76主机
scp /mnt/Kwestos.+157+50462.key [email protected]:/mnt/
scp /mnt/Kwestos.+157+50462.private [email protected]:/mnt/
nsupdate -k Kwestos.+157+50462.private
> server 172.25.254.119
> update add hello.westos.com 86400 A 172.25.254.8
> send
vim /etc/resolv.conf
nameserver 172.25.254.176
dig hello.westos.com
vim /etc/sysconfig/network
GATEWAY=172.25.254.176
vim /etc/resolv.conf
nameserver 172.25.254.20
dig hello.westos.com
vim /etc/resolv.conf
十一、动态域名解析ddns
实验:
【1】配置yum源
在真机172.25.254.76上开启httpd服务
挂载镜像7.0 #虚拟机版本为7.0
在主dns上配置yum源
在firefox上检测真机httpd共享是否设置好
cd /etc/yum.repos.d
ls
vim /rhel_dvd.repo
1、在真机172.25.254.76上开启httpd服务
2、开启httpd服务
3、在浏览器中搜索目录共享镜像挂载目录rhel7.0
4、配置虚拟机yum源
主dns(虚拟机server)上搭建dhcp进行如下操作:
【2】
yum install -y dhcp
firewall-cmd --permanent --add-service=dhcp #防火墙上开启dhcp
firewall-cmd --reload #刷新
firewall-cmd --list-all #显示
vim /etc/dhcp/dhcpd.conf #此时文件内容为空,显示参考usr/share/doc/dhcp*/dhcpd.conf.example
cp -p /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
vim /etc/dhcp/dhcpd.conf
删除35行以后的 #esc--->dG
7 option domain-name "westos.com"; #主dns的域
8 option domain-name-servers 172.25.254.176;
14 ddns-update-style interim;
32 subnet 172.25.254.0 netmask 225.225.225.0 {
range 172.25.254.50 172.25.254.90;
option routers 172.25.254.176;
}
key westos {
algorithm hmac-md5;
secret KsAGuuY2DnMO58Oq93nPUQ==;
};
zone westos.com. {
primary 172.25.254.176;
key westos;
}
systemctl restart dhcpd
systemctl status dhcpd
hostnamectl set-hostname test.westos.com
【2】
vim /etc/sysconfig/network-scripts/ifcfg-eth0 #修改网络为dhcp
vim /etc/resolv.conf
nameserver 172.25.254.176
systemctl restart network
dig test.westos.com
dig test.westos.com
再次修改主dns地址池,让客户端的IP改变
主dns(虚拟机server)上:
vim /etc/dhcp/dhcpd.conf
systemctl restart dhcpd
systemctl restart network
ip addr show
dig test.westos.com
同一网段的另一台客户端主机(真机)
vim /etc/resolv.conf
dig test.westos.com