我有两个运行BIND9的DNS服务器,一个主服务器和一个从服务器。在主服务器上更新区域文件时,我希望从服务器立即开始为更改的记录(S)服务,但是BIND给了我一些麻烦。
DNS区域传输已在主站和从站之间正常工作。我可以登录从服务器并运行dig @dnsmaster myzone. AXFR
,它输出区域的全部内容。为此,DNS主服务器配置了notify yes
和also-notify { dnsslave }
。同样,使用allow-transfer { dnsmaster }
配置从服务器。
当dnsmaster更新时,我运行rndc reload
,它告诉我正在发送通知。通过检查/var/named/slavedata/
中的zonefile,这一点在奴隶身上得到了证实。它们包含最新的数据,与掌握的数据相匹配。
现在出现了奇怪的部分。
从服务器将继续提供旧的、陈旧的DNS记录,完全忽略了这样一个事实:在主服务器通知之后,磁盘上有新的数据可用。我使用dig
来使用以下命令检查结果:dig @slaveserver record.zone.tld
。
我认为BIND可能会保留其权威区域的内存缓存,所以我将max-cache-size
和max-cache-ttl
设置为0,但没有效果。
我尝试了其他方法来刷新这个所谓的缓存,方法是在从服务器上运行像rndc flush
和rndc reload
这样的命令,但是它仍然返回旧的陈旧记录。
最后,我注意到区域上的MINTTL
设置为86400 (24小时),因此我暂时将MINTTL
更改为15秒,并重新启动从服务器。没有效果-只有在服务重新启动后,才会提供更新的DNS结果。
这里发生了什么事?当接收到区域更新的通知时,BIND9的预期行为是什么?它总是尊重TTL
和MINTTL
吗?我假设它总是使用现有的最新数据。
在我的智慧结束时,我正在考虑设置一个crontab来每小时重新启动绑定奴隶,只是为了避免提供陈旧的数据。还有什么更好的吗?
发布于 2013-07-08 01:26:56
根据你的描述,我不能确切地告诉你问题出在哪里,但我可以帮你排除几件事。
缓存大小设置和缓存ttl设置用于缓存递归查询数据,并且(正如您已经猜到的)不适用于权威数据。类似地,rndc刷新在这里不适用。
建议的故障排除方法:
如果这不起作用,请考虑发布更多信息,包括来自主服务器和从服务器的named.conf部分,以及在主服务器上加载新编辑的区域后正在发生的事情的日志。
发布于 2015-05-17 20:00:27
我也面临着同样的情况。我的研究让我意识到了以下几点。如果您使用的是视图,那么dig@local机器将只提供localhost视图中的内容。本地主机视图仅在重新启动命名时才会刷新。但是最近的区域文件(从主服务器上传输)仍然可以在从服务器上获得,并且将提供给来自外部源或外部视图的所有查询。因此,您需要进行安排,以便您的本地主机视图得到刷新。
发布于 2014-09-26 02:48:14
在重新加载命名之前,在主服务器中进行更改时,请不要忘记从区域文件中增加串行id,否则将不会将区域文件复制到从服务器。
https://serverfault.com/questions/520666
复制