如何使 BIND9 区域文件的更新可供查询使用?

如何使 BIND9 区域文件的更新可供查询使用?

我正在使用 BIND 9.18 进行测试。我创建了一个支持动态 DNS 的区域,并尝试使用它nsupdate来更新域的资源记录。15 分钟后,更新成功写入原始区域文件。但是,当我使用它dig来查询域时,响应没有变化。然后我关闭named,重新启动它并dig再次使用它来查询域,响应显示更新。我尝试使用手动更新区域文件,结果是一样的——区域文件已成功更新,但只有在我重新启动 bind9 后rndc才能看到更新。dig

我的问题是,我是否必须定期重新启动 bind9 才能使更新对查询可见?

谢谢你!

答案1

正如 @HBruijn 所说,动态更新首先存储在日志中,而不是立即写入区域文件。因此,错误的通过查看区域文件来检查是否应用了更新。

相反,您应该在 nsupdate成功后立即通过 DNS 查询它(使用dig等) 。您将看到它已经在提供更新/新数据,尽管区域文件尚未重写。(您可能需要将客户端定向到您的服务器,以避免中间解析器的缓存。)您可能还会在日志中注意到,它会在更新到达后立即将更改传播到从属服务器。动态 DNS 更新是即时的。hostsend

文本区域文件不适合快速更新。这样的更新需要完全重写文件。想象一下,一台服务器接收到一个大区域的稳定更新流——每次重写区域文件都会造成很大的浪费。这就是为什么它将最近的更新缓存到区域日志中,并仅定期应用日志。这就像书末的更正/勘误页:当书的主体已经完成时,重新打印整期的成本很高,所以他们添加了额外的页面,说明在哪里、什么以及应该将书改成什么,以使书正确。而且只有在下一期,他们才会真正将这些更正纳入文本中。

但是,你可以向其发送命令以立即应用日志并重写区域文件

rndc sync -clean zone.name

不要太频繁地这样做;这不是最理想的。不要担心日志和非即时区域文件更新,关注你的业务(动态更新),让 BIND 按照它喜欢的方式工作,无需进行微观管理。

相关内容