$ORIGIN example.com. ; not necessary, using this to self-document
$TTL 3600
@ IN SOA ns1.example.com. admin.example.com. (
1970010100 7200 1800 1209600 300)
@ IN NS ns1.example.com.
@ IN NS ns2.example.com.
@ IN A 198.51.100.1
ns1 IN A 198.51.100.2
ns2 IN A 198.51.100.3
sub1 IN NS ns1.example.edu.
sub2 IN NS ns1.sub2
ns1.sub2 IN A 203.0.113.1 ; inline glue record
NS 记录在域顶点下的作用是众所周知的。它们的存在是为了将子域的权限委托给另一个名称服务器。上述示例包括 和 的 NSsub1
记录sub2
。这些允许名称服务器分发它不认为自己具有权威性的域部分的引用。
NS 记录在域顶点的目的,ns1
在ns2
这种情况下,整个互联网似乎不太了解。我的理解(可能不是整体的)如下:
- 缓存 DNS 服务器不使用它们来确定域的权威服务器。这由在注册商级别定义的名称服务器粘合处理。注册商从不使用此信息来生成粘合记录。
- 它们不用于将整个域的权限委托给其他名称服务器。尝试使用 ISC BIND 等软件这样做根本不会导致“预期的”引用行为,因为名称服务器将继续认为自己对该区域具有权威性。
- 名称服务器不使用它们来确定它是否应该返回权威响应(
AA
标志集);该行为由软件被告知是该区域的主机还是从机来定义。大多数域名服务器软件很乐意为与上游粘合记录所包含的信息不一致的顶级 NS 记录提供服务,这反过来会导致知名的 DNS 验证网站为域生成警告。
既然如此,我们还剩下什么?如果这些信息似乎没有被整个 Internet 上的 DNS 服务器缓存所消耗,我们为什么要定义这些信息?
下属标识
主服务器使用 Apex 级别的 NS 记录来识别其下属。当权威名称服务器上的数据发生变化时,它将通过
DNS NOTIFY
消息 ( RFC 1996 ) 向该列表中的所有对等方通告这一点。这些服务器将依次调用SOA
记录请求(包含序列号),并决定是否下载该区域的更新副本。NS
部分中未列出的服务器,但这需要特定于服务器的配置指令(例如 ISC BINDalso-notify
指令)。顶点 NS 记录包含在默认配置下要通知的服务器的基本列表。NS
记录相互发送 NOTIFY 消息,通常会导致记录拒绝。这可以通过指示服务器只发送他们是主控区域的通知来禁用 (BIND:notify master;
),或者完全跳过NS
基于通知的通知,以支持在配置中明确定义的通知。(绑定notify explicit;
:)权威定义
上面的问题包含一个谬误:
这是一个容易得出的结论,但并不准确。
NS
记录和粘合记录数据(例如在您的注册商帐户中定义的数据)不具有权威性。理所当然地,它们不能被认为比驻留在被授权的服务器上的数据“更权威”。推荐人没有设置aa
(权威答案)标志这一事实强调了这一点。为了显示:
请注意上述回复中缺少
aa
标志。推荐本身并不权威。另一方面,被引用的服务器上的数据是权威的。也就是说,这种关系可能会变得非常混乱,因为如果没有在推荐的父端定义
NS
的非权威记录,就不可能了解这些记录的权威版本。NS
如果他们不同意会发生什么?NS
,A
和AAAA
记录最终可能会在刷新时被替换。刷新发生在这些临时记录上的 TTL 到期时,或者当有人明确请求这些记录的答案时。A
和区域外AAAA
数据的记录(即为区域外数据定义粘合的名称com
服务器,如. (RFC 2181)com
example.net
NS
引用的父方和子方之间的记录值不同时(例如输入注册商控制面板的名称服务器与NS
位于相同服务器上的记录不同),所经历的行为将不一致,直至并包括子NS
记录被完全忽略。这是因为标准没有很好地定义行为,并且实现在不同的递归服务器实现之间有所不同。换句话说,只有当域的名称服务器定义在引用的父方和子方之间保持一致时,才能期望在 Internet 上保持一致的行为。总而言之,如果在引用的父端定义的记录与这些记录的权威版本不一致,整个互联网的递归 DNS 服务器将在目的地之间反弹。最初,推荐中存在的数据将是首选,仅由权威定义替换。由于互联网上不断地从头开始重建缓存,因此互联网不可能使用这种配置来解决单一版本的现实。如果根据标准,权威记录正在做一些非法的事情,例如将
NS
记录指向由 a 定义的别名CNAME
,这变得更加难以排除故障;对于拒绝违规的软件,域将在工作和损坏之间交替。(即 ISC BIND/命名)RFC 2181 §5.4.1为该数据的可信度提供了一个排名表,并明确指出与引用和粘合相关的缓存数据不能作为对它们引用的记录的显式请求的答案返回。
NS 记录委派区域提供域定义的完整性。NS 服务器本身将依赖区域文件。他们不应该尝试通过从根服务器进行递归查询来找到自己。区域文件中的 NS 记录提供了许多其他功能。
缓存服务器可以通过从缓存中查询名称服务器来刷新名称服务器列表。只要缓存服务器知道名称服务器的地址,它就会使用该地址,而不是递归地查找适当的 NS 记录。
移动名称服务器时,更新旧名称服务器和新名称服务器非常重要。这将防止两个区域定义不同步时导致的中断或不一致。更新后的记录最终会被任何缓存了 NS 记录的服务器刷新。这将替换缓存的名称服务器列表。
NS 记录还有助于确认 DNS 配置的正确性。验证软件通常会验证委托区域的名称服务器定义是否与区域提供的匹配。可以在所有名称服务器上执行此检查。任何不匹配都可能表示配置错误。
拥有 NS 记录允许断开(本地)区域。这些可能是已注册域的子域,或全新域(由于 TLD 更改不推荐)。使用名称服务器作为其名称服务器的主机将能够通过从根服务器递归查找无法访问的区域。其他名称服务器可以配置为查找本地区域的名称服务器。
在拆分 DNS(内部/外部)的情况下,可能需要一组不同的 DNS 服务器。在这种情况下,NS 列表(可能还有其他数据)会有所不同,并且区域文件中的 NS 记录将列出适当的名称服务器列表。