我今天遇到了一个奇怪的情况。
通常,当我们设置 bind9 区域记录时,我们会将 NS 记录与我们的 ORIGIN 相同。但是今天我在生产站点中发现了一个有效的 bind9 设置,其中的 NS 记录指向另一个域:
[数据/cat_com.zone]
$ORIGIN cat.com.
$TTL 600
@ IN SOA ns.tree.com. hostmaster.cat.com. (
2015030200
21600
3600
604800
86400 )
IN NS ns.tree.com.
IN NS ns2.tree.com.
IN MX 10 cat.com.
ns IN A 1.2.3.124
ns2 IN A 1.2.3.124
host19 IN A 1.2.3.66
而在tree.com的记录中:[data/tree_com.zone]
$TTL 600
@ IN SOA ns.tree.com. hostmaster.tree.com. (
2015030200 ; serial
28800 ; refresh
7200 ; retry
3600000 ; expire
86400 ; default_ttl
)
@ IN NS ns.tree.com.
@ IN NS ns2.tree.com.
@ IN MX 10 mail.tree.com.
tree.com. IN A 1.2.3.66
ns.tree.com. IN A 1.2.3.124
ns2.tree.com. IN A 1.2.3.124
在named.conf中,有以下内容:
zone "tree.com" {
type master;
file "data/tree_com.zone";
};
zone "cat.com" {
type master;
file "data/cat_com.zone";
};
因此,当我尝试解析 cat.com 中的 A 记录(假设为 host19.cat.com)时,我可以获取记录 1.2.3.66。这很奇怪,因为根据 SOA 区域文件,NS 记录指向 ns.tree.com,而在 tree.com 的 SOA 区域文件中,没有 host19.cat.com 的信息。在这种情况下,dns 解析过程如何才能无错误地工作?NS 记录在这里是否起作用,或者只有 named.conf 决定应使用哪个 SOA 区域文件(在这种情况下,cat.com 将引用 cat_com.zone 文件),而 cat.com SOA 中的 NS 记录没有任何意义?
答案1
让域名/区域文件指向该域之外的名称服务器是完全可以的,即将其用作ns1.example.com
该域的名称服务器是完全可以的example.org
。
不仅意味着你不需要胶水记录在example.org
区域内,管理通常也更容易。
我认为你犯了一个概念上的小错误,认为外部 NS 记录(例如)ns1.example.com
意味着example.org
域的资源记录也应该从区域数据中检索example.com
。事实并非如此,NS 记录仅指向主持人运行该域的名称服务,但资源记录将来自该example.org
域特定的区域数据。