我使用 BIND 9.18 进行测试。我创建了一个支持动态 DNS 的区域,并尝试使用它nsupdate
来更新域的资源记录。15 分钟后,更新成功写入原始区域文件。但是,当我用来dig
查询域时,响应没有改变。然后我关闭named
,重新启动它并dig
再次查询域,响应显示更新。我尝试使用手动更新区域文件rndc
,结果是相同的——区域文件已成功更新,但更新仅在dig
我重新启动bind9后才可见。
我的问题是,我是否必须定期重新启动bind9以使更新对查询可见?
谢谢你!
我使用 BIND 9.18 进行测试。我创建了一个支持动态 DNS 的区域,并尝试使用它nsupdate
来更新域的资源记录。15 分钟后,更新成功写入原始区域文件。但是,当我用来dig
查询域时,响应没有改变。然后我关闭named
,重新启动它并dig
再次查询域,响应显示更新。我尝试使用手动更新区域文件rndc
,结果是相同的——区域文件已成功更新,但更新仅在dig
我重新启动bind9后才可见。
我的问题是,我是否必须定期重新启动bind9以使更新对查询可见?
谢谢你!
正如@HBruijn 所指出的,动态更新首先存储在日志中,并且不会立即写入区域文件中。因此,通过查看区域文件来检查更新是否已应用是错误的。
相反,您应该在 nsupdate成功后立即通过 DNS 查询(使用
dig
等) 。您将看到它已经在提供更新/新数据,尽管事实上区域文件尚未重写。(您可能需要将客户端定向到您的服务器,以避免中间解析器的缓存。)您可能还会在日志中注意到,它在更新到达后立即将更改传播到从属服务器。动态 DNS 更新是即时的。host
send
文本区域文件不适合快速更新。此类更新需要重写完整文件。想象一下,一个服务器接收到一个大区域的可靠更新流——每次重写区域文件将是巨大的浪费。这就是为什么它将最近的更新缓存到区域日志中,并且仅定期应用日志。这就像书末尾的更正/勘误页:当书体已经完成时,重印整个问题的成本很高,因此他们添加了额外的页面,说明书中应该更改的位置、内容以及内容是正确的。直到下一期,他们才真正将这些更正纳入文本中。
但是,您可以向它发送命令以立即应用日志并重写区域文件:
不要经常这样做;这是次优的。不必担心日志和非即时区域文件更新,专注于您的业务(动态更新)并让 BIND 按照其喜欢的方式完成工作,无需进行微观管理。