一、   主从DNS服务器同步原理

        主 DNS服务器数据同步的过程,首先master DNS服务器每次修改完成并重启服务后,将传送notify给所有的slave DNS服务器。slave DNS服务器将查询master服务器的SOA记录,master DNS服务器收到请求后将SOA记录发送给Slave DNS服务器,Slave DNS服务器收到后同时对比查询结果中的serial值,如果serial值不大于本机的话将结束数据同步过程;但是如果serial值大于本机的话,slave DNS将发送zone transfer请求要求(AXFR/IXFR)。Master响应zone transfer请求并传送结果,直到整个slave更新完成。
 
二、    主、从 DNS 服务器安装配置        以下配置不考虑安全问题
       这里主服务器的IP为192.168.175.200,从服务器IP为192.168.175.135
     安装所需软件:yum -y install bind caching-nameserver
 
   软件介绍:
         BIND是一种开源的DNS(Domain Name System)协议的实现,包含对域名的查询和响应所需的所有软件。它是互联网上最广泛使用的一种DNS服务器,对于类UNIX系统来说,已经成为事实上的标准。
BIND软件包包括三个部分:
   •DNS服务器。这是一个叫做named的程序,代表name daemon的简写。它根据DNS协议标准的规定,响应收到的查询。
   •DNS解析库(resolver library)。一个解析器是一个程序,通过发送请求到合适的服务器并且对服务器的响应做出合适的回应,来解析对一个域名的查询。一个解析库是程序组件的集合,可以在开发其它程序时使用,为这些程序提供域名解析的功能。
   •测试服务器的软件工具。
      Caching-nameserver 为bind提供主配置文件模板
   
以下是详细配置:
 
  1、主服务器配置:
首先拷贝主配置文件:
#cp /etc/named     /etc/named.conf
修改主配置文件的属主、属组
#chown named:named /etc/named.conf
编辑主配置文件    以ghost.com域为例
#vim /etc/named.conf
 
options {
        directory       "/var/named";
};
 
 
zone "." IN {
        type hint;
        file "named.ca";
};
 
zone "localhost" IN {
        type master;
        file "localhost.zone";
};
 
zone "ghost.com" IN {
        type master;
        file "ghost.com.zone";
        allow-transfer { 192.168.175.135;};
        notify yes;
        also-notify { 192.168.175.135;};
};
 
zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "named.local";
}; 
 
zone "175.168.192.in-addr-arpa" IN {
        type master;
        file "192.168.175.zone";
        allow-transfer { 192.168.175.135;};
        notify yes;
        also-notify { 192.168.175.135;};
};
 
编辑区域文件:
(正向解析文件)
# vim /var/named/ghost.com.zone
 
$TTL    86400
@ 86400         IN SOA ns.ghost.com. root.ghost.com. (
                                        2010090905    ; serial (d. adams)
                                        5               ; refresh
                                        5               ; retry
                                        1W             ; expiry
                                        1D )            ; minimum
                IN NS           ns.ghost.com.
Ns.ghost.com.      IN A            192.168.175.200
www.ghost.com. IN A            192.168.175.200
ftp.ghost.com. IN A            192.168.175.200
@               IN MX   10      mail.ghost.com.
mail.ghost.com. IN A            192.168.175.200

 (反向解析文件)
# vim /var/named/192.168.175.zone
 
$TTL    86400
@ 86400       IN      SOA     ns.ghost.com. root.ghost.com. (
                                      2010090905 ; Serial
                                      5      ; Refresh
                                      5     ; Retry
                                      1W    ; Expire
                                      1D )    ; Minimum
           IN      NS      ns.ghost.com.
200       IN      PTR     ns.ghost.com.
200       IN      PTR     www.ghost.com.
200       IN      PTR     ftp.ghost.com.
 
2、从服务器配置:
从服务器的安装很简单只需要配置named.conf文件即可,区域文件无须手动建立,但同样要 修改主配置文件的属主、属组
#chown named:named /etc/named.conf
另外:还要将从服务器的 /var/named/slaves/ 下所有文件的属主、属组都修改为 named     
#chown named:named /var/named/slaves
 
# vim /etc/named.conf
 
options {
directory     "/var/named";
};
zone "." IN {
        type hint;
        file "named.ca";
};
zone "localhost" IN {
        type master;
        file "localhost.zone";
};
 
zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "named.local";
};
 
zone "175.168.192.in-addr-arpa" IN {
        type slave;
        file "slaves/192.168.175.zone";
        masters { 192.168.175.200; };
        notify yes;
        also-notify { 192.168.175.135;};
};
 
zone "ghost.com" IN {
        type slave;
        file "slaves/ghost.com.zone";
        masters { 192.168.175.200; };
        notify yes;
        also-notify { 192.168.175.135;};
}; 
 
上述配置后,分别启动主从的DNS服务器后,从服务器会在slaves/下生成ghost.com.zone和192.168.175.zone区域文件,这样主从服务器即建好了。
   3、故障分析:
         主DNS服务器修改记录或添加区域辅助DNS同步不过去,或者需要很长时间。
       这样如果在现实生活中,会造成各地访问的结果不同。所以有必要研究一下主DNS服务器上修改完成后如何快速的同步给其它辅助的DNS。
       为了查清故障的原因,这个时候输入命令tail -f /var/log/messages动态监控日志,发现没有产生任何日志。这个时候,思考了一下主辅DNS的工作原理,每次主DNS修改完成后重启服务会传送notify值,但是这里却没有传送。考虑到是区域文件中那几个时间的问题于是修改了一下    Refresh值为5 ,再次重启服务,结果很快就同步了。 
         在解决问题的过程中有的朋友说将SOA中的Refresh值修改小一点,没错!但是这个值什么时候生效呢?当我们主DNS服务器上修改完成后重启服务,会主动传送notify值,如果辅助DNS服务器没有收到才参考Refresh,Refresh 不成功,则参考Retry ,Retry 一直不成功, 则参考 Expire,如果Expire也不成功,则选择放弃zone transfer的过程。建议这几个参数的值为:Refresh=1H   Retry=10M   expiry=7D   minimum=1D。