BIND 从站在重新启动之前不会与主站同步

Nic*_*Nic 7 domain-name-system bind master-slave

我有两台运行 BIND9 的 DNS 服务器,一台主机和一台从机。当主服务器上的区域文件更新时,我希望从服务器立即开始为更改的记录提供服务,但 BIND 给了我一些建议。

DNS 区域传输已经在 master 和 slave 之间正常工作。我可以登录从服务器并运行dig @dnsmaster myzone. AXFR,它会打印出该区域的全部内容。为了使其工作,DNS 主机配置了notify yesalso-notify { dnsslave }。同样,从站配置为allow-transfer { dnsmaster }.

当 dnsmaster 更新时,我运行rndc reload并告诉我正在发送通知。通过检查/var/named/slavedata/. 它们包含最新的数据,与主人知道的相匹配。


现在是奇怪的部分。

从服务器将继续提供旧的、陈旧的 DNS 记录,完全忽略在收到主服务器通知后磁盘上有新数据可用的事实。我使用dig的检查与此命令的结果:dig @slaveserver record.zone.tld

我认为 BIND 可能会保留其权威区域的内存缓存,因此我将max-cache-size和设置max-cache-ttl为 0,但这没有任何效果。

我尝试了其他方法来刷新这个所谓的缓存,通过在从服务器上运行类似rndc flush和 的命令rndc reload,但它仍然返回旧的陈旧记录。

最后发现MINTTLonzone被设置为86400(24小时),所以我暂时将其MINTTL改为15秒,并重启了从服务器。无效 - 从站只会在服务重新启动后提供更新的 DNS 结果。


这里发生了什么?收到区域更新通知时 BIND9 的预期行为是什么?它总是尊重TTLMINTTL吗?我会假设它总是使用最新的可用数据。

在我的智慧结束时,我正在考虑设置一个 crontab 以每小时重新启动 BIND 从设备,以避免提供过时的数据。有更好的吗?

Mic*_*lly 3

根据您的描述,我无法准确告诉您问题什么,但我可以帮助您排除一些问题。

缓存大小设置和缓存 ttl 设置适用于缓存的递归查询数据,(正如您已经怀疑的那样)不适用于权威数据。同样,rndc flash 在这里不适用。

建议的故障排除方法:

  1. 验证主设备是否按预期发送通知消息。检查日志和/或嗅探主从之间的流量。
  2. 从日志中验证从站是否正在接收通知消息。
  3. 如果您看不到从站接收通知,请按照通知问题进行故障排除,即仔细检查主站上的named.conf 中的通知选项,确保它们按照您的预期进行定义,以后不会被覆盖,并且范围适当。我建议使用“显式通知;” 与“同时通知{从服务器;};”
  4. 如果从属设备看到通知,则您的问题是弄清楚为什么区域文件没有按您的预期更新。应该发生的事情是在收到通知后,从属设备应该进行 SOA 查询,与其当前的 SOA 进行比较,并执行 AXFR(或 IXFR,如果您已启用它)以获取更新的区域副本(假设主服务器上的 SOA更高。)您应该能够使用嗅探器观察到所有发生的情况,并且您还应该在两台服务器上的日志中看到它的证据。
  5. 如果操作没有按照您的预期进行,请首先手动比较两台服务器上的 SOA 序列号 (dig @server $zonename SOA),以确保您没有意外地在某个时间给从站提供了高于预期的序列号过去的序列号现在高于master的序列号。

如果这不起作用,请考虑发布更多信息,包括来自主服务器和从服务器的named.conf部分以及来自两台服务器的日志,了解在主服务器上加载新编辑的区域后所发生的情况。