首页 > 代码库 > 【详解】DNS服务工作原理、正反向解析和主从同步

【详解】DNS服务工作原理、正反向解析和主从同步

目录:

一、理论部分

二、实验部分

******************************理论部分***************************************

正文:

一、什么是DNS服务.

  DNS服务是互联网的基础性服务之一.全称为Domain Name System(域名系统).DNS是因特网上作为域名和IP地址相互映射的一个分布式数据库,提供将域名转换成对应IP地址的信息条目,能够使用户更方便的通过域名(如baidu.com)去访问互联网,而不用去记住能够被机器直接读取的IP地址。这种将域名转换成ip地址的方法称为域名解析.  

二、企业自建DNS的目的.

  其实互联网上已有现成的DNS服务器,那么企业内部为什么还要自建DNS服务器呢?

  主要原因如下:

  • 节省内网域名解析占用的上网带宽;

  • 方便解析内网服务器IP地址;

  • 内网有域环境,域中的计算机通过内网的DNS定位域控制器(Windows)

    ...

三、DNS基础原理详解. 

1、DNS采用C/S架构,服务器端工作在TCP/UDP协议的53号端口.是应用层的协议.

2、BIND: Bekerley Internet Name Domain (伯克利因特网名字域系统), ISC (www.isc.org)

3、对于DNS服务使用TCP和UDP协议的解释:

  a. TCP:面向连接的协议; (每次连接前须三次握手,断开时须四次断开,使得传输一段很小的数据时浪费大量时间,所以dns多使用53/udp).
  b. UDP: User Datagram Protocol(用户数据报文协议), 无连接的协议

  c. DNS在进行区域传送时使用TCP协议,其它时候则使用UDP协议;

  d. TCP是一种可靠的连接,保证了数据的准确性。
  e. named进程查询时使用的是UDP协议的53号端口发送UDP报文。响应通过UDP报文返回,除非他们大于512K,这种情况使用TCP。服务器之间的"区域传送"则都使用TCP。

4、区域传送:

  当一个辅助(从)DNS服务器启动时,它需要与主DNS服务器通信,并加载(同步)数据信息,这就叫做区域传送(zone transfer)。  
5、DNS域名:

    根域:全球所有的DNS都要听从于它;

    顶级域名:Top Level Domain:tld;

        .com  .edu  .mil  .gov  .net  .org  ...

        三类:组织域,国家域(.cn, .iq, .hk, .tw, ...),反向域

    二级域名:

        google.com  youtube.com baidu.com ...

    三级域名:

        www.google.com  mail.google.com  stu.google.com

    最多127级域名

  技术分享

6、DNS查询类型

 a. 递归查询

   客户端只发出一次请求一定要得到最终结果;(主机向本地域名服务器的查询一般都是采用递归查询.)   

 b. 迭代查询

  服务器发出多次请求,层层请求后返回最终结果;(本地域名服务器向根域名服务器的查询(域名服务器之间的查询)一般都是采用迭代查询)


  图解:

  技术分享

  技术分享

7. 名称服务器: 域内负责解析本域内名称的主机;
   根服务器: 指13组服务器,异地多活.

8.  DNS解析类型:

   正向解析: Name --> IP  (绝大多数都能正向解析)

   反向解析: IP --> Name  (部分解析不了,该解析类型常用在邮件服务反向解析,来判断是否为垃圾邮件)

   注:正反向解析是两个不同的名称空间,是两棵不同的解析树;

9. DNS服务器的类型:   

   主DNS服务器
   辅助(从)DNS服务器
   缓存DNS服务器
   转发器

主DNS服务器: 维护所负责解析的域内解析库服务器;解析库由管理员维护;
从DNS服务器: 从主DNS服务器或其他的从DNS服务器那里"复制"(区域传送)一份解析库;
从DNS服务器到主DNS服务器处的传送,之间有一系列定义,主要定义在SOA资源记录当中,包括:   
   序列号:解析库的版本号(同步后主从一致);前提是主服务器解析库内容发生变化,其序列号递增(每
次加1);(数字最长不要超过十位);
   刷新时间:从服务器从主服务器请求同步解析库的时间间隔;   
   重试时间间隔:从服务器从主服务器请求同步解析库失败时,再次尝试的时间间隔,重试时间须小于刷
新时间,否则无意义.   
   过期时长:从服务器始终联系不到主服务器时,多久之后放弃从服务器角色,停止提供服务;   
   通知"机制:主服务器发生变化后,会通知从服务器及时更新解析库,即使更新时间没到也会通知从服
务器,避免从服务器落后主服务器太多.

10. 区域传送类型:

  a. 全量传送:传送整个解析库;
  b. 增量传送:传送解析库发生变化的那部分内容;

11. 对从服务器及区域传送的理解:

    从服务器要从主服务器同步.首先,从服务器如何知道主服务器已更新解析库? 主要在于序列号,主服务器每更新一次解析库,序列号都会主动加1;
    正常情况下,主从服务器的序列号相同.从服务器通过刷新时间从主服务器处对比序列号并请求同步解析库的时间间隔.还有重试时间间隔和过期时长.

12. 一次完整的查询/解析请求经过的流程:
   Client --> 本地hosts文件 --> DNS Service
   Local Cache -->DNS Server(Iesursion) --> Server Cache-->Iteration

13. 区域解析库:

   由众多RR组成;
   资源记录: Resource Record, RR
   记录类型: A, AAAA, PTR, SOA, NS, CNAME, MX等
      SOA: Start Of Authority,起始授权记录,一个区域解析库有且仅能有一个SOA记录,而且必须为解析库的第一条记录;
      A: internet Address, 作用:FQDN --> IP
      AAAA: FQDN --> IPv6
      PTR: PointTeR, IP -->FQDN
      NS: Name Server,专用于标明当前区域的DNS服务器
      CNAME: Canonical Name,别名记录.正式名称
      MX: Mail exchanger, 邮件交换器
                
    资源记录定义的格式:
       语法:name    [TTL]    IN     rr_type    value
       注意:
         (1) TTL可从全局继承;
         (2) @可用于引用当前区域的名字;
         (3) 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应;
         (4) 同一个值也会有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;                   
SOA:
  name:当前区域的名字,例如"baidu.com.";
  value:有多部分组成
      (1)当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字;
      (2)当前区域管理员的邮箱地址;但地址中不能用@符号,一般用.替换,如linuxedu.163.com
      (3)主从服务协调属性的定义以及否定的答案的统一的TTL.
                        
 例如:

baidu.com.   86400   IN   SOA   ns.baidu.com.   nsadmin.baidu.com.(
                                    2015042201     ;序列号  
                                    2H             ;刷新时间 
                                    10M             ;重试时间 
                                    1W             ;过期时间
                                    1D             ;否定答案的TTL值 
                                    )

 注:不带单位,默认为秒钟;
                    
NS:
  name:当前区域的名字;
  value:当前区域的某DNS服务器的名字,例如 ns.baidu.com.;
  注:一个区域可以有多个NS记录;
 例如:
                          

 baidu.com.   IN    NS      ns1.baidu.com.   //此处nsx.baidu.com. 可写成 nsx  (注:nsx后面没有点号)
 baidu.com.   IN    NS      ns2.baidu.com.

 注:
   (1)相邻的两个资源记录的name相同时,后续的可省略;
   (2)对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录;
                            
MX:
  name: 当前区域的名字;
  value: 当前区域的某邮件服务器(smtp服务器)的主机名;
  注:一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高;                          
  例:                        

  baidu.com.     IN      MX     10       mx1.baidu.com. 
                 IN      MX     20       mx2.baidu.com.

 注:
  (1)对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录;
                            
A:
  name:其主机的FQDN,例如www.baidu.com.
  value:主机名对应主机的IP地址;

  例:                  

 www.baidu.com.    IN      A    1.1.1.1 
 www.baidu.com.    IN      A    1.1.1.2   
                            
 mx1.baidu.com.    IN      A    1.1.1.3 
 mx2.baidu.com.    IN      A    1.1.1.3

 

  注:  避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址,如下:       

 *.baidu.com.    IN   A     1.1.1.4 
 baidu.com.      IN   A     1.1.1.4

AAAA:
   name:FQDN
   value: IPv6                         
PTR:
   name: IP ,有特定格式;
   value: FQDN

   注: name处的IP有特定格式,需要把IP地址反过来写,1.2.3.4,要写作4.3.2.1;而且有特定后缀:.in-addr.arpa.,所以完整写法为:4.3.2.1.in-addra.arpa.                        例如:                       

4.3.2.1.in-addr.arpa    IN     PTR    www.baidu.com 
简写成:
4    IN     PTR    www.baidu.com.

 注:网络地址及后缀可省略;主机地址依然需要反着写:                           
CNAME:
   name: 别名的FQDN;
   value: 正规名字的FQDN;                           
  例:                      

  web.baidu.com.      IN     CNAME    www.baidu.com.

14. 子域授权:

   每个域的名称服务器,都是通过其上级名称服务器在解析库进行授权; 

   类似根域授权tld:          

.com.       IN        NS    ns1.com 
.com.       IN        NS    ns2.com 
ns1.com.    IN        A     2.2.2.1 
ns2.com.    IN        A     2.2.2.2

  baidu.com. 在.com的名称服务器上,解析库中添加资源记录;          

 baidu.com.            IN        NS        ns1.baidu.com. 
 baidu.com.            IN        NS        ns2.baidu.com. 
 baidu.com.            IN        NS        ns3.baidu.com. 
 ns1.baidu.com.        IN        A         3.3.3.1  
 ns2.baidu.com.        IN        A         3.3.3.2 
 ns3.baidu.com.        IN        A         3.3.3.3

            
15. BIND的安装配置:    
   dns服务,程序包名bind, 程序名named
   程序包:
       bind.X86_64  提供服务
       bind-libs   提供库文件
       bind-utils  提供测试服务,测试服务是否ok   

# rpm -ql bind-utils 
 /usr/bin/dig
 /usr/bin/host
 /usr/bin/nslookup
 /usr/bin/nsupdate

  bind-chroot: /var/named/chroot/
  bind-chroot.x86_64  测试环境不可安装.  安全性.
 

  bind:
     服务脚本: /etc/rc.d/init.d/named
     主配置文件: /etc/named.conf, /etc/named.rfc1912.zones, /etc/rndc.key
     解析库文件: /var/named/ZONE_NAME.ZONE   分正向和反向.
     named守护进程–用来回答查询结果
                                     

[root@localhost named]# pwd
 /var/named
[root@localhost named]# cat named.localhost 
  $TTL 1D
  @    IN    SOA    @   rname.invalid. (
                    0     ; serial
                   1D     ; refresh
                   1H     ; retry
                   1W     ; expire
                   3H )   ; minimum
        NS    @
        A    127.0.0.1
        AAAA    ::1
[root@localhost named]# 
[root@localhost named]# cat named.loopback 
$TTL 1D
@    IN SOA    @ rname.invalid. (
               0    ; serial
               1D    ; refresh
               1H    ; retry
               1W    ; expire
               3H )    ; minimum
     NS      @
     A       127.0.0.1
     AAAA    ::1
     PTR     localhost.
[root@localhost named]#

  注:
     (1) 一台物理服务器可同时为多个区域提供解析;
     (2) 必须要有根区域文件:/var/named/named.ca
     (3) 应该有两个(如果包括ipv6的,应该更多)实现localhost和本地回环地址的解析库;
                            
  rndc:

     remote name domain controller,默认与bind安装在同一主机,且只能通过127.0.0.1来连接named进程,提供辅助性的管理功能;
                        953/tcp
  主配置文件:
     全局配置:options {}  
     日志子系统配置:logging {}
     区域定义: 本机能够为哪些zone进行解析,就要定义哪些zone;
     zone  "ZONE_NAME"  IN  {}      
                    
      注意:任何服务程序如果期望其能够通过网络被其他主机访问,至少应该监听在一个能够与外部主机通信的IP地址上;


四、各类型服务器配置介绍:

  1. 缓存DNS服务器:

    修改配置文件/etc/named.conf,使DNS服务53号端口监听于外部地址即可;

   dnssec作用:防止DNS被污染; 配置麻烦,建议测试做实验时关闭dnssec;即改为no

2. 主DNS名称服务器:
   在缓存名称服务器的基础上加zone的定义即可;
      (1)在主配置文件/etc/named.rfc1912.zones中定义区域
        zone  "ZONE_NAME"  IN {
        type {master|slave|hint|forward};
        file  "ZONE_NAME.zone";  //区域解析库文件路径
         };
      (2)定义区域解析库文件
          出现的内容:
               宏(变量)定义;
               资源定义; 

  反向区域配置:

    区域名称:网络地址反写.in-addr.
      172.16.100. --> 100.16.172.in-addr.arpa.
    
    保留不变的部分当做区域名字
    
    定义区域
       zone "ZONE_NAME" IN {
          type {master|slave|forward};
          file "网络地址.zone"
       };

    注: 不需要MX和A,以及AAAA记录,以PTR记录为主;

        正向区域中的别名记录(CNAME)在反向区域不需要反解.

3.:通过区域传送实现主从同步:

   配置一台正向从DNS服务器:

   定义从区域的方法:
       zone "ZONE_NAME" IN {
           type slave;
           masters { MASTER_IP; };
           file "slaves/ZONE_NAME.zone";
       };   

总结:
    1: 从服务器应该为一台独立的名称服务器;
    2: 主服务器的区域解析库文件中必须有一条NS记录是指向从服务器的;
    3: 从服务器只需要定义区域,而无需提供解析库文件;如果是采用rpm方法安装的,解析库文件应该放置于/var/named/slaves目录中;否则需要改/var/named 目录的权限,不然写不进去.
    4: 主服务器得允许从服务器作区域传送;区域传送对方会获取本区域的所有解析记录,很危险,应选择性开放;
    5: 主从服务器时间应该同步,可通过ntp进行;
    6: bind程序的版本应该保持一致;否则,应该从高,主低,达到兼容性要求;
    7: 一个区域内只能有一个主DNS服务器,但可以有多个从DNS服务器.一主一从或一主多从

4. 检查配置语法是否错误的命令:

     #named-checkconf
     #named-checkzone
5. 查看服务器的当前系统状态: # rndc status
6.测试命令:

  dig的使用
      dig [-t type] name [@SERVER] [query options]
    
        dig用于测试dns系统,因此不会查询hosts文件进行解析;
    
        查询选项:
            +[no]trace: 跟踪解析过程
            +[no]recurse: 进行递归解析
            
        测试反向解析:
            dig -x IP @SERVER  
        
        模拟区域传送:  --查看区域中的所有资源记录,比较危险.
            dig -t axfr ZONE_NAME @SERVER  

  资源记录中的某台客户机想解析dns,如果报错,可能是因为防火墙导致的
  解析时,如果将该DNS服务器的IP写入本机/etc/resolv.conf文件下,则之后测试时无需在命令行末尾加该DNS Server IP.

 host命令:
      host  [-t type]  name  [SERVER]     
 nslookup命令:
      nslookup  [-t type]  [name | -]  [server]
    
      交互式模式:
       nslookup>
        server IP:指明使用哪个DNS server进行查询;
        set q=RR TYPE:指明查询的资源记录类型;
        NAME:要查询的名称;

rndc命令:
    rndc --> rndc (953/tcp)   
    rndc COMMAND   
        COMMAND:
    -h: 显示详细帮助信息;
            reload:重载主配置文件和区域解析库文件;
            reload zone:重载区域解析库文件;
            retransfer zone:手动启动区域传送过程,而不管序列号是否增加;
            notify zone:重新对区域传送发通知;
            reconfig:重载主配置文件;
            querylog:开启或关闭查询日志;
            trace:递增debug级别;   //y用于调试排错.正常生产环境须关闭;
            trace LEVEL:指定使用的级别;  [ LEVEL 为数字,自己指定 ]           
    关于[querylog:开启或关闭查询日志]的详解:
      开启查询日志可通过查看log查看到查询日志,此项会消耗系统IO,一般只在排查错误时使用,平时无需打开;

******************************实验部分******************************

                  
实验环境:

 CentOS6.7 x 3, Windows7 x 1

 主机名:

    DNS-master -- 10.68.7.235

    DNS-slave -- 10.68.7.231

    http -- 10.68.7.234

    Windows-Client -- 10.68.7.236

 实验要求:

   一. 配置缓存域名服务器

   二. 配置正向解析和反向解析域名服务器

   三. 通过区域传送实现主从同步

   四. 搭建http服务,开启windows主机,配好DNS进行访问:

一、配置缓存域名服务器:

配置主配置文件:

[root@DNS-master ~]# yum -y install bind bind-utils bind-lib
[root@DNS-master ~]# rpm -qa bind*
bind-utils-9.8.2-0.37.rc1.el6.x86_64
bind-libs-9.8.2-0.37.rc1.el6.x86_64
bind-9.8.2-0.37.rc1.el6.x86_64
[root@DNS-master ~]# service named start
Generating /etc/rndc.key:                                  [  OK  ]
Starting named:                                            [  OK  ]
[root@DNS-master ~]#
[root@DNS-master ~]# cp /etc/named.conf{,.bak}
[root@DNS-master ~]# vim /etc/named.conf
 options {
 //      listen-on port 53 { 127.0.0.1; };  //该行为初始行,使用双斜线注释(因为该配置文件为C或C++写成,所以注释符号用//而不用#).
         listen-on port 53 { 10.68.7.235; 127.0.0.1; };  //修改初始行为该行,添加本机IP或外部IP,以期望其能够通过网络被其他主机访问;并添加本地回环地址,以便本机能够解析到.本行也可以删除不要,实现效果相同.
 //      listen-on-v6 port 53 { ::1; };
         directory       "/var/named";  //此项定义工作目录,也就是区域解析库文件路径.此项是关键,其他项都是为安全而设定的.推荐将所有与BIND相关的配置文件(除了named.conf和resolv.conf)放在/var之下的子目录中。例如/var/nam
         dump-file       "/var/named/data/cache_dump.db";
         statistics-file "/var/named/data/named_stats.txt";
         memstatistics-file "/var/named/data/named_mem_stats.txt";
         allow-query     { any; };  //此项表示允许谁来查询,any表示任何主机.或者可以直接注释掉,注释掉默认为允许任何主机查询.
         recursion yes;  //此项表示是否允许递归查询.
         
 //      dnssec-enable yes;   //该行及以下几行通通注释掉;最好把yes改为no,安全设定,可能会影响后面实验的验证.
 //      dnssec-validation yes;
 //      dnssec-lookaside auto;
         
         /* Path to ISC DLV key */
 //      bindkeys-file "/etc/named.iscdlv.key";
         
 //      managed-keys-directory "/var/named/dynamic";
 };
         ...
[root@DNS-master ~]# service named restart
Stopping named:                                            [  OK  ]
Starting named:                                            [  OK  ]
[root@DNS-master ~]#
[root@DNS-master ~]# ss -tunlp |grep 53
udp    UNCONN     0      0            10.68.7.235:53                    *:*      users:(("named",2510,513))
udp    UNCONN     0      0              127.0.0.1:53                    *:*      users:(("named",2510,512))
udp    UNCONN     0      0                    ::1:53                   :::*      users:(("named",2510,514))
tcp    LISTEN     0      3                    ::1:53                   :::*      users:(("named",2510,22))
tcp    LISTEN     0      3            10.68.7.235:53                    *:*      users:(("named",2510,21))
tcp    LISTEN     0      3              127.0.0.1:53                    *:*      users:(("named",2510,20))
tcp    LISTEN     0      128                  ::1:953                  :::*      users:(("named",2510,24))
tcp    LISTEN     0      128            127.0.0.1:953                   *:*      users:(("named",2510,23))
[root@DNS-master ~]#

以上配置完即为缓存名称服务器的配置:
监听外部地址即可;    
二. 配置主域名服务器的正向解析: 

在缓存DNS服务器的基础上添加zone定义

[root@DNS-master ~]# vim /var/named/yangbin.com.zone 
$TTL 1D 
$ORIGIN yangbin.com.
@       IN   SOA        ns1.yangbin.com   admin.yangbin.com. (
                                        2016120701
                                        2H
                                        5M
                                        7D
                                        1D
 )
        IN    NS    ns1.yangbin.com.
        IN    NS    ns2.yangbin.com.
        IN    MX 10 mx1.yangbin.com.
        IN    MX 20 mx2.yangbin.com.  //该处几行.yangbin.com.可省略。省略后后面没有小数点.  
ns1     IN    A     10.68.7.235
ns2     IN    A     10.68.7.231
mx1     IN    A     10.68.7.232
mx2     IN    A     10.68.7.233
www     IN    A     10.68.7.234  //这些域名对应的IP,即主机不存在也没关系.也可以一个名称对应多个IP.
web     IN    CNAME www

注:

$TTL 1D:

   此处可用1D或1d或86400,该时间可自定义,时间越短,缓存有效期就越短,向服务器发起查询请求的次数也就越多,缓存时间越短,服务器压力越大,生成缓存生效的时间越快,反之亦然.

$ORIGIN keeny.xin.:

   此处的宏表示当之后所写的名称为相对名称时,会自动在后边补上keeny.xin. ,当然此项也可省略不写,系统会自动这么做.

admin.yangbin.com.: 表示管理员的邮箱,@符号用点号.代替;

在主配置文件/etc/named.rfc1912.zones中定义区域:

[root@DNS-master ~]# vim /etc/named.rfc1912.zones 
 ...
结尾添加:
 zone "yangbin.com" IN {
        type master;
        file "/var/named/yangbin.com.zone";
        allow-update { none; }
 };

检查配置文件语法:

[root@DNS-master ~]# named-checkconf
[root@DNS-master ~]# 
[root@DNS-master ~]# named-checkzone "yangbin.com" /var/named/yangbin.com.zone 
zone yangbin.com/IN: loaded serial 2016120701
OK
[root@DNS-master ~]#

查看文件权限,禁止普通用户随意访问从而获悉公司服务器数量:

[root@DNS-master ~]# ps aux |grep named
named      2510  0.0  1.4 193140 14616 ?        Ssl  02:20   0:00 /usr/sbin/named -u named
root       2887  0.0  0.0 103304   892 pts/0    S+   03:02   0:00 grep named
[root@DNS-master ~]# ll /etc/named.conf
-rw-r-----. 1 root named 1089 Aug 30 02:20 /etc/named.conf
[root@DNS-master ~]# ll /var/named
total 32
drwxrwx---. 2 named named 4096 Aug 30 02:13 data
drwxrwx---. 2 named named 4096 Aug 30 02:13 dynamic
-rw-r-----. 1 root  named 2075 Apr 23  2014 named.ca
-rw-r-----. 1 root  named  152 Dec 15  2009 named.empty
-rw-r-----. 1 root  named  152 Jun 21  2007 named.localhost
-rw-r-----. 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx---. 2 named named 4096 Jul 24  2015 slaves
-rw-r--r--. 1 root  root   451 Aug 30 02:57 yangbin.com.zone
[root@DNS-master ~]# id named
uid=25(named) gid=25(named) groups=25(named)
[root@DNS-master ~]# chown :named /var/named/yangbin.com.zone 
[root@DNS-master ~]# service named restart
Stopping named: .                                          [  OK  ]
Starting named:                                            [  OK  ]
[root@DNS-master ~]#

此时,正向解析区域配置完毕!

查看系统当前状态:

[root@DNS-master ~]# rndc status
version: 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6
CPUs found: 4
worker threads: 4
number of zones: 20
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running
[root@DNS-master ~]#

通过dig命令在本机测试查询解析:

[root@DNS-master ~]# dig -t A www.yangbin.com @10.68.7.235

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6 <<>> -t A www.yangbin.com @10.68.7.230
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63733
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;www.yangbin.com.        IN    A

;; ANSWER SECTION:
www.yangbin.com.    86400    IN    A    10.68.7.234

;; AUTHORITY SECTION:
yangbin.com.        86400    IN    NS    ns2.yangbin.com.
yangbin.com.        86400    IN    NS    ns1.yangbin.com.

;; ADDITIONAL SECTION:
ns1.yangbin.com.    86400    IN    A    10.68.7.235
ns2.yangbin.com.    86400    IN    A    10.68.7.231

;; Query time: 0 msec
;; SERVER: 10.68.7.230#53(10.68.7.230)
;; WHEN: Tue Aug 30 03:23:23 2016
;; MSG SIZE  rcvd: 117

[root@DNS-master ~]#

在从DNS服务器进行测试,把DNS地址指向主DNS服务器:

[root@DNS-slave ~]# dig -t A www.yangbin.com @10.68.7.235

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6 <<>> -t A www.yangbin.com @10.68.7.235
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32698
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;www.yangbin.com.        IN    A

;; ANSWER SECTION:
www.yangbin.com.    86400    IN    A    10.68.7.234

;; AUTHORITY SECTION:
yangbin.com.        86400    IN    NS    ns2.yangbin.com.
yangbin.com.        86400    IN    NS    ns1.yangbin.com.

;; ADDITIONAL SECTION:
ns1.yangbin.com.    86400    IN    A    10.68.7.235
ns2.yangbin.com.    86400    IN    A    10.68.7.231

;; Query time: 0 msec
;; SERVER: 10.68.7.235#53(10.68.7.235)
;; WHEN: Tue Aug 30 03:38:00 2016
;; MSG SIZE  rcvd: 117

[root@DNS-slave ~]#

注:

   1、生产环境下修改相关配置文件后,不能restart,应该使用reload:

      # service named reload

   2、当一个域名配置有一个以上的ip地址时,查询时会进行轮询.

配置主域名服务器的反向解析服务器

不需要MX和A,以及AAAA记录,以PTR记录为主,别名记录(CNAME)不需要反解.

[root@DNS-master ~]# vim /var/named/7.68.10.in-addr.arpa 
$TTL 1D
$ORIGIN 7.68.10.in-addr.arpa.
@       IN   SOA        ns1.yangbin.com   admin.yangbin.com. (
                                        2016120701
                                        2H
                                        5M
                                        7D
                                        1D
 )
        IN    NS    ns1.yangbin.com.
        IN    NS    ns2.yangbin.com.
        IN    MX 10 mx1.yangbin.com.
        IN    MX 20 mx2.yangbin.com.
235     IN    PTR   ns1
231     IN    PTR   ns2
232     IN    PTR   mx1
233     IN    PTR   mx2
234     IN    PTR   www
[root@DNS-master ~]# vim /etc/named.rfc1912.zones   
 zone "7.68.10.in-addr.arpa" IN {
        type master;
        file "7.68.10.in-addr.arpa";
        allow-update { none; };
 };
[root@DNS-master ~]# named-checkzone "7.68.10.in-addr.arpa" /var/named/7.68.10.in-addr.arpa 
zone 7.68.10.in-addr.arpa/IN: getaddrinfo(mx1.yangbin.com) failed: Temporary failure in name resolution
zone 7.68.10.in-addr.arpa/IN: getaddrinfo(mx2.yangbin.com) failed: Temporary failure in name resolution
zone 7.68.10.in-addr.arpa/IN: loaded serial 2016120701
OK
//mx1和mx2服务器没有打开,所以此处报错,可以不用理会,解析不受影响.
[root@DNS-master ~]# ll /var/named/
total 36
-rw-r--r--. 1 root  root   394 Aug 30 04:10 7.68.10.in-addr.arpa
drwxrwx---. 2 named named 4096 Aug 30 02:13 data
drwxrwx---. 2 named named 4096 Aug 30 03:14 dynamic
-rw-r-----. 1 root  named 2075 Apr 23  2014 named.ca
-rw-r-----. 1 root  named  152 Dec 15  2009 named.empty
-rw-r-----. 1 root  named  152 Jun 21  2007 named.localhost
-rw-r-----. 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx---. 2 named named 4096 Jul 24  2015 slaves
-rw-r--r--. 1 root  named  451 Aug 30 03:36 yangbin.com.zone
[root@DNS-master ~]# chown :named /var/named/7.68.10.in-addr.arpa 
[root@DNS-master ~]# chmod 640 /var/named/{7.68.10.in-addr.arpa,yangbin.com.zone}
[root@DNS-master ~]# ll /var/named/
total 36
-rw-r-----. 1 root  named  394 Aug 30 04:10 7.68.10.in-addr.arpa
drwxrwx---. 2 named named 4096 Aug 30 02:13 data
drwxrwx---. 2 named named 4096 Aug 30 03:14 dynamic
-rw-r-----. 1 root  named 2075 Apr 23  2014 named.ca
-rw-r-----. 1 root  named  152 Dec 15  2009 named.empty
-rw-r-----. 1 root  named  152 Jun 21  2007 named.localhost
-rw-r-----. 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx---. 2 named named 4096 Jul 24  2015 slaves
-rw-r-----. 1 root  named  451 Aug 30 03:36 yangbin.com.zone
[root@DNS-master ~]#
[root@DNS-master ~]# service named start
Starting named:                                            [  OK  ]
[root@DNS-master ~]# 
[root@DNS-master ~]# rndc status
version: 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6
CPUs found: 4
worker threads: 4
number of zones: 21
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running
[root@DNS-master ~]#

检查语法出现的错误:

[root@DNS-master ~]# named-checkzone "7.68.10.in-addr.arpa" /var/named/10.68.7.101.zone.arpa
/var/named/10.68.7.235.zone.arpa:3: SOA record not at top of zone (7.68.10.in-addr.arpa.7.68.10.in-addr.arpa)
zone 7.68.10.in-addr.arpa/IN: loading from master file ar/named/10.68.7.101.zone.arpa failed: not at top of zone
zone 7.68.10.in-addr.arpa/IN: not loaded due to errors.

解决办法:
[root@DNS-master ~]#vim /var/named/7.68.10.in-addr.arpa 
 $ORIGIN 7.68.10.in-addr.arpa.  //该行直接不要写或者结尾不要忘记加点号(.);

验证:

 用本机验证:

[root@DNS-master ~]# dig -x 10.68.7.232 @10.68.7.235

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6 <<>> -x 10.68.7.232 @10.68.7.235
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53809
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;232.7.68.10.in-addr.arpa.    IN    PTR

;; ANSWER SECTION:
232.7.68.10.in-addr.arpa. 86400    IN    PTR    mx1.7.68.10.in-addr.arpa.

;; AUTHORITY SECTION:
7.68.10.in-addr.arpa.    86400    IN    NS    ns2.yangbin.com.
7.68.10.in-addr.arpa.    86400    IN    NS    ns1.yangbin.com.

;; ADDITIONAL SECTION:
ns1.yangbin.com.    86400    IN    A    10.68.7.235
ns2.yangbin.com.    86400    IN    A    10.68.7.231

;; Query time: 0 msec
;; SERVER: 10.68.7.235#53(10.68.7.235)
;; WHEN: Tue Aug 30 04:21:25 2016
;; MSG SIZE  rcvd: 139

[root@DNS-master ~]#

 在slave机器上验证:

[root@DNS-slave ~]# dig -x 10.68.7.234 @10.68.7.235

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6 <<>> -x 10.68.7.234 @10.68.7.235
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16793
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;234.7.68.10.in-addr.arpa.    IN    PTR

;; ANSWER SECTION:
234.7.68.10.in-addr.arpa. 86400    IN    PTR    www.7.68.10.in-addr.arpa.

;; AUTHORITY SECTION:
7.68.10.in-addr.arpa.    86400    IN    NS    ns1.yangbin.com.
7.68.10.in-addr.arpa.    86400    IN    NS    ns2.yangbin.com.

;; ADDITIONAL SECTION:
ns1.yangbin.com.    86400    IN    A    10.68.7.235
ns2.yangbin.com.    86400    IN    A    10.68.7.231

;; Query time: 36 msec
;; SERVER: 10.68.7.235#53(10.68.7.235)
;; WHEN: Tue Aug 30 04:22:10 2016
;; MSG SIZE  rcvd: 139

[root@DNS-slave ~]#

在slave机器上模拟全量区域传送: 可以得到对方正向区域所有的资源记录:

[root@DNS-slave ~]# dig axfr yangbin.com @10.68.7.235

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6 <<>> axfr yangbin.com @10.68.7.235
;; global options: +cmd
yangbin.com.        86400    IN    SOA    ns1.yangbin.com.yangbin.com. admin.yangbin.com. 2016120701 7200 300 604800 86400
yangbin.com.        86400    IN    NS    ns1.yangbin.com.
yangbin.com.        86400    IN    NS    ns2.yangbin.com.
yangbin.com.        86400    IN    MX    10 mx1.yangbin.com.
yangbin.com.        86400    IN    MX    20 mx2.yangbin.com.
mx1.yangbin.com.    86400    IN    A    10.68.7.232
mx2.yangbin.com.    86400    IN    A    10.68.7.233
ns1.yangbin.com.    86400    IN    A    10.68.7.235
ns2.yangbin.com.    86400    IN    A    10.68.7.231
web.yangbin.com.    86400    IN    CNAME    www.yangbin.com.
www.yangbin.com.    86400    IN    A    10.68.7.234
yangbin.com.        86400    IN    SOA    ns1.yangbin.com.yangbin.com. admin.yangbin.com. 2016120701 7200 300 604800 86400
;; Query time: 20 msec
;; SERVER: 10.68.7.235#53(10.68.7.235)
;; WHEN: Tue Aug 30 04:25:27 2016
;; XFR size: 12 records (messages 1, bytes 301)

[root@DNS-slave ~]#

在slave机器上模拟全量区域传送: 可以得到对方反向区域所有的资源记录:

[root@DNS-slave ~]# dig axfr 7.68.10.in-addr.arpa @10.68.7.235

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6 <<>> axfr 7.68.10.in-addr.arpa @10.68.7.235
;; global options: +cmd
7.68.10.in-addr.arpa.    86400    IN    SOA    ns1.yangbin.com.7.68.10.in-addr.arpa. admin.yangbin.com. 2016120701 7200 300 604800 86400
7.68.10.in-addr.arpa.    86400    IN    NS    ns1.yangbin.com.
7.68.10.in-addr.arpa.    86400    IN    NS    ns2.yangbin.com.
7.68.10.in-addr.arpa.    86400    IN    MX    10 mx1.yangbin.com.
7.68.10.in-addr.arpa.    86400    IN    MX    20 mx2.yangbin.com.
231.7.68.10.in-addr.arpa. 86400    IN    PTR    ns2.7.68.10.in-addr.arpa.
232.7.68.10.in-addr.arpa. 86400    IN    PTR    mx1.7.68.10.in-addr.arpa.
233.7.68.10.in-addr.arpa. 86400    IN    PTR    mx2.7.68.10.in-addr.arpa.
234.7.68.10.in-addr.arpa. 86400    IN    PTR    www.7.68.10.in-addr.arpa.
235.7.68.10.in-addr.arpa. 86400    IN    PTR    ns1.7.68.10.in-addr.arpa.
7.68.10.in-addr.arpa.    86400    IN    SOA    ns1.yangbin.com.7.68.10.in-addr.arpa. admin.yangbin.com. 2016120701 7200 300 604800 86400
;; Query time: 1 msec
;; SERVER: 10.68.7.235#53(10.68.7.235)
;; WHEN: Tue Aug 30 04:27:43 2016
;; XFR size: 11 records (messages 1, bytes 329)

[root@DNS-slave ~]#

主服务器已配置完毕!

三.  通过区域传送实现主从同步

配置一台正向从DNS服务器:

[root@DNS-slave ~]# yum -y install bind
[root@DNS-slave ~]# vim /etc/named.conf
options {
        listen-on port 53 { 10.68.7.231; 127.0.0.1; };
//      listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };
        recursion yes;

        dnssec-enable no;
        dnssec-validation no;
        dnssec-lookaside auto;

        /* Path to ISC DLV key */
//      bindkeys-file "/etc/named.iscdlv.key";

//      managed-keys-directory "/var/named/dynamic";
};
...

[root@DNS-slave ~]# vim /etc/named.rfc1912.zones
zone "yangbin.com" IN {
        type slave;
        masters { 10.68.7.235; };
        file "slaves/yangbin.com.zone";
};
[root@DNS-slave ~]# ll /var/named
total 28
drwxrwx---. 2 named named 4096 Jul 24  2015 data
drwxrwx---. 2 named named 4096 Jul 24  2015 dynamic
-rw-r-----. 1 root  named 2075 Apr 23  2014 named.ca
-rw-r-----. 1 root  named  152 Dec 15  2009 named.empty
-rw-r-----. 1 root  named  152 Jun 21  2007 named.localhost
-rw-r-----. 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx---. 2 named named 4096 Jul 24  2015 slaves  //系统已自动准备好供写入的文件(file) slaves目录. 
[root@DNS-slave ~]# 
注意:
   必须在主服务器的配置文件下有从服务器的ns记录,且ns名称对应的IP为从服务器的IP才行;

启动服务然后查看日志信息:

[root@DNS-slave ~]# service named start
Generating /etc/rndc.key:                                  [  OK  ]
Starting named:                                            [  OK  ]
[root@DNS-slave ~]# less /var/log/messages
Aug 30 04:47:26 DNS-slave named[3287]: zone yangbin.com/IN: Transfer started.
Aug 30 04:47:26 DNS-slave named[3287]: transfer of ‘yangbin.com/IN‘ from 10.68.7.235#53: connected using 10.68.7.231#5802
4
Aug 30 04:47:26 DNS-slave named[3287]: zone yangbin.com/IN: transferred serial 2016120701
Aug 30 04:47:26 DNS-slave named[3287]: transfer of ‘yangbin.com/IN‘ from 10.68.7.235#53: Transfer completed: 1 messages, 
12 records, 301 bytes, 0.001 secs (301000 bytes/sec)
[root@DNS-slave ~]# cat /var/named/slaves/yangbin.com.zone 
$ORIGIN .
$TTL 86400    ; 1 day
yangbin.com        IN SOA    ns1.yangbin.com.yangbin.com. admin.yangbin.com. (
                2016120701 ; serial
                7200       ; refresh (2 hours)
                300        ; retry (5 minutes)
                604800     ; expire (1 week)
                86400      ; minimum (1 day)
                )
            NS    ns1.yangbin.com.
            NS    ns2.yangbin.com.
            MX    10 mx1.yangbin.com.
            MX    20 mx2.yangbin.com.
$ORIGIN yangbin.com.
mx1            A    10.68.7.232
mx2            A    10.68.7.233
ns1            A    10.68.7.235
ns2            A    10.68.7.231
web            CNAME    www
www            A    10.68.7.234
[root@DNS-slave ~]#

没有问题!

在主DNS服务器修改区域文件,然后再在slave服务器作区域传送查看结果:

[root@DNS-master ~]# vim /var/named/yangbin.com.zone
...
序列号加1
增加如下行:
ftp     IN    A     10.68.7.238
[root@DNS-master ~]# rndc reload
server reload successful

主服务器重载服务器查看结果:

[root@DNS-slave ~]# rndc reload
[root@DNS-slave ~]# tail -20  /var/log/messages
Aug 30 05:07:02 DNS-slave named[3287]: client 10.68.7.235#34827: received notify for zone ‘yangbin.com‘
Aug 30 05:07:02 DNS-slave named[3287]: zone yangbin.com/IN: Transfer started.
Aug 30 05:07:02 DNS-slave named[3287]: transfer of ‘yangbin.com/IN‘ from 10.68.7.235#53: connected using 10.68.7.231#44271
Aug 30 05:07:02 DNS-slave named[3287]: zone yangbin.com/IN: transferred serial 2016120702
Aug 30 05:07:02 DNS-slave named[3287]: transfer of ‘yangbin.com/IN‘ from 10.68.7.235#53: Transfer completed: 1 messages, 12 records, 301 bytes, 0.002 secs (150500 bytes/sec)
Aug 30 05:07:02 DNS-slave named[3287]: zone yangbin.com/IN: sending notifies (serial 2016120702)
Aug 30 05:07:03 DNS-slave named[3287]: client 10.68.7.235#9138: received notify for zone ‘7.68.10.in-addr.arpa‘: not authoritative
[root@DNS-slave ~]# 
[root@DNS-slave ~]# cat /var/named/slaves/yangbin.com.zone 
$ORIGIN .
$TTL 86400    ; 1 day
yangbin.com        IN SOA    ns1.yangbin.com.yangbin.com. admin.yangbin.com. (
                2016120702 ; serial
                7200       ; refresh (2 hours)
                300        ; retry (5 minutes)
                604800     ; expire (1 week)
                86400      ; minimum (1 day)
                )
            NS    ns1.yangbin.com.
            NS    ns2.yangbin.com.
            MX    10 mx1.yangbin.com.
            MX    20 mx2.yangbin.com.
$ORIGIN yangbin.com.
ftp            A    10.68.7.238
mx1            A    10.68.7.232
mx2            A    10.68.7.233
ns1            A    10.68.7.235
ns2            A    10.68.7.231
web            CNAME    www
www            A    10.68.7.234
[root@DNS-slave ~]#

主从复制配置完毕!

四. 搭建http服务,开启windows主机,配好DNS进行访问:

[root@http ~]# yum -y install httpd
[root@http  ~]# curl 10.68.7.234
<h1>Succeed!</h1>
[root@http  ~]# vim /etc/httpd/conf/httpd.conf  
 ...
 在配置文件对应位置增加如下行:
 ServerName  www.yangbin.com //也可不加,因为DNS内配置了正反向解析 
 ...
重启服务!

然后在win7配置好DNS并访问:

技术分享

实验验证完成


本文出自 “yangbin” 博客,请务必保留此出处http://13683137989.blog.51cto.com/9636221/1880492

【详解】DNS服务工作原理、正反向解析和主从同步