www.baidu.com的全称域名FQDN实际上是www.baidu.com.即后面实际上省略了点,其中,www往往是某主机的别名,.baidu.com.是域名的全路径,路径中列出了各级域。

    域名的分层结构如图:

DNS服务_DNS       DNS服务器能够将域名解析为ip,以实现主机间通信。下面将介绍各级服务器的搭建,并模拟客户端查询某域名的完整解析过程:

DNS服务_服务_02


根域的DNS服务器:172.18.0.107 centos7.3   绿色提示符

com域的DNS服务器:172.18.0.109 centos7.3   紫色提示符

magedu.com域的主DNS服务器:172.18.250.110   centos7.4   白色提示符root@localhost

magedu.com域的从DNS服务器:172.18.22.200   centos7.3      蓝色提示符

运营商的DNS服务器:172.18.0.106 centos6   ×××提示符 ,用作转发服务器

客户端:172.18.18.5 rhel5   白色提示符root@rhel5

一 搭建magedu.com域的主DNS服务器(172.18.250.110

1 检查SELINUX

DNS服务_DNS_03

    当前SELINUX的状态为Enforcing

DNS服务_DNS_04

    打开SELINUX配置文件

DNS服务_服务_05

    将其修改为disabled或permissive,即禁用SELINUX,保存退出

DNS服务_服务_06

    但是上面对配置文件的修改需重启后才能生效,可以用setenforce 0临时禁用SELINUX

2 检查防火墙

DNS服务_服务_07

    查看防火墙状态

DNS服务_DNS_08

    当前防火墙的状态为开启

DNS服务_DNS_09

    systemctl  disable firewalld.service开机时禁用防火墙   

    systemctl  stop firewalld.service临时禁用防火墙

3 开启DNS服务

DNS服务_DNS_10

    临时启用DNS服务

DNS服务_DNS_11

    将DNS服务设为开机启用

4 配置DNS

DNS服务_服务_12

   打开DNS总配置文件

DNS服务_DNS_13

    假设本机ip为127.0.0.1 192.168.25.107  172.18.0.107

  •   listen-on定义当前DNS服务器监听的端口,选项有

     本机某个ip:只监听本机某个ip的3306端口

     localhost:本机所有ip,即监听本机所有ip的3306端口

     any:监听所有网段的ip的3306端口,实际上这个选项对listen-on来说,相当于localhost,注释listen-on时相当于any

  •   allow-query定义当前DNS服务器为哪些主机提供查询服务,选项有

     本机某个ip:本机某个ip,即只允许本机的某个ip查询,只为本机某个ip提供查询服务。此时本机既是客户端又是服务器。

     某个网段ip:某个网段ip,即只允许某个网段ip查询,只为某个网段ip提供查询服务,例如172.18.0.0/16

     localhost:本机所有ip,即只允许本机的所有ip查询,只为本机所有ip提供查询服务,此时本机既是客户端又是服务器。

     any:所有网段的ip,即允许所有网段的ip查询,为所有网段的ip提供查询服务,注释allow-query时相当于any

     图中表示监听本机所有ip,为所有网段的ip提供查询服务

DNS服务_服务_14

    之所以所有的DNS服务器都知道根,是因为在每个DNS服务器上都默认定义了一个根域,根域的数据库文件/var/named/named.ca中指定了根域的DNS服务器,即互联网上的13组DNS服务器。DNS服务器上对根域的定义与其他域的定义不同,其他域在其数据库文件中将DNS服务器指向当前DNS服务器。

DNS服务_服务_15

    打开根域的数据库文件/var/named/named.ca

DNS服务_服务_16


DNS服务_服务_17

    NS记录表示出了为本域及本域的子域提供名字解析服务的所有DNS服务器,NS记录定义了DNS服务器的名称,A记录定义了与某个DNS服务器相对应的ip

DNS服务_服务_18

DNS服务_DNS_19

    如图表示互联网上的根域有一一台DNS服务器的ip为199.7.91.3

DNS服务_DNS_20


DNS服务_DNS_21

     所以,将/var/named/named.ca的内容改成上图所示后,172.18.250.110就会认为根是172.18.0.107

DNS服务_服务_22

    实验中除了客户端和72.18.0.107之外的所有主机都需要将根指向172.18.0.107,可以用scp命令将改好的/var/named/named.ca文件拷贝到各主机,也可直接修改相应主机上的/var/named/named.ca,

172.18.22.200将根指向172.18.0.107

DNS服务_服务_23

    172.18.0.106将根指向172.18.0.107

DNS服务_DNS_24

    打开172.18.0.108上根域的数据库文件,将根指向172.18.0.107

DNS服务_DNS_25


DNS服务_服务_26

    打开区域数据库配置文件

DNS服务_服务_27

    建立magedu.com域:

    双引号内为域名;

    类型为master,表示主DNS服务器;

    file指定区域解析数据库文件的相对路径(相对于/var/named)和名称,即为/var/named/magedu.com.zone

DNS服务_服务_28

     打开并建立区域解析数据库文件/var/named/magedu.com.zone

DNS服务_DNS_29

    区域解析库:由众多资源记录组成,记录类型包括A、 SOA、NS、CNAME等

    资源记录定义的格式:

    语法:name        [TTL]        IN                   rr_type          value

          名字       生命期     关键字             记录类型          值

    下面以上图为例介绍区域解析库的使用:

    (1)

DNS服务_服务_30

    TTL是记录缓存的有效期, 默认以s为单位

    图中$TTKL为全局TTL,对下面的每条记录都有效,每条记录也可以单独定义局部TTL,只对当前记录有效。

   (2)SOA记录:

DNS服务_服务_31

  •   @即名字,表示本域的域名,也可以写成magedu.com.

  •   TTL为空,表示继承全局TTL,即生命期为86400s

  •   关键字IN

  •   记录类型为SOA  

  •   SOA记录的第一个值是主DNS服务器(有且仅有一个)的名称,不一定与DNS服务器的主机名保持一致,只要与下面的A记录匹配,即能够将该名称解析成ip地址即可

DNS服务_服务_32

  •    SOA记录的第二个值是DNS服务器管理员的邮箱地址,邮箱地址本来应该写成admin@magedu.com.但@有特殊含义,所以将@换成点

DNS服务_DNS_33

  •   SOA记录的第三个值由一系列定义组成

DNS服务_服务_34

      其中,

DNS服务_DNS_35

    区域数据库的版本号,一旦数据库发生更改,就需要手动增大该序列号。

    主从复制时,系统判断区域数据库文件的内容是否发生变化时并不是真正去检查区域数据库文件的内容,而是看序列号是否增大,也就是说即使区域数据库文件的内容未发生变化,只要序列号增大,系统就认为区域数据库文件的内容发生了变化。

    每个域可能有多台DNS服务器,其中有且仅有一台主DNS服务器,主DNS服务器的数据库可读可写,从DNS服务器的数据库只能读,即只能供用户查询。从DNS服务器数据库的内容来自于主DNS服务器数据库, 主从DNS服务器数据库的同步(即主从复制)机制有pull和push两种:

    push:主DNS数据库重启服务时,会检查序列号。当序列号变化,即区域数据库文件的内容发生变化,主DNS数据库就会将新版数据库push至从DNS数据库,否则不执行push动作。

    pull:从DNS数据库会周期性的到主DNS数据库检查序列号。当序列号变化,即区域数据库文件的内容发生变化,从DNS数据库就会将新版数据库pull至自己的数据库,否则不执行pull动作。

DNS服务_DNS_36

     refresh定义了主从复制时每个周期的长度,默认以秒为单位

DNS服务_DNS_37

     若因为网络原因,导致pull动作失败,则从DNS服务器过一段时间后会再去尝试。retry定义了这段时间的长度,默认以秒为单位

DNS服务_服务_38

     若主从DNS服务器的数据库超过expire时间仍未同步,则从DNS服务器数据库中的内容将过期

DNS服务_DNS_39

    若用户查询DNS服务器时输入错误,如写成,DNS服务器查不到该条记录,用户的机器上就会缓存该错误查询结果,下次再输成该错误结果时,就不用到DNS服务器上再去查询。miminum定义错误查询结果的缓存时间

   (3)NS记录

    NS记录表示出了为本域及本域的子域提供名字解析服务的所有DNS服务器

DNS服务_DNS_40

  •   NS记录的名字为空时,会默认其名字为本域的域名,即magedu.com

也可以写成magedu.com.或@

  •   TTL为空,表示继承全局TTL,即生命期为86400s

  •   关键字IN

  •   记录类型为NS  

  •   在本例中,NS记录的值是当前域DNS服务器的名称,不一定与DNS服务器的主机名保持一致,只要与下面的A记录匹配,即能够将该名称解析成ip地址即可

  (4)A记录

   DNS服务器的A记录

DNS服务_服务_41

  •   在本例中,A记录的名字为dns1,系统会默认将其补全为.

  •   TTL为空,表示继承全局TTL,即生命期为86400s

  •    关键字IN

  •   记录类型为A

  •   值为192.168.25.107,与上面的NS记录匹配,将DNS服务器名称解析成ip地址,即当前域DNS服务器的ip为192.168.25.107

    主机的A记录

DNS服务_服务_42

  •   在本例中,A记录的名字为websrv,系统会默认将其补全为.

  •   TTL为空,表示继承全局TTL,即生命期为86400s

  •   关键字IN

  •   记录类型为A

  •   值为192.168.25.66,即主机.的ip为192.168.25.66

   (5)别名记录

DNS服务_DNS_43

  •   在本例中,别名记录的名字为www,系统会默认将其补全为www.magedu.com.

  •   TTL为空,表示继承全局TTL,即生命期为86400s

  •    关键字IN

  •   记录类型为A

  •   值为websrv,系统会默认将其补全为.  即www.magedu.com.是主机.的别名,然后配合上面的A记录,可知ip为192.168.25.66。当客户端请求解析www.magedu.com这个别名对应的ip时,首先由别名记录得到. 然后由A记录得到ip

DNS服务_服务_44

    172.18.18.5客户端直接请求172.18.250.110解析www.magedu.com,因为172.18.250.110有magedu.com域,在该域的数据库文件中有www.magedu.com的主机记录,即可解析为ip

二 搭建magedu.com域的从DNS服务器(172.18.22.200)

1 检查SELINUX

DNS服务_DNS_45

    当前SELINUX的状态为Permissive,即已禁用

2 检查防火墙

DNS服务_DNS_46

    当前防火墙的状态为已禁用

3 配置DNS

DNS服务_服务_47

    打开总配置文件

DNS服务_服务_48

    图中表示监听本机所有ip,为所有网段的ip提供查询服务

DNS服务_服务_49

   建立magedu.com域:

   双引号内为域名,注意从服务器的域名仍为magedu.com;

   类型为slave,表示从DNS服务器;

    file指定区域解析数据库文件的相对路径(相对于/var/named)和名称,即为/var/named/slaves/magedu.com.zone,从DNS服务器的区域解析数据库文件放在/var/named/slaves下

DNS服务_服务_50

   重启服务后主从DNS服务器的数据库文件自动同步

DNS服务_DNS_51

     172.18.18.5客户端直接请求172.18.22.200解析www.magedu.com,因为172.18.22.200是172.18.250.110的从DNS服务器,所以其数据库文件与主DNS服务器上数据库文件的内容相同,虽然没有magedu.com域,但有该域的数据库文件,即有www.magedu.com的主机记录,就可解析为ip


三 搭建com域的DNS服务器(172.18.0.109 )

1 检查SELINUX和防火墙

    检查设置方式可以参考上面,此处不再赘述

2 DNS设置

DNS服务_服务_52

    打开区域数据库配置文件

DNS服务_服务_53

    建立com域:

    双引号内为域名;

    类型为master,表示主DNS服务器;

    file指定区域解析数据库文件的相对路径(相对于/var/named)和名称,即为/var/named/com.zone

DNS服务_DNS_54

    进入/var/named目录

DNS服务_DNS_55

    打开并建立区域解析数据库文件com.zone

DNS服务_DNS_56

     NS记录表示出了为本域及本域的子域提供名字解析服务的所有DNS服务器

DNS服务_DNS_57

  •   NS记录的名字为magedu,系统会默认补上本域的域名,即magedu.com.表示为本域的子域magedu.com提供名字解析服务的DNS服务器

      不可以写成@,因为@表示本域域名

  •   TTL为空,表示继承全局TTL,即生命期为86400s

  •   关键字IN

  •   记录类型为NS  

  •   在本例中,NS记录的值是本域的子域的DNS服务器的名称,不一定与DNS服务器的主机名保持一致,只要与下面的A记录匹配,即能够将该名称解析成ip地址即可

   

    DNS服务器的A记录

DNS服务_服务_58

  •   在本例中,A记录的名字为dns1,系统会默认将其补全为.

  •    TTL为空,表示继承全局TTL,即生命期为86400s

  •   关键字IN

  •   记录类型为A

  •   值为172.18.250.46,与上面的NS记录匹配,将DNS服务器名称解析成ip地址,即本域的子域的DNS服务器的ip为192.168.25.107

    本例中,com域将其子域magedu.com的DNS服务器委派给172.18.250.46

DNS服务_DNS_59

    重启服务

DNS服务_服务_60

    客户端请求172.18.0.109将www.magedu.com解析成ip地址,172.18.0.109只有com域,而com域的子域是magedu.com域,根据区域数据库文件得到magedu.com域的DNS服务器为172.18.250.46,172.18.250.46就有www.magedu.com的主机记录,即可解析为ip

四 搭建根域的DNS服务器(172.18.0.107)

1 检查SELINUX和防火墙

    检查设置方式可以参考上面,此处不再赘

2 DNS设置

DNS服务_服务_61

     打开区域数据库配置文件

DNS服务_DNS_62

    建立根域:

    双引号内为域名;

    类型为master,表示主DNS服务器;

    file指定区域解析数据库文件的相对路径(相对于/var/named)和名称,即为/var/named/root.zone

DNS服务_DNS_63

    打开总配置文件

DNS服务_服务_64

    图中表示监听本机所有ip,为所有网段的ip提供查询服务

DNS服务_DNS_65

    因为172.18.0.107要当根,删掉真正的根的定义

DNS服务_服务_66

    打开并建立区域解析数据库文件/var/named/root.zone

DNS服务_DNS_67

    根域将其子域com的DNS服务器委派给172.18.0.109

DNS服务_服务_68

    重启服务

DNS服务_服务_69

    客户端请求172.18.0.107将www.magedu.com解析成ip地址,172.18.0.107只有根域,根域的子域是com域,根据区域数据库文件得到com域的DNS服务器为172.18.0.109,172.18.0.109只有com域,com域的子域是magedu.com域,根据区域数据库文件得到magedu.com域的DNS服务器为172.18.250.110,172.18.250.110就有www.magedu.com的主机记录,即可解析为ip

五 搭建运营商的DNS服务器(172.18.0.106 )

     172.18.0.106用作转发服务器

     当DNS服务器上没有某域,且未专门设置转发时,默认将请求转发至根域DNS服务器;当DNS服务器上没有某域,且专门设置了转发时,转发方式有全局转发和特定区域转发两种类型:

     全局转发:

     将转发语句写在option中,表示全局转发,即客户端向DNS服务器A提出解析请求后,

  •   若DNS服务器A上有相应的域,则由DNS服务器A进行解析,并将解析后的结果返回给客户端;

  •   若DNS服务器A上没有相应的域,则全部转发到option中指定的DNS服务器B上:

      (1)若设置转发规则为first,则将请求转发给DNS服务器B后,B未找到,则DNS服务器A会采用默认的转发路径,即将请求转发至根域DNS服务器

      (2)若设置转发规则为only,则将请求转发给DNS服务器B后,B未找到),则DNS服务器A直接将解析失败的结果返回给客户端

示例:

DNS服务_DNS_70

     图中表示若当前DNS服务器上没有相应的域,则全部转发到option中指定的DNS服务器:192.168.25.108

     特定区域转发:

     将转发语句写在zone中,表示特定区域转发,即客户端向DNS服务器A提出解析请求后,

  •  若DNS服务器A上有相应的域,则由DNS服务器A进行解析,并将解析后的结果返回给客户端;

  •  若DNS服务器A上没有相应的域,且该域未设置转发,则DNS服务器A会采用默认的转发路径,即将请求转发至根域DNS服务器

  •   若DNS服务器A上没有相应的域,且该域设置了转发(即存在一个类型为forward、域名与要解析的域相同的域)则转发到zone中指定的DNS服务器B上:

    (1)若设置转发规则为first,则将请求转发给DNS服务器B后,B未找到,则DNS服务器A会采用默认的转发路径,即将请求转发至根域DNS服务器

    (2)若设置转发规则为only,则将请求转发给DNS服务器B后,B未找到,则DNS服务器A直接将解析失败的结果返回给客户端

     示例:

     vim /etc/named/rfc1912.zones

DNS服务_服务_71

     图中表示若当前DNS服务器上没有wang.com域,且为wang.com设置了转发,即将请求转发到192.168.25.108

    在本实验中,172.18.0.106用作转发服务器,并未专门设置转发,直接采用的是默认的转发路径,即将请求转发至根域DNS服务器:

    vim /etc/named.conf

DNS服务_DNS_72

    实际上定义了一种特殊的特定区域转发,即当前DNS服务器要查询根域时,会读该语句块,将请求转发至该语句块中定义的DNS服务器:在/var/named/named.ca中定义了该DNS服务器的ip

DNS服务_DNS_73

     172.18.0.106已将根指向172.18.0.107

DNS服务_服务_74

     重启服务

DNS服务_DNS_75

    客户端请求172.18.0.106将www.magedu.com解析成ip地址失败

DNS服务_服务_76

    打开总配置文件DNS服务_DNS_77

    将这两项改为no即可DNS服务_DNS_78

    客户端请求172.18.0.106将www.magedu.com解析成ip地址,172.18.0.106上没有与该主机相关的任何信息,则会将请求转发到根,即172.18.0.107。172.18.0.107只有根域,根域的子域是com域,根据区域数据库文件得到com域的DNS服务器为172.18.0.109,172.18.0.109只有com域,com域的子域是magedu.com域,根据区域数据库文件得到magedu.com域的DNS服务器为172.18.250.110,172.18.250.110就有www.magedu.com的主机记录,即可解析为ip