DNS
(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。
存储并提供某区域 ( 整个 DNS 域或 DNS 域的一部分 ) 的实际数据。
权威名称服务器的类型包括
Master : 包含原始区域数据。有时称作 “主要 ”名称服务器
Slave : 备份服务器 , 通过区域传送从 Master 服务器获得的区域数据的副本。有时称作 “次要 ”名称服务器
– 客户端通过其查找来自权威名称服务器的数据。递归名称服务器的类型包括
存名称服务器 : 仅用于查找 , 对于非重要数据之外的任何内容都不具有权威性
客户端上的 Stub 解析器 将查询发送至 /etc/resolv.conf 中的名称服务器,如果名称服务器对于请求的信息具有权威性 , 会将权威答案发送至客户端,否则 , 如果名称服务器在其缓存中有请求的信息 , 则会将非权威答案发送至客户端,如果缓存中没有信息 , 名称服务器将搜索权威名称服务器以查找信息 , 从根区域开始 , 按照DNS 层次结构向下搜索, 直至对于信息有具有权威性的名称服务器 , 以此为客户端获得答案。在此情况中,名称服务器将信息传递至客户端并在自己的缓存中保留一个副本 , 以备以后查找。
• DNS 区域采用资源记录的形式存储信息。每条资源记录均具有一个类型 , 表明其保留的数据类型。
– A : 名称至 IPv4 地址
– AAAA : 名称至 IPv6 地址
– CNAME : 名称至 ”规范名称 “ ( 包含 A/AAAA 记录的另一个名称 )
– PTR : IPv4/IPv6 地址至名称
– MX : 用于名称的邮件交换器 ( 向何处发送其电子邮件 )
– NS : 域名的名称服务器
– SOA :” 授权起始 “ , DNS 区域的信息 ( 管理信息 )
• 它显示来自 DNS 查找的详细信息 , 其中包括为什么查询失败 :
– NOERROR : 查询成功
– NXDOMAIN : DNS 服务器提示不存在这样的名称
– SERVFAIL : DNS 服务器停机或 DNSSEC 响应验证失败
– REFUSED : DNS 服务器拒绝回答 ( 也许是出于访问控制原因 )
• 标题指出关于查询和答案的信息 , 其中包括响应状态和设置的任何特殊标记 ( aa 表示权威答案 , 等等 )
– QUESTION : 提出实际的 DNS 查询
– ANSWER : 响应 ( 如果有 )
– AUTHORITY : 负责域 / 区域的名称服务器
– ADDITIONAL : 提供的其他信息 , 通常是关于名称服务器
– 底部的注释指出发送查询的递归名称服务器以及获得响应所花费的时间
BIND 是最广泛使用的开源名称服务器,在 RHEL 中 , 通过 bind 软件包提供防火墙开启端口 53/TCP 和 53/UDP。BIND 的主配置文件是 /etc/named.conf 。/var/named 目录包含名称服务器所使用的其他数据文件
• // 或 # 至行末尾是注释 ; /* 与 */ 之间的文本也是注释 ( 可以跨越多行 )
• 指令以分号结束 (;)
• 许多指令认为地址匹配列表放在大括号中、以CIDR 表示法表示的 IP 地址或子网列表中 , 或者命名的 ACL 中 ( 例如 any; [ 所有主机 ] 和none; [ 无主机 ] )。
• 文件以 options 块开始 , 其中包含控制 named如何运作的指令。
• zone 块控制 named 如何查对于其具有权威性的根名称服务器和区域。
配置实验环境:
配置虚拟机IP,yum仓库,修改主机名为dns-server
[root@dns-server ~]# yum search dns ##查找DNS在哪个软件包里
[root@dns-server ~]# yum install bind.x86_64 ##安装bind软件包
[root@dns-server ~]# systemctl stop firewalld ##关闭火墙
[root@dns-server ~]# rpm -qc bind ##查找关于bind的所有配置文件 /etc/named.conf
[root@dns-server ~]# vim /etc/named.conf
11 listen-on port 53 { any; }; ##端口对任何人都可以使用
17 allow-query { any; }; ##允许与任何直连的网络使用
18 forwarders { 114.114.114.114; }; ##查找源地址IP
33 dnssec-validation no; ##是否进行dnssec确认开关
[root@dns-server ~]# systemctl restart named ##重启dns
[root@dns-server ~]# vim /etc/resolv.conf
[root@dns-server ~]# dig www.baidu.com ##测试打开百度的时间
在真机上:
[root@foundation68 ~]# vim /etc/resolv.conf
[root@foundation68 ~]# dig www.baidu.com
##dig www.baidu.com成功,两次速度有变化,第一次要比第二次快
报错:
以上报错是因为/etc/named.conf里面的配置有错误。
实验步骤:在虚拟机Desktop
[root@dns-server ~]# vim /etc/named.conf ##配置DNS配置文件 注释forwarders
[root@dns-server ~]# systemctl restart named
[root@dns-server ~]# vim /etc/named.rfc1912.zones ##编辑域文件 ##复制13-17行后,更改如下
25 zone "westos.com" IN { ##指定要维护的域名
26 type master;
27 file "westos.com.zone"; ##指定记录的文件名
28 allow-update { none; };
29 };
[root@dns-server ~]# cd /var/named
[root@dns-server named]# cp -p named.localhost westos.com.zone ##复制named.localhost解析模版到westos.com.zone(-p 保留权限)
[root@dns-server named]# vim westos.com.zone ##编辑正向解析文件配置文件,注意配置文件中的“.”
[root@dns-server named]# systemctl restart named ##重启服务
[root@dns-server named]# dig hello.westos.com ##查看记录的解析情况
实验步骤:在虚拟机Desktop
[root@dns-server ~]# systemctl stop firewalld ##关闭火墙
[root@dns-server ~]# systemctl disable firewalld ##开机自动关闭
[root@dns-server ~]# systemctl start named ##开启dns服务
[root@dns-server ~]# systemctl enable named ##开机自动启动
[root@dns-server ~]# cd /var/named
[root@dns-server named]# vim westos.com.zone ##添加新的轮叫机制
[root@dns-server named]# systemctl restart named ##重启服务
[root@dns-server named]# dig www.westos.com
##dig www.westos.com两次,两次解析到不同的地址
实验步骤:在虚拟机Desktop
[root@dns-server ~]# vim /etc/named.rfc1912.zones ##编辑域文件,复制第37行,更改如下
[root@dns-server ~]# cd /var/named
[root@dns-server named]# cp -p named.loopback westos.com.ptr ##复制named.loopback解析模版到westos.com.ptr(-p 保留权限)
[root@dns-server named]# ls
data named.ca named.localhost slaves westos.com.zone
dynamic named.empty named.loopback westos.com.ptr
[root@dns-server named]# vim westos.com.ptr ##编辑反向解析文件配置文件
[root@dns-server named]# systemctl restart named
[root@dns-server named]# dig -x 172.25.254.111 ##查看反向解析情况
实验步骤:在虚拟机Desktop
[root@dns-server named]# cp -p westos.com.zone westos.com.inter ##创建内网与外网不同的解析文件,内网为inter结尾
[root@dns-server named]# vim westos.com.inter ##编辑外网解析配置,修改解析地址为192.168.0网段的地址
[root@dns-server named]# cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.inter ##创建内网与外网不同域文件
[root@dns-server named]# vim /etc/named.rfc1912.inter
[root@dns-server named]# vim /etc/named.conf ##配置域名主配置文件 ##注释51-57行,添加如下:
[root@dns-server named]# systemctl restart named ##重启服务
[root@dns-server named]# vim /etc/resolv.conf
注意:这个文件里如果有其他的nameserver一定要注释。
[root@dns-server named]# dig www.westos.com ##显示内网的IP
在真机上:
[root@foundation68 ~]# vim /etc/resolv.conf
注意:这个文件里如果有其他的nameserver一定要注释。
[root@foundation68 ~]# dig www.westos.com ##显示外网的IP
由于单个DNS服务器解析人多的时候负载会变大,所以设置从DNS服务器来缓解主DNS服务器的压力
在server虚拟机上:
打开server,配置yum源, ip=172.25.254.228
[root@foundation ~]# hostnamectl set-hostname dns-slave.example.com
[root@dns-slave ~]# yum install bind -y
[root@dns-slave ~]# yum clean all
[root@dns-slave ~]# vim /etc/resolv.conf
[root@dns-slave ~]# vim /etc/named.conf
[root@dns-slave ~]# vim /etc/named.rfc1912.zones
[root@dns-slave ~]# systemctl stop firewalld
[root@dns-slave ~]# dig www.westos.com
在虚拟机Desktop:
[root@dns-server named]# vim /etc/named.conf ##将52-59取消注释,将60行后全部注释
[root@dns-server named]# vim /etc/named.rfc1912.inter
[root@dns-server named]# vim westos.com.zone
第3行 0 ; serial ##每更改一次网段地址就要更改一次数字
[root@dns-server named]# systemctl restart named
[root@dns-server named]# dig www.westos.com
在虚拟机server:
同步的结果:
[root@dns-slave ~]# systemctl restart named
[root@dns-slave ~]# dig www.westos.com
注意:selinux状态不能为Enforcing!
实验步骤: 在虚拟机desktop上
[root@dns-server ~]# cp -p /var/named/westos.com.zone /mnt ##对本地文件进行备份
[root@dns-server ~]# vim /etc/named.rfc1912.zones ##修改本地配置文件
23 allow-update { 172.25.254.28; }; ##通过IP的客户端可以进行文件的更新
[root@dns-server ~]# systemctl restart named
在真机上:
[root@foundation68 ~]# nsupdate
在虚拟机desktop上:
[root@dns-server named]# chmod 770 /var/named
在真机上:
[root@foundation68 ~]# nsupdate
##远程主机可以实现更新
在虚拟机desktop上:
[root@dns-server named]# ls
[root@dns-server named]# systemctl restart named ##更新
[root@dns-server named]# vim westos.com.zone ##里面文件改变
[root@dns-server named]# rm -fr westos.com.zone* ##删除更新文件
[root@dns-server named]# cp -p /mnt/westos.com.zone . ##将原配置文件还原
注意:在做完实验后一定要将原配置文件还原,否则在下一次实验中会出现错误。
实验步骤:在虚拟机Desktop
[root@dns-server named]# cd /mnt/
[root@dns-server mnt]# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST westos ##生成私钥(-a ##加密方式;-b ##密码大小bits;-n ##nametype域名解析)
Kwestos.+157+45055 ##生成的密码
[root@dns-server mnt]# ls
Kwestos.+157+45055.key Kwestos.+157+45055.private westos.com.zone
[root@dns-server mnt]# cp /etc/rndc.key /etc/westos.key -p
[root@dns-server mnt]# cat Kwestos.+157+45055.key ##查看密钥
westos. IN KEY 512 3 157 VHgwrgrkdcYIJaHlvWQ9Ig==
[root@dns-server mnt]# vim /etc/westos.key ##编辑密钥文件
[root@dns-server mnt]# vim /etc/named.conf ##新增密钥文件
[root@dns-server mnt]# vim /etc/named.rfc1912.zones
[root@dns-server mnt]# systemctl restart named
[root@dns-server mnt]# ls
Kwestos.+157+45055.key Kwestos.+157+45055.private westos.com.zone
[root@dns-server mnt]# scp Kwestos.+157+45055.* [email protected]:/mnt/ ##把密钥文件传送给远程主机
在虚拟机server:
[root@dns-slave ~]# cd /mnt
[root@dns-slave mnt]# ls ##查看密钥有没有传过来
Kwestos.+157+45055.key Kwestos.+157+45055.private
[root@dns-slave mnt]# nsupdate -k Kwestos.+157+45055.private
在虚拟机Desktop:
[root@dns-server mnt]# systemctl restart named
[root@dns-server mnt]# cd /var/named
[root@dns-server named]# vim westos.com.zone ##可以看到从远程主机上发送过来更改的文件
[root@dns-server named]# rm -fr westos.com.zone* ##删除更新文件
[root@dns-server named]# cp -p /mnt/westos.com.zone . ##将原配置文件还原
注意:在做完实验后一定要将原配置文件还原,否则在下一次实验中会出现错误。
实验步骤:在server虚拟机上
[root@dns-slave Desktop]# hostnamectl set-hostname linux.westos.com
[root@dns-slave Desktop]# hostname
linux.westos.com
[root@dns-slave Desktop]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
[root@dns-slave Desktop]# systemctl restart network ##重启不起来
在desktop虚拟机上:
[root@dns-server named]# yum install dhcp -y
[root@dns-server named]# rm -fr westos.com.zone*
[root@dns-server named]# cp -p /mnt/westos.com.zone .
[root@dns-server named]# systemctl restart named
[root@dns-server ~]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
cp: overwrite ‘/etc/dhcp/dhcpd.conf’? y ##有覆盖提示,说明文件正确
[root@dns-server ~]# cat /etc/westos.key ##把文件复制到下一个文件内
[root@dns-server ~]# vim /etc/dhcp/dhcpd.conf
##删除27.28行,34行后面所有
##dns的更新工作方式
[root@dns-server ~]# systemctl restart dhcpd ##重启动态网络
在server虚拟机上:
[root@linux Desktop]# systemctl restart network ##重启网络
[root@linux Desktop]# ifconfig
[root@linux Desktop]# dig linux.westos.com