转向更好的 DNS 序列编号方案

转向更好的 DNS 序列编号方案

我最近“继承”了一个小型 bind9 DNS 服务器(64MB RAM,仅运行 bind9+ssh),其中的区域是使用 GUI 应用程序制作的,然后以 root 身份 scp 到服务器中。我并不介意那部分,但事实证明 GUI 应用程序每次编辑都会产生不一致的序列号,导致序列号为 1245486432,而不是“通用”(?) YYYYMMDDSS。

是否存在一种“安全”的方法来增加/减少序列号,而不会导致 DNS 服务器和缓存之间出现任何不一致?

答案1

从服务器使用序列号来确定它们拥有的区域文件是否与主服务器拥有的版本相同。当主服务器的序列号增加时,它们知道必须 AXFR 一份新副本。唯一的危害是减少,因为从服务器会认为它们拥有的修订版本比主服务器拥有的修订版本更新。

对此有两种解决方案。最简单的方法是减少主服务器,从从服务器中删除副本,然后让它们重新加载。但是,如果您无法完全控制从服务器,则此方法将不起作用。在这种情况下,解决方案在参考手册

将 2147483647(2^31-1)添加到该数字,重新加载区域并确保所有从属设备都已更新为新的区域序列号,然后将该数字重置为您想要的数字,然后再次重新加载区域。

值得注意的是,最好使用序列号的最后两位数字来存储修订版本,而不是秒数。即 YYYYMMDDRR。这样您就可以在同一天内进行多次更新。

答案2

我使用了一些“神奇的”DNS序列号算法来返回到更常规的YYYYMMDDSS方案,但是我确实有安全网,可以在必要时手动强制从属服务器提交并刷新缓存。

RFC 1982定义最大增量为 2147483647 (2^31 - 1),并且DNS 和绑定手册有一种方法可以以这种方式重置序列。基本上,将最大增量添加到当前序列,重新加载区域,等待从属设备获取更改,将序列更改为所需的内容,然后再次重新加载区域。

答案3

增加是安全的,因为 x > y 是测试,然而为了减少,你通常需要控制所有的从属服务器来强制它们加载(它们认为的)旧区域。

这取决于从属服务器,但对于 Bind,最简单的方法是停止、rm 从属文件并启动。如果您想了解这一点,可以通过 RNDC 强制重新加载。

相关内容