这可能是 Windows DNS 特定的问题或一般 DNS 最佳实践问题 - 我不确定!
我们将第三方 DNS 配置从提供商 A 迁移到提供商 B。
我注意到,尽管我几天前已通过我们的注册商更改了名称服务器,并且选择缓存记录的属性显示 TTL 为 1 天,但我们的内部递归 Windows DNS 服务器仍然缓存了指向提供商 A 服务器的域的 NS 记录。
24 小时后,当此缓存中的 NS 记录过期时,DNS 服务器是否会返回 TLD 服务器以更新权限,或者是否会优先转到 dns1.providera.com,因为这是它已缓存的?
在这种情况下,我安排让提供商 A 的服务器运行一周,以允许更改传播,因此 dns1.providera.com 仍然处于活动状态,并且仍将提供 NS 和 SOA 记录,表明 dns1.providera.com 负责此域。鉴于这一事实,Windows DNS 服务器是否会返回 TLD 并获取权限更改,还是会假设一切正常并更新其缓存的 NS 记录上的时间戳?
我想知道什么才是确保缓存能够发现这个问题的最佳方法。我应该:-
(1) 让提供商 A 的服务器保持原位并处于活动状态,然后等待缓存赶上进度……基本上就是我们现在正在做的事情,似乎存在问题 - 可能专门针对 Windows 服务器,或者可能更广泛。 (2) 让提供商 A 的服务器保持原位,但更改它们提供的 NS 和/或 SOA 信息,以告知缓存有新服务器负责。 (3) 在 2*TTL 之后删除提供商 A 的服务器,以强制剩余缓存更新。
(2) 的问题在于,在提供商 A 的系统上,我似乎无法将 NS 或 SOA 信息更改为除其服务器之外的任何内容。
(3) 的问题在于,我不确定 DNS 服务器在这种情况下会如何表现。当它无法访问缓存的名称服务器时,它会刷新缓存并尝试进行完整的递归查找,还是会返回错误,迫使用户手动清除缓存?
提前致谢!
答案1
这些更新的总体架构/流程如下:
在您向注册商更新记录后,他们将更新注册数据库,进而更新隐形主 TLD NS。
更新将从隐形主服务器流向实际回复查询的辅助服务器。这发生在 TLD SOA 刷新时间段内,除非发生故障,在这种情况下 TLD SOA 到期时间段开始计时。
如果他们那边一切顺利,这些更新将在最大 TLD SOA 刷新中传播,并且您的更新记录将出现在面向公众的 TLD 名称服务器上。
如果您在更新的记录出现在面向公众的 TLD 名称服务器上之前进行过查询,那么您必须等到记录的 TTL 过期才能获得更新的记录。
综上所述:
如果所有系统均正常运行,那么您只需要等待 TLD SOA 刷新的最大时间。
如果你过早通过缓存/递归进行查询,则可能需要等待 TLD SOA 刷新 + 记录 TTL
如果发生停电,您可能需要等待更长时间。
如果系统在中断后最后一刻恢复,则您无需等待超过 TLD SOA 到期时间 + 记录 TTL。这是因为您在更新的记录发布到面向公众的 TLD 名称服务器之前进行了查询。
因为大多数缓存/递归服务器也会缓存您的区域记录,并且您的(企业?)DNS 提供商很可能也会有辅助服务器,所以您必须添加 SOA 刷新,然后才能开始看到通过新服务器对您自己的区域进行的更改。当然,正如我之前所做的那样,您可以为您自己的区域更新旧服务器和新服务器。
你可以做什么:
您可以使用 dig 或 nslookup 等工具直接查询面向公众的 TLD 名称服务器,以查明您的记录是否已更新。您还将了解 TLD 的 SOA 时间值。
您可以使用相同的工具来查询新的 DNS 提供商的辅助服务器,以查明他们是否已收到更改。
通过公共名称服务器执行完整的递归查询(他们可以选择忽略递归执行,但大多数不会这样做)以查看新的查询链是否运行良好。
从客户端工作站本地执行完整递归查询。Dig 允许您执行此操作,并会帮助您确定解析链是否按预期绑定。
DNS 可能令人望而生畏。请对我的回复发表评论,这样我就可以让它更易于理解。我会在今天晚些时候查看它,看看是否可以改进我所写的内容。
答案2
这实际上不是一个答案,只是一些想法。
(3) 的问题在于,我不确定 DNS 服务器在这种情况下会如何表现。当它无法访问缓存的名称服务器时,它会刷新缓存并尝试进行完整的递归查找,还是会返回错误,迫使用户手动清除缓存?
123号,第 2.1.1 节建议,在这种情况下,缓存 DNS 服务器应该只返回错误。(顺便问一下,您说的“用户手动清除缓存”是什么意思?用户无法做任何事情。DNS 服务器操作员可以,当然管理员不会关心甚至不知道您的服务器无法访问(除非它是 google.com 的权威服务器)。),因此 (3) 不是一个很好的选择。
至于
24 小时后,当此缓存中的 NS 记录过期时,DNS 服务器是否会返回 TLD 服务器以更新权限
我差点就跳起来说“当然会查询 TLD”,因为否则没人能更改自己的 DNS 托管。不过,再想想,还是有几种可能性:
如果某个缓存 DNS 服务器在 NS TTL 到期之前未收到针对您的域的查询,则后NS TTL 已过期,它收到查询,缓存服务器一定不使用这些过期的 NS,除了查询 TLD 之外别无选择。但是,如果某些缓存 DNS 服务器不断查询您的域,则您的旧服务器每次查询时都可能会发送一份 NS 记录的副本(在权限部分),缓存服务器可能会存储其新 TTL 的记录,因此 TTL 在技术上可能永远不会过期(?!)
我认为 TLD 将被查询,因为我无法相信如此常见的问题竟然没有解决方案。我希望这里的大神们能给我们指点迷津...@Alnitak。