DNS上使用ping命令测试,发现了第一个故障:启动服务过程中没有任何的错误提示,ping域名的时候却显示没有这个域名。
故障分析:通过ping域名的时候,我们得知没有这个域名的回应值,这表明这个区域没有生效,但是到底是什么原因导致区域没有生效呢?这个时候不要茫然,去看看日志吧!
[root@master~]# tail /var/log/messages
省略若干… …
Nov 21 20:55:57 localhost named[7113]: zone qiuri.com/IN: loading master file qiuri.com: permission denied
Nov 21 20:55:57 localhost named[7113]: zone localdomain/IN: loaded serial 42 Nov 21 20:55:57 localhost named[7113]: zone localhost/IN: loaded serial 42 Nov 21 20:55:57 localhost named[7113]: running [root@master~]#
黎明前的黑暗终于度过,一行行的日志终于看完,发现在加载qiuri.com的时候出现了permission denied的提示,就是说加载文件时被拒绝了。为什么会拒绝呢?我们先查看一下这个文件的属性吧?
[root@master~]# ll /var/named/qiuri.com
-rw-r----- 1 root root 436 11-21 20:54 /var/named/qiuri.com [root@master~]#
发现这个文件的所有者是root,属组也是root,但是由于DNS服务使用named这个用户启动服务,难怪会拒绝了呢。那修改一下吧!
[root@master~]#chown named.named /var/named/qiuri.com
修改完成后重启dns服务,使配置生效。 [root@master~]#service named restart
再次查看日志,发现已经成功加载。
[root@master~]# tail -5 /var/log/messages
省略若干... ...
Nov 21 21:11:46 localhost named[7217]: zone qiuri.com/IN: loaded serial 2008111305 Nov 21 21:11:46 localhost named[7217]: zone localdomain/IN: loaded serial 42 Nov 21 21:11:46 localhost named[7217]: zone localhost/IN: loaded serial 42 Nov 21 21:11:46 localhost named[7217]: running [root@master~]#
总结:这个问题出现的原因是由于我们创建这个文件的时候,没有考虑文件权限,导致出现这个问题。如果有的朋友不是手工编辑的这个文件,而是直接复制
/var/named/named.local这个文件后再修改的,建议复制过程中使用-p参数。这样就避免了cp后再修改权限的步骤。
接着迫不及待的去启动了辅助DNS的服务,之后去查看/var/named/slaves中是否存在qiuri.com这个区域文件。发现成功复制过来。
[root@master~]# tail -5 /var/log/messages
省略若干... ...
Nov 21 21:11:46 localhost named[7217]: zone qiuri.com/IN: loaded serial 2008111305 Nov 21 21:11:46 localhost named[7217]: zone localdomain/IN: loaded serial 42 Nov 21 21:11:46 localhost named[7217]: zone localhost/IN: loaded serial 42 Nov 21 21:11:46 localhost named[7217]: running [root@master~]#
到这个时候我们的测试还没有结束,继续进行中,首先我们再次回到主DNS服务器上编辑qiuri.com区域文件,增加主机记录,修改serial值。
[root@master ]# cat /var/named/qiuri.com
$TTL 86400
@ IN SOA master.qiuri.com. root.master.qiuri.com. ( 2008111306 ; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum IN NS master.qiuri.com.
IN NS slaves.qiuri.com. www IN A 10.1.1.1 ftp IN A 10.1.1.1 down IN A 10.1.1.1
[root@master~]#
修改完成后,使用service named reload重新加载配置文件,到辅助dns上验证我们添加的记录是否同步过来。但是再次失望了,故障又发生了。
故障二:
主DNS服务器修改记录或添加区域辅助DNS同步不过去,或者需要很长时间。这样如果在现实生活中,会造成各地访问的结果不同。我们有必要研究一下主DNS服务器上修改完成后如何快速的同步给其它辅助的DNS。
故障分析:
为了查清故障的原因,这个时候我分别在各个DNS服务器上开启两个终端,在第一个终端输入命令tail -f /var/log/messages动态监控日志;另一个终端中重启DNS服务。发现没有产生任何日志。这个时候,思考了一下主辅DNS的工作原理,每次主DNS修改完成后重启服务会传送notify值,但是这里却没有传送。再次回到配置文件中检查相关字段发现没有定义。这个字段可以在named.conf中options字段中声明。也可以在单个区域文件中声明。
这里在qiuri.com的zone中添加also-notify { 10.1.1.2; };值。
[root@master~]# zone \"qiuri.com\" IN { type master; file \"qiuri.com\";
also-notify { 10.1.1.2; }; allow-transfer { 10.1.1.2; }; allow-update { none; }; };
[root@master~]#
注意:如果要在options中声明,可以使用notify yes;即可。
再次加载服务,发现监控的日志开始有相应的请求和发送的字段出现。主DNS服务器的日志如下:
[root@master ~]#tail -f /var/log/messages
Nov 13 16:17:38 master named[3159]: zone qiuri.com/IN: sending notifies (serial 2008111306) Nov 13 16:18:57 master named[3159]: client 10.1.1.2#45757: transfer of 'qiuri.com/IN': AXFR-style IXFR started
Nov 13 16:18:57 master named[3159]: client 10.1.1.2#45757: transfer of 'qiuri.com/IN': AXFR-style IXFR ended [root@master ~]#
辅助DNS服务器上日志显示如下: [root@ slave~ ]#tail -f /var/log/messages Nov 14 08:12:55 ns named[6014]: running
Nov 14 08:12:55 ns named[6014]: zone qiuri.com/IN: sending notifies (serial 2008111306) Nov 14 08:15:10 ns named[6014]: client 10.1.1.1#1106: received notify for zone 'qiuri.com' Nov 14 08:15:10 ns named[6014]: zone qiuri.com/IN: Transfer started. [root@ slave~ ]#
这个时候问题解决,其实还有配置主辅DNS服务器的时候还会见到类似failed while receiving responses: REFUSED错误提示,一般是由于主DNS服务器上未授权或者是相关的目录没有权限造成。只要耐心查看日志和思考问题,相信问题均可解决。
相关原理:
在解决问题的过程中有的朋友说将SOA中的Refresh值修改小一点,没错!但是这个值什么时候生效呢?当我们主DNS服务器上修改完成后重启服务,会主动传送notify值,如果辅助DNS服务器没有收到才参考Refresh,Refresh 不成功,则参考Retry ,Retry 一直不成功, 则参考 Expire,如果Expire也不成功,则选择放弃zone transfer的过程。
[root@master ~]#rpm –q bind-chroot
因篇幅问题不能全部显示,请点此查看更多更全内容