我的设置的简要说明。主要区域在 Windows 服务器 DNS 上运行。辅助区域在绑定上运行。如果我删除区域文件并重新启动绑定,传输将正常工作。意味着将使用最新条目创建区域文件。如果现在在 Windows 服务器中添加或删除条目,绑定日志将显示:
named[18697]: zone xxx.xxx/IN: transferred serial 144
named[18697]: transfer of 'xxx.xxx/IN' from 192.168.111.4#53: Transfer completed: 1 messages, 5 records, 212 bytes, 0.109 secs (1944 bytes/sec)
named[18697]: zone xxx.xxx/IN: sending notifies (serial 144)
但区域文件未更新!如果我再次删除文件并重新启动绑定,我将获得更新的记录。有人知道我的问题是什么吗?谢谢!
答案1
在确认问题是否具体涉及区域文件而不是区域内容之前,这有点推测。
BIND 不会立即将区域传输(对于从属区域)或更新(对于动态更新的区域)的数据写入适当的区域文件中,而是暂时缓冲日志文件(`.jnl`)中的更改,并定期将所有更改刷新到主区域文件。
这不会以任何方式影响正在提供的数据;无论新数据是否已合并到主区域文件中,都会提供新数据。
此外,当前的 BIND 版本默认甚至不使用人性化的基于文本的主文件格式对于从属区域,有利于更有效的二进制格式(没有实际的缺点,因为您无论如何都不会直接使用从属区域的文件)。
从这一切中我们可以吸取的教训是,如果文件由 BIND 管理,你实际上不应该查看文件内容,而应该查看它提供的数据。
如果您出于某种原因必须查看文件内容而不是查询正在运行的named
进程,那么您将需要以一种考虑日志的方式读取文件。
例如named-compilezone -j -o - example.com db.example.com
(或者,named-compilezone -f raw -j -o - example.com db.example.com
如果文件位于生的(二进制)格式。)