如何确定DNS查找顺序?


20

例如:我们已经注册了域名domain.com,并在注册服务器
ns1.domain.com上添加了名称服务器记录。
ns2.domain.com。
ns3.domain.com。

比我们查找domain.com更重要。我们得到所有3个名称服务器地址。
1.将进一步请求其中一台服务器,为什么?
2.区域文件中NS记录的顺序重要吗?
3.是否在任何RFC中确定?

Answers:


20

可悲的是,这里的答案是“取决于”。它取决于的因素将随域,拥有服务器的设置方式以及您自己的本地DNS的设置方式而异。

首先,例如,关于返回的NS记录:完全可以对返回这些记录的顺序进行随机化处理,因此每次请求时,其顺序可能会有所不同。另一方面,并​​非所有DNS实施都可以做到这一点,因此您很可能会获得静态排序的列表。关键是您不能确定。

接下来,一些DNS实现将并行查询每个NS,并使用其中一个首先答复。其他人将各打中,确定一些请求中最快的请求并使用该请求。或者它可能只是循环。

DNS有多个RFC,我发现其中两个更有用:

http://www.faqs.org/rfcs/rfc1912.html

http://www.faqs.org/rfcs/rfc1033.html

我意识到这是一个无法回答的问题,没有明确的定义供您使用,但是鉴于上述情况,您必须确定给定域的行为的唯一真实方法就是进行测试。


我支持你的回答。我本打算说同样的话,但是你击败了我。
Tonny 2012年

同样,使用getaddrinfo的客户端最终会得到排序的结果,而gethostbyname调用似乎是随机的。因此,不期望其行为的客户端会在某些方面中断轮询DNS。
马特2014年

5

我在客户端级别看到的最常见的实现,例如世界各地的ISP,如下所示:

  1. 有人(例如宽带订户)要求ISP的DNS服务器解析foo.example.com的A记录。
  2. ISP检查自己的缓存,如果该记录已缓存并且仍被认为是“新的”,则会立即通过缓存返回。(这是所有DNS缓存的工作方式,因此它们不会不必要地拉紧所讨论站点的DNS服务器。
  3. 如果他们没有缓存该记录,或者如果缓存被视为“过时/过时”,则ISP知道它需要再次解析最新记录。
  4. 现在,ISP需要知道要查询最新记录的名称服务器。
  5. ISP首先检查其缓存的域权威名称服务器列表(这些地址是ns1.example.com,ns2.example.com等,以及它们的IP)。如果这些记录仍被认为是最新的,则跳至步骤8。
  6. 如果缓存的名称服务器记录被认为已过期,或者该域名没有任何缓存的记录,则ISP会查询TLD的根名称服务器(例如,如果是.com域,则是.com注册表)以获取例如example.com的最新名称服务器名称/ IP对。(您可以通过“ dig @ b.gtld-servers.net example.com”自己尝试一下,以查看您的TLD的根名称服务器对您的域了解的信息-如果您的域属于通常的com / net / etc TLD。 TLD必须查询其各自的根服务器。
  7. TLD的根名称服务器始终以您指定的确切顺序返回名称服务器。没有随机化继续进行。它们还返回每个名称服务器的IP。这就是所谓的“ GLUE”,这是使Internet解决“鸡与蛋”问题的方法,该问题是在完全不了解域之前,如何将名称服务器主机名解析为IP。而且,它们中的大多数(例如最大的com / net / etc注册表)使用2天的缓存时间,这样它们就不会因“域X的名称服务器列表是什么?”而不断受到冲击。要求。这是您必须等两天之后才能安全地说出新的域名服务器在全球范围内广为人知的常识的来源。
  8. 当ISP知道example.com的名称服务器及其IP(例如ns1.example.com,ns2.example.com,ns3.example.com)时,ISP现在从该列表中选择一个随机服务器并发送查询。(这对他们很好,他们不会不必要地锤击该站点的所有DNS服务器,并且它们不必总是查询第一个列出的名称服务器,从而进一步帮助实现负载平衡。
  9. 如果ISP在指定的超时时间内未收到该名称服务器的响应,它将查询列表中的另一个。
  10. 收到响应后,ISP现在将其存储在其自己的本地缓存中。至于将保留多长时间?任何DNS服务器返回的每条记录还具有与之相关的“软到期”时间(以秒为单位),这是允许查询客户端(例如ISP的DNS服务器)在将该记录考虑之前缓存该记录的时间”仍然可以使用,但可能已过时,现在应该在可能的情况下进行新查询,以确保它没有更改。” 在每个单独的名称服务器的“ SOA”(授权开始)记录中还指定了一个“硬到期”时间(您可以通过“ dig @ ns1.example.com example.com -t soa”查看您的时间),为该服务器返回的所有记录指定一个全局“硬限制”,之后,任何高速缓存都应删除其高速缓存的记录,即使名称服务器已关闭,也无法再次查找记录。通常,有效期为30分钟到5小时,而有效期通常为1-3周。
  11. 完成了这份详尽的工作之后,ISP最终拥有了最新的DNS记录,并将其返回给查询宽带用户,这对幕后发生的巨大工作而言不那么明智!

每次记录查找都会重复此过程。但是,只有第一个查询才能完成整个工作;之后将缓存名称服务器IP,随后对ISP的缓存DNS服务器的后续查询将能够迅速跳至第8步。

现在,关于步骤8的随机化,它在记录级别上起作用。假设该ISP的宽带用户询问以下记录:

  • foo.example.com
  • example.com
  • www.example.com
  • MX example.com(ISP客户不应要求此记录,但这只是一个示例)

每条记录将作为其自己的单独“实体”进行处理,并分别进行缓存和查找。因此,假设订户和ISP之前从未遇到过该域,并且它们的缓存记录都完全为零。查找可能如下:

  • 通过ns1.example.com的foo.example.com,然后存储在ISP缓存中
  • 通过ns3.example.com的example.com,然后存储在ISP缓存中
  • 通过ns2.example.com的www.example.com,然后存储在ISP缓存中
  • MX example.com通过ns3.example.com,然后存储在ISP缓存中

每当缓存的记录被软过期时,都会重复该过程,因此您甚至都不知道对该记录的后续请求将再次使用同一服务器。

因此,您的绝对最大的目标是确保所有 DNS服务器都彼此完全同步,从而完美地镜像每个服务器上的每个 DNS记录。您永远不会知道DNS客户端将攻击哪台服务器,也不能依赖任何命令。哪有这回事。

此外,如Adam C所提到的,服务器级(example.com)DNS服务器本身可以返回NS记录并随机化它们的顺序。对于常规DNS服务器来说,随机分配其NS记录是非常普遍的,这是由于DNS实施不佳总是会选择第一个返回的namserver而导致的。但是,ROOT TLD名称服务器(前面提到过)永远不会将列表随机化,而对于解决域而言,它们的列表才是真正重要的。这就是为什么大多数实现从名称服务器列表中选择一台随机服务器的原因,以避免始终访问同一服务器并使它过载。

好的,这是您了解DNS如何工作以及您应该记住的内容的入门。

  • 简而言之:将所有DNS服务器都视为一台服务器,这是您一生中的最高目标,以确保它们都具有同样的能力来回答可能对它们发起的任何查询。

免责声明:可以实现比管理DNS更高的生活目标,但要单独出售,请发挥您的想象力。;-)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.