有什么办法可以告诉根名称服务器的DNSlogging的TTL?

我目前正在将DNS区域从一个DNS服务器提供程序迁移到另一个。 我试图估计需要多长时间才能传播变化,并且要了解如果我select在中游回滚,延迟可能会是多less。

以前,我想我可以这样做:

dig example.com ns 

要查看NSlogging中剩余的TTL是什么,但是现在我明白这个NSlogging是该区域中的子域名的NSlogging,而不是从根服务器发出的NSlogging,这是最终决定查询将被发送到哪个名称服务器。

我通过在每个提供者的区域中设置一个testinglogging来testing它:

 Provider1 test.example.com 10.0.0.1 Provider2 test.example.com 192.168.0.1 

对于这两个提供商,NS上的TTLlogging为0,而TLD注册商级别上的NSlogging指向Provider1的名称服务器。

当我更改Provider1区域中的NSlogging时,我几乎可以立即看到这反映在NS查询中(使用'dig example.com ns')。

但是,当我发送查询Alogging,即

 test.example.com 

它总是返回

 10.0.0.1 

无论提供者1的区域中的NSlogging设置为什么。

在此基础上,我得出结论:区域文件中的NSlogging与迁移无关,只有名称服务器logging在TLD级别才是重要的。

然而,我无法得知这个变化可能会传播多久,无论是前进还是后退。

是否有可能查询哪些TTL正在处理从TLD根服务器发出的logging?

在此基础上,我得出结论:区域文件中的NSlogging与迁移无关,只有名称服务器logging在TLD级别才是重要的。

这是一个不正确的假设,但很容易犯的错误。 你可以在这里阅读apex NSlogging的主题。 简短的版本是这两个问题,并且正在使用的将取决于高速cachingDNS服务器是否先前查询您的域或不。

请记住,大多数recursionDNS服务器强制执行最小TTL,所以从TTL为零的实验得出的任何结论几乎肯定是不准确的。 唯一的情况是,当你控制你正在查询的服务器使用的最小TTL策略时。

我目前正在将DNS区域从一个DNS服务器提供程序迁移到另一个。 我试图估计需要多长时间才能传播变化,并且要了解如果我select在中游回滚会有什么延迟。

我将关注这个话题,因为在你的问题的其余部分你有一些错误的开始。 首先,记住TTL在recursionDNS服务器上被caching是很重要的。 由于互联网上的每个人都使用不同的recursionDNS服务器,因此唯一可以假设的是,这将花费n秒钟,其中n是TTL的值。

这给我们带来了TTL在这里是相关的:

  • 单个logging在caching中的TTL。 即使NSlogging过期,caching中单个logging的请求也不会自动过期。 示例:如果test.example.com IN A从现在开始十分钟后过期,但是example.com IN NS从现在开始五分钟后过期,则即使在NSlogging发生更改后, test.example.com也将保留在caching中。 在logging到期并刷新之前,与新logging在新服务器上的价值相关的任何问题都不会变得明显。
  • 由TLD DNS服务器提供的NS粘合logging的TTL。 这些被recursion服务器使用,当第一次请求时需要获取有关您的域的信息。 这些TTL影响您的区域文件中列出的DNS服务器用于下一次刷新之前的时间。 (请参考上面链接的问答环节来澄清这一点)
  • 在区域文件顶部列出的NSlogging的TTL。 一旦粘合loggingTTL过期, 可能会使用这些TTL。 这些细节的实现有所不同。 既然你正在处理整个互联网的价值不同的实现,唯一的安全的假设是有些服务器正在使用它。

你不能认为互联网上的所有cachingNSloggingTTL来自一个来源或其他。 这迫使你计划围绕两者中的较高者,除非你真的不关心你不操作的recursionDNS服务器。

综合所有这些,我们得出以下结论:

  • 任何给定DNSlogging刷新新名称服务器所需的最大时间量是logging,胶水中的NSlogging和区域中的NSlogging之间的最高TTL值
  • 假设新DNS服务器上的TTL与旧服务器相同,则回滚所需的最大时间是三个TTL中的最高值 。 从最初更改DNS服务器到恢复更改之间的任何查询都将依赖于从新服务器获取的值。
  • 使所有参与更改的DNS服务器保持运行并同步,直到所有TTL在最后的NSlogging更改后过期为止,这一点非常重要 。 你不仅需要所有可用的服务器没有采取最新的变化,但两者之间的logging数据的任何不一致可以使事情变得更加混乱。

你可以用Windows上的nslookup轻松地做到这一点,我假设你可以用dig做同样的事情。 使用nslookup,只需使用debug在域名服务器logging中查询其中一个GTLD名称服务器,即可获得域名服务器列表,并使用这些名称服务器logging的TTL值。

 Microsoft Windows [Version 10.0.10240] (c) 2015 Microsoft Corporation. All rights reserved. C:\Users\Joe>nslookup Default Server: Unknown Address: 192.168.1.2 > server f.gtld-servers.net Default Server: f.gtld-servers.net Address: 192.35.51.30 > set q=ns > set debug > crabbygeezer.com Server: f.gtld-servers.net Address: 192.35.51.30 ------------ Got answer: HEADER: opcode = QUERY, id = 4, rcode = NOERROR header flags: response, want recursion questions = 1, answers = 0, authority records = 5, additional = 10 QUESTIONS: crabbygeezer.com, type = NS, class = IN AUTHORITY RECORDS: -> crabbygeezer.com nameserver = freedns1.registrar-servers.com ttl = 172800 (2 days) -> crabbygeezer.com nameserver = freedns2.registrar-servers.com ttl = 172800 (2 days) -> crabbygeezer.com nameserver = freedns3.registrar-servers.com ttl = 172800 (2 days) -> crabbygeezer.com nameserver = freedns4.registrar-servers.com ttl = 172800 (2 days) -> crabbygeezer.com nameserver = freedns5.registrar-servers.com ttl = 172800 (2 days) ADDITIONAL RECORDS: -> freedns1.registrar-servers.com internet address = 208.64.122.242 ttl = 172800 (2 days) -> freedns1.registrar-servers.com internet address = 72.20.53.50 ttl = 172800 (2 days) -> freedns2.registrar-servers.com internet address = 208.64.122.244 ttl = 172800 (2 days) -> freedns2.registrar-servers.com internet address = 72.20.38.137 ttl = 172800 (2 days) -> freedns3.registrar-servers.com internet address = 5.135.128.216 ttl = 172800 (2 days) -> freedns3.registrar-servers.com internet address = 62.210.149.103 ttl = 172800 (2 days) -> freedns4.registrar-servers.com internet address = 62.210.149.102 ttl = 172800 (2 days) -> freedns4.registrar-servers.com internet address = 72.20.53.50 ttl = 172800 (2 days) -> freedns5.registrar-servers.com internet address = 192.99.40.34 ttl = 172800 (2 days) -> freedns5.registrar-servers.com internet address = 72.20.53.50 ttl = 172800 (2 days) ------------ crabbygeezer.com nameserver = freedns1.registrar-servers.com ttl = 172800 (2 days) crabbygeezer.com nameserver = freedns2.registrar-servers.com ttl = 172800 (2 days) crabbygeezer.com nameserver = freedns3.registrar-servers.com ttl = 172800 (2 days) crabbygeezer.com nameserver = freedns4.registrar-servers.com ttl = 172800 (2 days) crabbygeezer.com nameserver = freedns5.registrar-servers.com ttl = 172800 (2 days) freedns1.registrar-servers.com internet address = 208.64.122.242 ttl = 172800 (2 days) freedns1.registrar-servers.com internet address = 72.20.53.50 ttl = 172800 (2 days) freedns2.registrar-servers.com internet address = 208.64.122.244 ttl = 172800 (2 days) freedns2.registrar-servers.com internet address = 72.20.38.137 ttl = 172800 (2 days) freedns3.registrar-servers.com internet address = 5.135.128.216 ttl = 172800 (2 days) freedns3.registrar-servers.com internet address = 62.210.149.103 ttl = 172800 (2 days) freedns4.registrar-servers.com internet address = 62.210.149.102 ttl = 172800 (2 days) freedns4.registrar-servers.com internet address = 72.20.53.50 ttl = 172800 (2 days) freedns5.registrar-servers.com internet address = 192.99.40.34 ttl = 172800 (2 days) freedns5.registrar-servers.com internet address = 72.20.53.50 ttl = 172800 (2 days) > 

使用dig执行类似查询的语法是:

 $ dig NS crabbygeezer.com @f.gtld-servers.net +trace 

过去,您可以查询域的SOAlogging以获取默认的TTL值:

 dig example.com. SOA 

但是这已经被弃用,以支持$ TTL指令。

如果你有特定的logging你感兴趣,你可以添加+ ttlid标志挖:

 dig +ttlid somehost.example.com. 

要得到确切的TTL剩余:

 ;; ANSWER SECTION: somehost.example.com. 604800 IN A 192.168.99.5 

(第二个字段是TTL – 在这种情况下是604800)