一、DNS主从同步原理
本篇承接上两篇DNS的配置部分,本篇的主题是DNS的主从配置。主辅DNS服务器数据同步的过程:
1、master DNS服务器每次修改完成并重启服务后,将传送notify给所有的slave DNS服务器;
2、slave DNS服务器将查询master服务器的SOA记录;
3、master DNS服务器收到请求后将SOA记录发送给Slave DNS服务器,<span style="color:#E53333;">Slave DNS服务器收到后同时对比查询结果中的serial值</span>;
4、如果serial值不大于本机的话将结束数据同步过程;但是如果serial值大于本机的话,slave DNS将发送zone transfer请求要求(AXFR/IXFR)。Master响应zone transfer请求并传送结果,直到整个slave更新完成。
<a href="https://www.361way.com/wp-content/uploads/2013/02/dns-master-slave.png"><img src="https://www.361way.com/wp-content/uploads/2013/02/dns-master-slave.png" alt="dns-master-slave" width="445" height="226" /></a>
二、测试环境
配置前,需要<span style="color:#E53333;">先将主从服务器的时间先进行同步</span>
192.168.0.103 NS1 主DNS服务器 192.168.0.107 NS2 从DNS服务器
三、主从环境搭建
1、主DNS配置部分
主服务器上named.conf部分无需变动,/etc/named.rfc1912.zones 部分也可以不变动,但是出于安全和加快同步速度,我们还是会增加一部分配置,完整配置如下:
<br />
# cat /etc/named.rfc1912.zones zone "localhost.localdomain" IN { type master; file "named.localhost"; allow-update { none; }; }; zone "localhost" IN { type master; file "named.localhost"; allow-update { none; }; }; zone "1.0.0.127.in-addr.arpa" IN { type master; file "named.loopback"; allow-update { none; }; }; zone "0.in-addr.arpa" IN { type master; file "named.empty"; allow-update { none; }; }; zone "361way.com" IN { type master; file "361way.com.zone"; notify yes; //使用该功能,是指在主服器一旦有更新,立即通知从DNS also-notify { 192.168.0.107; }; //指定通知哪些主机,一般上面的notify yes为notify explicit时使用 allow-transfer { 192.168.0.107; }; //指定从服器的IP }; zone "0.168.192.in-addr.arpa" IN{ type master; file "192.168.0.zone"; notify yes; also-notify { 192.168.0.107; }; allow-transfer { 192.168.0.107; }; };
除了named.rfc1912.zones 文件,我们还需要在正反区域配置文件中增加从服务器的信息,具体如下:
<br />
# cat 361way.com.zone $TTL 600 $ORIGIN 361way.com. @ IN SOA ns.361way.com. root.361way.com. ( 2014121005 ;serial //记住这个串每修改一次值+1下,后面在同步部分时,也会提到和后面几个时间的关系 1D ;refresh 5M ;retry 1W ;expiry 1H) ;minimum @ IN NS ns1.361way.com. //主DNS @ IN NS ns2.361way.com. //从DNS IN MX 5 mail.361way.com. ns1 IN A 192.168.0.103 //主DNS对应的IP ns2 IN A 192.168.0.107 //从DNS对应的IP @ IN A 192.168.0.102 www IN A 192.168.0.103 mail IN A 192.168.0.109 pop3 IN A 192.168.0.103 iamp4 IN A 192.168.0.103
反向区域文件也一样:
<br />
<br />
# cat 192.168.0.zone $TTL 600 $ORIGIN 0.168.192.in-addr.arpa. @ IN SOA ns1.361way.com. root.361way.com. ( 2014121005 ;serial 1D ;refresh 5M ;retry 1W ;expiry 1H) ;minimum @ IN NS ns1.361way.com. @ IN NS ns2.361way.com. IN MX 5 mail.361way.com. 103 IN PTR ns1.361way.com. 107 IN PTR ns2.361way.com. 103 IN PTR www.361way.com. 102 IN PTR 361way.com. 109 IN PTR mail.361way.com. 103 IN PTR pop3.361way.com. 103 IN PTR iamp4.361way.com.
2、从DNS配置部分
从DNS的/etc/named.conf直接从主DNS上直接scp过来,named.rfc1912.zones也可以从主DNS上scp过来,不过copy过来后,还需要修改下,自定义关键部分如下:
<br />
zone "361way.com" IN { type slave; //类型是slave,与上面的master对应 file "slaves/361way.com.zone"; //文件同步到/var/named/slaves目录下的 masters { 192.168.0.103; }; //指定主DNS服务器信息 allow-notify {192.168.0.103; }; //指定允许notify的主机信息 }; zone "0.168.192.in-addr.arpa" IN{ type slave; file "slaves/192.168.0.zone"; masters { 192.168.0.103; }; allow-notify {192.168.0.103; }; };
从服务器上配置完成后,直接启动named服务即可,并重启下主DNS上的named服务。
3、同步日志
主服务器上的/var/log/message中的同步记录日志如下:
<br />
Nov 12 00:43:53 localhost named[6318]: managed-keys-zone ./IN: loaded serial 15 Nov 12 00:43:53 localhost named[6318]: running Nov 12 00:43:53 localhost named[6318]: zone 361way.com/IN: sending notifies (serial 2014121005) Nov 12 00:43:53 localhost named[6318]: zone 0.168.192.in-addr.arpa/IN: sending notifies (serial 2014121005) Nov 12 00:46:32 localhost named[6318]: client 192.168.0.107#57508: transfer of '361way.com/IN': AXFR-style IXFR started Nov 12 00:46:32 localhost named[6318]: client 192.168.0.107#57508: transfer of '361way.com/IN': AXFR-style IXFR ended Nov 12 00:46:32 localhost named[6318]: client 192.168.0.107#27744: received notify for zone '361way.com' Nov 12 00:50:53 localhost named[6318]: client 192.168.0.107#54176: transfer of '0.168.192.in-addr.arpa/IN': AXFR-style IXFR started Nov 12 00:50:53 localhost named[6318]: client 192.168.0.107#54176: transfer of '0.168.192.in-addr.arpa/IN': AXFR-style IXFR ended
四、相关问题
在主从配置中很多人遇到同步或启动出错的问题,一般先确认并排除时间不同步和named用户无法读文件的问题。然后再确认是否启用了notify功能,该功能也可以在全局项options内配置,只不过全局配置是针对所有域的。
关于同步时间过长的问题?在解决问题的过程中有的朋友说将SOA中的Refresh值修改小一点,没错!但是这个值什么时候生效呢?当我们主DNS服务器上修改完成后重启服务,会主动传送notify值(<span style="line-height:1.5;color:#E53333;">但并不是立即同步,中间还是会有几分钟的时间间隔的,具体详见参考页面中的DNS与BIND中notify的原理),如果辅助DNS服务器没有收到才参考Refresh,Refresh 不成功,则参考Retry ,Retry 一直不成功, 则参考 Expire,如果Expire也不成功,则选择放弃zone transfer的过程。</span>
在实际应用中如果存在较多的slave的情况下还要考虑如下情况。
<span style="line-height:1.5;">对于master而言: </span>
<span style="line-height:1.5;">1. 是否有delay notify消息,这个配置是 notify-delay,默认是5s,有必要的话是需要缩短的。 </span>
<span style="line-height:1.5;">2. transfers-out 限制同时允许区传输的数量,默认是10,如果slave多,zone多需要调大。 </span>
<span style="line-height:1.5;">3. serial-query-rate 对于master而言会限制master给slave发送notify的速度,默认是20,需要调大。 </span>
<span style="line-height:1.5;">对于slave而言: </span>
<span style="line-height:1.5;">1. transfers-per-ns限制了从单个master同步的并发,默认也是10,需要调大。 </span>
<span style="line-height:1.5;">2. transfers-in 限制了同时从master(可能有多个)同步的总数,默认是10,需要调大。 </span>
<span style="line-height:1.5;">3. serial-query-rate 在slave中会限制slave向mastetr做SOA查询的频率。默认是20,需要调大。 <br />
五、测试
<span style="line-height:1.5;">测试时,将测试主机的DNS修改为从DNS先测试是否能正常解析;测试完成后,可以同时配置主备DNS,将主服务器的DNS服务关掉后,可以再验证下从服务器是否仍可以提供服务。具体步骤省略(可以参看上一篇)。</span>
<br />
<strong>参考页面</strong>
<a href="http://www.epubit.com.cn/book/onlinechapter/8226" target="_blank" rel="noopener">DNS与BIND(第5版)</a>
<a href="http://lsscto.blog.51cto.com/779396/158892" target="_blank" rel="noopener">lsscto的博客</a>