![如何使 BIND9 区域文件的更新可供查询使用?](https://linux22.com/image/787633/%E5%A6%82%E4%BD%95%E4%BD%BF%20BIND9%20%E5%8C%BA%E5%9F%9F%E6%96%87%E4%BB%B6%E7%9A%84%E6%9B%B4%E6%96%B0%E5%8F%AF%E4%BE%9B%E6%9F%A5%E8%AF%A2%E4%BD%BF%E7%94%A8%EF%BC%9F.png)
我正在使用 BIND 9.18 进行测试。我创建了一个支持动态 DNS 的区域,并尝试使用它nsupdate
来更新域的资源记录。15 分钟后,更新成功写入原始区域文件。但是,当我使用它dig
来查询域时,响应没有变化。然后我关闭named
,重新启动它并dig
再次使用它来查询域,响应显示更新。我尝试使用手动更新区域文件,结果是一样的——区域文件已成功更新,但只有在我重新启动 bind9 后rndc
才能看到更新。dig
我的问题是,我是否必须定期重新启动 bind9 才能使更新对查询可见?
谢谢你!
答案1
正如 @HBruijn 所说,动态更新首先存储在日志中,而不是立即写入区域文件。因此,错误的通过查看区域文件来检查是否应用了更新。
相反,您应该在 nsupdate成功后立即通过 DNS 查询它(使用dig
等) 。您将看到它已经在提供更新/新数据,尽管区域文件尚未重写。(您可能需要将客户端定向到您的服务器,以避免中间解析器的缓存。)您可能还会在日志中注意到,它会在更新到达后立即将更改传播到从属服务器。动态 DNS 更新是即时的。host
send
文本区域文件不适合快速更新。这样的更新需要完全重写文件。想象一下,一台服务器接收到一个大区域的稳定更新流——每次重写区域文件都会造成很大的浪费。这就是为什么它将最近的更新缓存到区域日志中,并仅定期应用日志。这就像书末的更正/勘误页:当书的主体已经完成时,重新打印整期的成本很高,所以他们添加了额外的页面,说明在哪里、什么以及应该将书改成什么,以使书正确。而且只有在下一期,他们才会真正将这些更正纳入文本中。
但是,你可以向其发送命令以立即应用日志并重写区域文件:
rndc sync -clean zone.name
不要太频繁地这样做;这不是最理想的。不要担心日志和非即时区域文件更新,关注你的业务(动态更新),让 BIND 按照它喜欢的方式工作,无需进行微观管理。