我有两个子区域可以说:
zone "first.com" { type master; file "/etc/bind/zones/first.com.primary";};
zone "second.com" { type master; file "/etc/bind/zones/second.com.primary";};
首先我定义
$TTL 300
@ IN SOA ns1.org.com. postmaster.org.com. (
2022050902 ; serial
14400 ; refresh
1800 ; retry
604800 ; expire
86400 ) ; minimum
@ IN NS ns1.org.com.
subdomain IN A 127.0.0.1
第二个我想先参考
$TTL 86400
@ IN SOA ns1.org.com. postmaster.org.com. (
2019032601 ; serial
14400 ; refresh
1800 ; retry
604800 ; expire
86400 ) ; minimum
@ IN NS ns1.org.com.
@ IN CNAME subdomain.first.com.
www IN CNAME @
localhost IN A 127.0.0.1
loopback IN CNAME localhost
那可能吗?
CNAME
记录指定记录左侧的名称是右侧名称的CNAME
别名-适用于所有类型的 DNS 记录,而不仅仅是记录。粗体字是导致问题的原因,因为“所有记录类型”还包括区域和记录。A
SOA
NS
您正在尝试在该记录所在的区域
CNAME
的顶点使用记录。所以以完全合格的形式写成,你的第一个说:second.com
SOA
CNAME
因此,当
second.com
请求 SOA 记录时,subdomain.first.com
应该返回 SOA 记录。但是真正的 SOA 记录second.com
将无法访问,并且没有该 SOA 记录,整个second.com
域将被破坏——这意味着CNAME
指向的记录subdomain.first.com
实际上是无效的。此外,如果
subdomain.first.com
不是其自己区域的顶点,而只是更高级别区域中的子域,则它没有自己的 SOA 记录:遵循 CNAME 映射意味着对second.com
的 SOA 记录的请求必须回答“绝对不存在这样的记录”。但如果该区域没有 SOA 记录second.com
,则该区域不存在。同样,当
second.com
请求 NS 记录时,CNAME
将需要使用 NS 记录subdomain.first.com
来响应。但是 的名称服务器subdomain.first.com
根本不需要知道任何关于second.com
.为了防止这样的矛盾情况,RFC 1034 的第 3.6.2 节说:
(请注意,RFC 1034 早于约定,严格按照RFC 2119 中定义的要求级别使用单词SHOULD、MUST和MAY。虽然它说“不应该存在其他数据”,但这是一个要求,而不是一个建议,因为 DNS 缓存的正确性取决于它。)
此规则使记录不可能存在
CNAME
于区域的顶点,因为SOA
和NS
记录需要在顶点才能有意义地存在,并且任何CNAME
与它们一起的记录都将违反此规则。有关详细信息,请参阅:https ://www.isc.org/blogs/cname-at-the-apex-of-a-zone/
此外,将一条记录指向
CNAME
另一条CNAME
记录是低效且糟糕的风格,尽管它在技术上是有效的。您应该始终直接转到链末尾的规范名称: