我有两个分区让我们说:
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这有可能吗?
发布于 2022-05-09 19:30:13
CNAME记录指定CNAME记录左侧的名称是右侧名称的别名-- for所有类型的A记录,而不仅仅是D2记录。粗体位是造成此处问题的原因,因为“所有记录类型”还包括区域的SOA和NS记录。
您正在尝试在second.com区域的顶点使用D6记录,SOA记录也位于该区域的顶点。因此,你的第一个CNAME是以完全合格的形式写成的:
second.com. IN CNAME subdomain.first.com.因此,当请求second.com的SOA时,应该返回subdomain.first.com的SOA。但是,second.com的实际SOA将无法访问,如果没有该SOA,整个second.com域将被破坏--这意味着指向subdomain.first.com的CNAME记录实际上是无效的。
此外,如果subdomain.first.com不是其自己区域的顶点,而只是较高级别区域中的子域,那么它就没有自己的SOA记录:按照CNAME映射将意味着second.com's SOA记录的请求必须以“绝对不存在这样的记录”来回答。但是,如果second.com区域没有SOA记录,那么这个区域就不存在。
同样,当请求second.com的NS记录时,CNAME将要求使用subdomain.first.com的NS记录进行响应。但是subdomain.first.com的名称服务器根本不需要知道关于second.com的任何信息。
为了防止出现这种自相矛盾的情况,RFC 1034第3.6.2节规定:
如果节点上存在CNAME RR,则不应出现其他数据;这将确保规范名称及其别名的数据不会有所不同。此规则还确保可以使用缓存的CNAME,而无需向权威服务器检查其他RR类型。
(请注意,RFC 1034在约定日期之前就使用了应该、必须和可能严格按照需求级别如RFC 2119所定义的那样一词。虽然它说“不应该有其他数据”,但这是一个要求,而不是一个建议,因为DNS缓存的正确性取决于它。)
此规则使CNAME记录不可能驻留在区域的顶点,因为SOA和NS记录必须位于区域的顶点才能有意义地存在,任何CNAME记录连同它们一起都将违反此规则。
有关更多详细信息,请参见:https://www.isc.org/blogs/cname-at-the-apex-of-a-zone/
@ IN CNAME subdomain.first.com.
www IN CNAME @另外,将CNAME记录指向另一个CNAME记录是低效和糟糕的风格,尽管它在技术上是有效的。您应该始终直接使用链尾的规范名称:
@ IN CNAME subdomain.first.com.
www IN CNAME subdomain.first.com.https://unix.stackexchange.com/questions/701917
复制相似问题