DNS 查找顺序是如何确定的?

Vit*_*sov 21 domain-name-system nslookup

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

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

Ada*_*m C 22

可悲的是,这里的答案是“视情况而定”。它所依赖的因素因域、拥有服务器的设置方式以及您自己的本地 DNS 的设置方式而异。

首先,例如,关于返回的 NS 记录:完全允许随机化返回这些记录的顺序,因此每次请求时顺序可能不同。另一方面,并​​非所有 DNS 实现都这样做,因此您很可能会得到一个静态排序的列表。关键是你不能确定。

接下来,一些 DNS 实现将并行查询每个 NS,并使用第一个回复。其他人将命中每个请求,在一定数量的请求中确定最快的并使用那个。或者它可以只是循环。

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

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

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

我意识到这是一个无法回答的问题,没有任何明确的内容可供您带走,但鉴于上述情况,您必须确定给定域的行为的唯一真正方法是测试。


DEL*_*ACC 6

我在客户端级别(例如世界各地的 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”自己尝试,以查看您的顶级域名的根域名服务器对您的域的了解 - 如果您的域属于通常的 com/net/etc TLD。其他TLD 必须查询其各自的根服务器。
  7. TLD 的根域名服务器始终按照您指定的确切顺序返回域名服务器;没有随机化。它们还返回每个名称服务器的 IP;这被称为“GLUE”,它允许互联网解决“鸡与蛋”问题,即如何在了解域的任何信息之前将名称服务器主机名解析为 IP。此外,它们中的大多数(如最大的 com/net/etc 注册中心)使用 2 天的缓存时间,这样它们就不会经常被“域 X 的名称服务器列表是什么?”所困扰。要求。这是常识的来源,您必须等待 2 天,直到您可以放心地说您的新名称服务器在全球范围内都知道,之后“
  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 以前从未遇到过该域,并且两者的缓存记录都完全为零。查找可能如下所示:

  • 一个 foo.example.com 通过 ns1.example.com,然后存储在 ISP 缓存中
  • 一个example.com通过ns3.example.com,然后存储在ISP缓存中
  • 一个 www.example.com 通过 ns2.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 更高的目标,但需要单独出售,发挥您的想象力。;-)