为什么名字服务器必须注册?

我们知道,DNS服务器是必须在注册商那里注册的。注册DNS简言之是在父ZONE那里创建一个胶水记录,当然实际上不止这么简单。

什么是胶水记录?它是父ZONE在授权子ZONE时,提供的唯一关于NS服务器的索引信息。例如,对于example.com这个域,它有如下子域:

test.example.com.  IN  NS  ns1.test.example.com.
test.example.com.  IN  NS  ns2.test.example.com.

当客户端查询test.example.com时,请求到了example.com的DNS服务器,DNS服务器会告诉客户端,去ns[1-2].test.example.com这2个NS查询。然后,客户端试图获取ns[1-2].test.example.com这2个NS服务器的IP地址。如果这2个NS服务器的IP地址不在父ZONE里设置一个索引,那么客户端永远无法找到它们。所以,在example.com里应该这样设置:

test.example.com.  IN  NS  ns1.test.example.com.
test.example.com.  IN  NS  ns2.test.example.com.
ns1.test.example.com.  IN  A  1.1.1.1
ns2.test.example.com.  IN  A  2.2.2.2

上述后面两条,就是胶水记录。它告诉客户端,其子域的NS服务器的IP地址是什么。

再进一步讨论,上述ns[1-2]这2个NS服务器,需要在.com级的ZONE里注册吗?在这个情况里,我们是不需要。但是,考虑如下情况:

example.org   IN  NS  ns1.test.example.com.
example.org   IN  NS  ns2.test.example.com.

因为example.com域名是我自己的,其DNS服务器也是个人行为控制。虽然在example.com的DNS里设置了胶水记录,但是.com这一级别并没有这个胶水。这样,example.org无法在官方节点上查询到这个胶水记录,因此会拒绝授权该NS服务器。所以,如果ns1和ns2还给其他域名提供DNS服务,就必须在.com级别的ZONE里注册DNS服务器。

为什么example.org会这样要求呢?它完全可以不这样强制要求,然后客户端按照DNS协议,只要example.com里设置了胶水,那么就可以找到ns1和ns2服务器。

我们再考虑如下情况:

foo.com.  NS  ns1.bar.net.
foo.com.  NS  ns2.bar.net.

and

bar.net.  NS  ns1.foo.com.
bar.net.  NS  ns2.foo.com.

在上述示例里,foo.com的DNS服务器是ns1和ns2.bar.net,假如它不要求ns1和ns2.bar.net进行注册。bar.net的DNS服务器是ns1和ns2.foo.com,假如它同样不要求ns1和ns2.foo.com进行注册。

如果这样,会发生什么?结果是客户端永远无法查询到这2组NS服务器。

所以,每一个TLD/ccTLD的权威服务器,并不知道其下每个域名要设置的NS的具体情况(例如上述示例里的NS情况)。如果要设置某个NS服务器,它简单且强制要求这个NS服务器必须注册过。

另外,这个胶水记录是否只能注册在.com/.net这一级别的ZONE里?实际上不一定,如下引用其他人的回复:

In theory, you can insert glue records anywhere above the zone in question.  See RFC 2181, section 5.4.1.

As an example, glue for the servers adns1.berkeley.edu and adns2.berkeley.edu exist in the root zone.

此条目发表在Common分类目录,贴了标签。将固定链接加入收藏夹。