如果一个区域有 6 条 NS 记录
当 DNS 解析器为权威名称服务器查找域/区域时,它是否会获取所有 6 条记录并循环遍历它们?
如果解析器使用第一个 NS 服务器并根据其 TTL 对其进行缓存 - 当该权威名称服务器没有响应时,解析器是否仍然尊重 NS 记录的 TTL?
正如imperva 的这篇文章所示 - 即使权威名称服务器没有响应 - 解析器仍然会尝试使用它,直到其 TTL 过期 - 这有多真实?
基本上,在网站有多个 NS 记录的情况下,它们之间的解析受到 DNS 解析器工作方式的阻碍。只要解析器缓存的 NS 记录是最新的,解析器就可以尝试访问不活动的 Dyn 服务器,直到 NS 记录的 TTL 过期之前都是如此
这是否意味着我需要为 NS 记录设置短 TTL?
关于解析器 DNS 如何与无响应的 NS 及其 TTL 一起工作的任何建议?
谢谢
是的,一个适当的递归名称服务器会考虑所有的名称服务器,并会在以后每次尝试查询最快的一个。
粗略的算法是这样的:
ns3
对于您的特定有利位置,今天可能是更快的,但也许明天它会ns5
代替;所以你必须使用最快的,但并非总是如此,只是为了确保能够自动发现任何其他的,比你认为现在最快的更快。停在这里。记录是以一组的形式出现的,而不是一个列表。也就是说,DNS 中没有固有的顺序。当然,线路或显示表示中有一个命令,但它不是来自协议。
记录集是袋子:你得到记录,没有订单。事实上,您可以看到许多名称服务器,对于完全相同的查询,如果回复中有多条记录,每次查询时都会对记录进行不同的排序,这正是为了对抗只考虑第一项和无视其他人。
请参阅上面的算法:如果
NS
集合中的一个名称服务器没有响应,您可以认为它与“从任何其他名称服务器响应最慢”相同。客户端 DNS 有超时,因此它不会无限等待,而是标记此特定名称服务器太慢,并将切换到其他名称服务器。因此,第一次您会受到惩罚,因为系统必须尝试联系该名称服务器,稍等(几秒钟),重试并在某个时候停止使用该名称服务器。在那个斜坡之后,它将使用其他名称服务器,事情会很快。但是,当您第一次必须通过真正尝试联系它来发现给定名称服务器很慢/没有响应时,如果不尝试就无法推断出问题。也许吧,但这几乎是无关紧要的。为什么?因为您的
NS
记录发布在您域的父区域中,以确保 DNS 委派。当然,它们是带有 TTL 的,因为所有记录都附加了一个 TTL,但是它们是在您无法控制的区域中发布的,因此您不能选择它们的 TTL 值!(这里有一个关于这些记录的复杂/未完全完成的讨论,例如
NS
存在于两部分:父母和孩子,问题是“哪个是真正权威的”?如果父母在NS
记录上的 TTL 为 1 周并且您在您的区域中相同的NS
记录的 TTL 为 1 秒,递归名称服务器应该做什么?人们可能会得出这样的结论:通常委托的子部分是权威的,所以 1 秒在这里获胜;实际上是多个 DNS 实现是“以父母为中心”的,也就是说他们使用父母一方的数据,所以在那里赢了 1 周)TTL 始终是一种权衡。一旦知道,有些人会立即得出结论,在非常低的 TTL 下事情会更好地工作……这在某些情况下是正确的,而在其他情况下则不然。缓存很好,如果它们不存在(又名:没有使用足够大的 TTL),您将无法应对任何小问题,这将使一切都消失,因为缓存已经使名称过期。
此外,在沿所有名称服务器循环、尝试超时并收敛于最快的名称服务器时,TTL 值对上述算法没有(或几乎没有)影响。
因此,如果您查看 TLD 名称服务器(托管
NS
该 TLD 下所有域的记录)或各种建议中发生的情况,您通常会看到NS
TTL 为 1 或 2 天的记录。每个解析器都有自己的 :-) 这实际上并没有由协议指定,它是一个实现细节。您可以研究可以安装的源代码,但可能无法从大型公共递归 DNS 提供商那里收集有关该源代码的详细信息。
您可以在此处找到更多详细信息:
RFC 1034 §5.3.3 也确实提供了一些信息(另请注意,它考虑了您忘记的一种情况:给定的名称服务器可能有多个 IP 地址 - 今天甚至应该总是如此,一个 IPv4 和一个 IPv6 - 和不能保证每次都能在相同的时间内获得结果):
RFC 1035 §7.2 有这样的说法:
还要完成,更具体地说:
您引用的这篇文章讨论了使用 Dyn 名称服务器的人在出现中断时发生的问题。那么,是的,如果您只使用 Dyn 名称服务器,您就会遇到问题。即使您将您的区域更改为使用其他区域,
NS
记录 TTL 意味着您的更改不会立即被看到。但实际上这并没有对 TTL 有太多说明,而只是对 DNS 管理有很多说明:如果您想要有弹性,对于重要区域,不要使用单个 DNS 提供程序,而是使用多个(这当然需要在你不能随意混合和匹配提供商 X 和 Y,如果你通过 DNSSEC 进入混合,那就更复杂了,但这是可能的)。这样,正是由于上面快速起草的算法,即使 5 个中有 2 个让我们说名称服务器由于该特定提供商有问题而无法完全回复,另一个将承担负载并使您的域正常工作。PS:没有要求,但有时不清楚,给定记录集中的所有记录都必须具有相同的 TTL。TTL 是每条记录的,但在给定的记录集中需要相同,这意味着对于(名称,记录类型)的给定元组 [和类,但除了
IN
作为类之外没有人使用任何东西]