我有两台运行BIND9的DNS服务器,一台主机和一台从机。 当区域文件在主服务器上更新时,我想让从服务器立即开始服务更改的logging,但是BIND给了我一些guff。
主区域和从区域之间的DNS区域传输已经正常工作。 我可以login到从服务器并运行dig @dnsmaster myzone. AXFR
dig @dnsmaster myzone. AXFR
并打印出该区域的全部内容。 为了做到这一点,DNS主服务器configuration了notify yes
和also-notify { dnsslave }
。 同样,从站configuration了allow-transfer { dnsmaster }
。
当dnsmaster更新时,我运行rndc reload
,它告诉我通知正在发送。 这在slave上通过检查/var/named/slavedata/
。 他们包含最新的数据,匹配主人所知道的。
现在来了怪异的一部分。
从属服务器将继续提供旧的,陈旧的DNSlogging,完全忽略在主服务器收到通知后磁盘上有新数据的事实。 我正在用dig
命令检查结果: dig @slaveserver record.zone.tld
。
我以为BIND可能会保留其权威区域的内存caching,所以我设置max-cache-size
和max-cache-ttl
为0,但是没有效果。
我尝试了其他方法来刷新这个所谓的caching,通过在从服务器上运行诸如rndc flush
和rndc reload
类的命令,但它仍然返回旧的陈旧logging。
最后,我注意到该区域的MINTTL
被设置为86400(24小时),所以我暂时将MINTTL
改为15秒,然后重新启动从属服务器。 没有效果 – 从属服务重新启动后,只会提供更新的DNS结果。
这里发生了什么? 当接收到区域更新的通知时,BIND9的预期行为是什么? 它是否始终尊重TTL
和MINTTL
? 我会假设它总是使用最新的可用数据。
在我的机智的结尾,我正在考虑设置一个crontab来重新启动BIND奴隶小时,只是为了避免提供陈旧的数据。 有更好的吗?
从你的描述我不能告诉你究竟是什么问题,但我可以帮你排除几件事情。
caching大小设置和cachingttl设置用于caching的recursion查询数据,并且(如您已经猜到的)不适用于权威数据。 同样,rndc flush也不适用于此。
build议的排除方法:
如果这不起作用,请考虑发布更多信息,包括主服务器和从服务器上的named.conf部分,以及在主服务器上加载新编辑的区域之后发生的事情。
在重新加载命名之前,当您在主服务器中进行更改时,请不要忘记增加区域文件中的序列号,否则区域文件将不会复制到从服务器。
我面临同样的情况。 我的研究让我有以下的认识。 如果您正在使用视图,那么dig @ local机器将仅服务于localhost-view中的内容。 localhost-view仅在重新启动命名时刷新。 但是最新的区域文件(从主机传送)在从机上仍然可用,并将用于来自外部源或外部视图的所有查询。 所以,你需要做一些安排,让你的localhost-view被刷新。