亲历:Linux平台下bind9故障排除

原创
网络
笔者在公司的工作之一是负责维护公司的CDN,基本上是天天打bind打交道;在用源码安装完一台新的bind9.4后准备做主从复制时,惊奇的发现居然出现了问题(主DNS是bind9.1)。

【51CTO.com独家特稿】笔者在公司的工作之一是负责维护公司的CDN,基本上是天天打bind打交道;在用源码安装完一台新的bind9.4后准备做主从复制时,惊奇的发现居然出现了问题(主DNS是bind9.1):

这是在从DNS上出现的问题一:

  1. Mar 26 16:04:17 gdst named[18464]: client   
  2. 115.207.47.199#20601: view any: query (cache) '112.2.5.221.in-  
  3. addr.arpa/PTR/IN' denied  
  4. Mar 26 16:04:17 gdst named[18464]: client   
  5. 115.207.47.199#20602: view any: query (cache)   
  6. 'dx.3158.com.domain/A/IN' denied  
  7. Mar 26 16:04:17 gdst named[18464]: client   
  8. 115.207.47.199#20603: view any: query (cache)   
  9. 'dx.3158.com.domain/AAAA/IN' denied  
  10. Mar 26 16:04:17 gdst named[18464]: client   
  11. 115.207.47.199#20604: view any: query (cache) 'y163.net/A/IN'   
  12. denied  
  13. Mar 26 16:04:17 gdst named[18464]: client   
  14. 115.207.47.199#20605: view any: query (cache)   
  15. 'y163.net/AAAA/IN' denied  
  16. Mar 26 16:04:18 gdst named[18464]: client   
  17. 115.207.47.199#20606: view any: query (cache) '112.2.5.221.in-  
  18. addr.arpa/PTR/IN' denied  
  19. Mar 26 16:04:18 gdst named[18464]: client   
  20. 115.207.47.199#20607: view any: query (cache)   
  21. 'dx.3158.com.domain/A/IN' denied  
  22. Mar 26 16:04:18 gdst named[18464]: client   
  23. 115.207.47.199#20608: view any: query (cache)   
  24. 'dx.3158.com.domain/AAAA/IN' denied  
  25. Mar 26 16:04:18 gdst named[18464]: client   
  26. 115.207.47.199#20609: view any: query (cache) 'y163.net/A/IN'   
  27. denied  
  28. Mar 26 16:04:19 gdst named[18464]: client   
  29. 115.207.47.199#20610: view any: query (cache)   
  30. 'y163.net/AAAA/IN' denied  
  31. Mar 26 16:04:19 gdst named[18464]: client   
  32. 115.207.47.199#20611: view any: query (cache) '112.2.5.221.in-  
  33. addr.arpa/PTR/IN' denied  
  34. Mar 26 16:04:19 gdst named[18464]: client   
  35. 115.207.47.199#20612: view any: query (cache)   
  36. 'dx.3158.com.domain/A/IN' denied  
  37. Mar 26 16:04:19 gdst named[18464]: client   
  38. 115.207.47.199#20613: view any: query (cache)   
  39. 'dx.3158.com.domain/AAAA/IN' denied  
  40. Mar 26 16:04:19 gdst named[18464]: client   
  41. 115.207.47.199#20614: view any: query (cache) 'y163.net/A/IN'   
  42. denied  
  43. Mar 26 16:04:20 gdst named[18464]: client   
  44. 115.207.47.199#20615: view any: query (cache)   
  45. 'y163.net/AAAA/IN' denied  
  46. Mar 26 16:04:21 gdst named[18464]: client   
  47. 60.215.129.103#53455: view any: query (cache)   
  48. 'www.google.com/A/IN' denied  
  49. Mar 26 16:04:49 gdst named[18464]: client   
  50. 121.14.128.68#53455: view CHINANET: query (cache)   
  51. 'www.google.com/A/IN' denied  
  52. Mar 26 16:04:59 gdst named[18464]: client   
  53. 221.171.1.147#53455: view CHINANET: query (cache)   
  54. 'www.google.com/A/IN' denied  

发现新版的对cache的处理有所改变

新版本的BIND对 allow-query 有着不同的处理,新增加了一个allow-query-cache 的选项。

  1. QUOTE:allow-query Specifies which hosts are allowed to ask   
  2. ordinary DNS questions. allow-query may also  
  3. be specified in the zone statement, in which case it overrides the   
  4. options allow-query statement.  
  5. If not specified, the default is to allow queries from all hosts.  
  6.  
  7. QUOTE:allow-query-cache Specifies which hosts are allowed to   
  8. get answers from the cache. The default is the  
  9. builtin acls localnets and localhost.  
  10. The way to set query access to the cache is now via allow-query-  
  11. cache. This differs from earlier  
  12. versions which used allow-query. 

 BIND 9.4 的手册上还特别注释了

QUOTE:allow-query-cache is now used to specify access to the
cache.

解决方法如下:即在从DNS的options里添加一条:

  1. key "rndc-key" {  
  2.        algorithm hmac-md5;  
  3.        secret "Rox3q+3f0gp8MKyQXx2zWw==";  
  4. };  
  5. controls {  
  6.        inet 127.0.0.1 port 953  
  7.             allow { localhost; } keys { "rndc-key"; };  
  8. };  
  9. options {  
  10. version "9.8.12";  
  11. directory "/var/named";  
  12. pid-file "named.pid";  
  13. allow-query { any; }; //此处为添加  
  14. }; 

另一个关于主从复制的问题就是,如果bind采用了智能view功能的话,如果主DNS是电信的IP的话,从DNS非电信线路(即铁通或其它),如果均采用单IP是不能进行主从复制的,除非是双IP;如果只有单IP的话可采取bind的TSIG key来解决此问题。在处理上述问题时,得到了linuxtone站长netseek帮助,这里表示感谢。

维护的DNS服务器主要有三个:一主一从一备,由于公司的架构采用了CDN方案,所以namd.conf针对"okspace.com"的出现位置就有三处:即电信、网通及其它,加上三个服务器,每次手动用vim删除okspace.com时就必须修改九处,维护起来很麻烦;更为不爽的是,有些zone经常需要删除,特别的麻烦,所以特地写了个shell以减清自己的负担,达到安全删除的目的。变量domain中的文件内容自己可以定义,签于生产环境下bind都是源码安装,这里就以named.conf文件为主。

  1. vim /root/delzone.sh  
  2. #!/bin/bash  
  3. domain='zone\ "okspace.cn"'   
  4. if [ -e /var/named/chroot/etc/named.conf ];then  
  5. sed -i "/$domain/,/};/d" /var/named/chroot/etc/named.conf  
  6. else   
  7. sed -i "/$domain/,/};/d" /var/named/chroot/var/named/named.rfc1912.zones  
  8. fi 

用sftp将此脚本传到其它DNS服务器,很轻松的完成工作,用此语法结合grep -rl可写出更强大的删除脚本;用shell脚本已经很长时间了,越来越喜欢它。

关于DNS主从复制,这里说明下:

①如果主DNS和从DNS都是用root用户的,不需要考虑权限问题,即/var/named写权限不需要更改任何地方,即不需要更改为named或给7权限。

②多使用rndc,这命令强大无比;配置时多用tail -f /var/log/messages,我就是系统日志来排错的

③如果测试结果中出现Non-authoritative answer: //非授权的回答,说明来自其他DNS服务器或缓存.

④启动区域传输的机制有以下3种:一是辅DNS服务器刚启动;二是SOA记录中的刷新间隔到达;三是master DNS设置了主动通知辅DNS数据有变化。监于生产服务器的严谨性,如果有问题,麻烦通知下抚琴煮酒——yuhongchun027@163.com,我会***时间改正。

【51CTO独家特稿,非经授权谢绝转载,合作媒体转载请注明原文出处及!】

责任编辑:林琳 来源: 51CTO.com
相关推荐

2013-07-25 14:50:03

2020-03-03 10:47:47

LinuxSystemdDocker

2020-03-04 14:50:38

Linux硬件故障

2009-12-04 09:47:47

LinuxNFS服务器

2011-01-07 16:35:53

2011-04-01 09:06:49

WebDAV协作平台

2023-11-22 10:48:15

Arch Linux蓝牙

2009-08-27 10:13:52

2021-12-22 10:05:06

Linux网络配置故障排除

2016-08-22 21:53:06

LinuxPython脚本

2016-08-23 10:00:28

LinuxPython脚本

2019-06-18 15:28:24

TomcatLinux优化

2009-04-22 17:03:40

Linux服务器七要素

2009-06-27 20:20:00

LinuxNFS故障

2009-08-30 15:12:34

ODULinuxUnix平台

2017-08-09 16:27:59

LinuxWMware虚拟机

2013-08-26 14:18:12

SELinux

2011-08-03 10:48:07

2010-08-26 15:11:19

2011-08-18 17:16:26

点赞
收藏

51CTO技术栈公众号