Gar*_*aid 5 domain-name-system dns-hosting
我目前正在将 DNS 区域从一个 DNS 服务器提供商迁移到另一个。我试图估计更改传播需要多长时间,并了解如果我选择在中途回滚可能会出现什么延迟。
以前,我认为我可以这样做:
dig example.com ns
Run Code Online (Sandbox Code Playgroud)
要查看 NS 记录上剩余的 TTL 是多少,但现在我明白此 NS 记录是区域中子域的 NS 记录,而不是源自根服务器的 NS 记录,后者是最终决定查询将发送到哪个名称服务器。
我通过在每个提供程序的区域中设置测试记录来对此进行测试:
Provider1 test.example.com 10.0.0.1
Provider2 test.example.com 192.168.0.1
Run Code Online (Sandbox Code Playgroud)
对于这两个提供商,NS 上的 TTL 记录为 0,而 TLD 注册商级别的 NS 记录指向 Provider1 的名称服务器。
当我在 Provider1 的区域中更改 NS 记录时,我几乎可以立即看到这反映在 NS 查询中(使用“dig example.com ns”)。
但是,当我发送对 A 记录的查询时,即
test.example.com
Run Code Online (Sandbox Code Playgroud)
它总是返回
10.0.0.1
Run Code Online (Sandbox Code Playgroud)
无论提供者 1 的区域中的 NS 记录设置为什么。
在此基础上,我得出结论,区域文件中的 NS 记录与迁移无关,并且只有 TLD 级别的名称服务器记录是重要的。
但是,我无法了解那里的更改可能会向前或向后传播多长时间。
对于从 TLD 根服务器发出的记录,是否可以查询正在使用的 TTL?
在此基础上,我得出结论,区域文件中的 NS 记录与迁移无关,并且只有 TLD 级别的名称服务器记录是重要的。
这是一个不正确的假设,但很容易犯。您可以在此处阅读更多有关 apex NS 记录主题的信息。简短的版本是两者都很重要,所使用的将有所不同,具体取决于缓存 DNS 服务器之前是否查询过您的域。
请记住,大多数递归 DNS 服务器强制执行最小 TTL,因此从 TTL 为零的实验得出的任何结论几乎肯定是不准确的。唯一不是这样的情况是当您控制要查询的服务器使用的最小 TTL 策略时。
我目前正在将 DNS 区域从一个 DNS 服务器提供商迁移到另一个。我试图估计更改传播需要多长时间,并了解如果我选择在中途回滚可能会出现什么延迟。
我将专注于这个主题,因为您在问题的其余部分有一些错误的开始。首先,重要的是要记住 TTL 缓存在递归 DNS 服务器上。由于 Internet 上的每个人都使用不同的递归 DNS 服务器,因此您可以做出的唯一假设是最多需要n秒,其中n是 TTL 的值。
这让我们知道哪些 TTL 与此处相关:
NS记录过期,对缓存中的单个记录的请求也不会自动过期。示例:如果test.example.com IN A从现在起 10 分钟后到期,但从现在起example.com IN NS5 分钟后到期,test.example.com即使在NS记录已更改后仍将保留在缓存中。在新服务器上与此记录的值相关的任何问题都不会变得明显,直到该记录过期并被刷新。NSTLD DNS 服务器提供的胶水记录的TTL 。这些由递归服务器使用,这些服务器在首次请求时需要获取有关您的域的信息。这些 TTL 会影响区域文件中列出的 DNS 服务器用于下次刷新之前的时间。(请参阅我上面链接的问答以对此进行澄清)NS区域文件顶部列出的记录的TTL 。一旦胶水纪录的TTL已过期,这些的TTL可能会被使用。实现在这个细节上有所不同。由于您正在处理整个互联网的不同实现,唯一安全的假设是某些服务器正在使用它。您不能假设NSInternet 上的所有缓存记录 TTL 都来自一个来源或另一个来源。这迫使您围绕两者中的较高者进行计划,除非您真的不关心您不操作的递归 DNS 服务器。
将所有这些放在一起,我们得出以下结论:
NS粘合中的NS记录和区域中的记录之间的最高 TTL。NS记录更改。您不仅需要所有服务器都可用于尚未获取最新更改的客户端,而且两者之间记录数据的任何不一致都会使事情变得更加混乱。