我最近“继承”了一个小型 bind9 DNS 服务器(仅运行 bind9+ssh 的 64MB RAM),其中区域是使用 GUI 应用程序制作的,然后以 root 身份 scp'd 进入服务器。我并不介意那部分,但结果是 GUI 应用程序在每次编辑时都制作了不一致的序列号,导致序列号如 1245486432 而不是“常见”(?)YYYYMMDDSS。
是否有一种“安全”的方式来增加/减少序列号,而不会导致 DNS 服务器和缓存之间出现任何类型的不一致?
我最近“继承”了一个小型 bind9 DNS 服务器(仅运行 bind9+ssh 的 64MB RAM),其中区域是使用 GUI 应用程序制作的,然后以 root 身份 scp'd 进入服务器。我并不介意那部分,但结果是 GUI 应用程序在每次编辑时都制作了不一致的序列号,导致序列号如 1245486432 而不是“常见”(?)YYYYMMDDSS。
是否有一种“安全”的方式来增加/减少序列号,而不会导致 DNS 服务器和缓存之间出现任何类型的不一致?
从站使用序列号来确定他们拥有的区域文件是否与主站持有的版本相同。当主序列号增加时,他们知道他们必须 AXFR 一个新副本。唯一的伤害将来自递减,因为奴隶会认为他们的修订比主人持有的要晚。
有两种解决方案。最简单的方法是减少你的主人,从奴隶中删除副本,然后让它们重新加载。但是,如果您不能完全控制奴隶,这将不起作用。在这种情况下,参考手册中提供了解决方案。
需要注意的是,最好使用序列号的最后两位来存储修订,而不是秒。即 YYYYMMDDRR。这允许您在同一天内进行多次更新。
我已经使用了一些“神奇”的 DNS 序列号算法来回到更常规的 YYYYMMDDSS 方案,但我确实有安全网,可以手动强制从属服务器提交并在需要时刷新缓存。
RFC 1982定义了 2147483647 (2^31 - 1) 的最大增量,并且DNS & Bind Cookbook有一个以这种方式重置序列的配方。基本上为您当前的序列添加最大增量,重新加载您的区域,等待从站获取更改,将序列更改为您想要的内容并再次重新加载您的区域。
递增是安全的,因为 x > y 是测试,但是要递减,您通常需要控制所有从站以强制它们加载(他们认为的)旧区域。
这取决于从站,但对于 Bind,最简单的方法是停止,rm 从站文件并启动。如果您想了解这一点,可以通过 RNDC 强制重新加载。