如何从主区域引用另一个 DNS 条目 (BIND 9)

如何从主区域引用另一个 DNS 条目 (BIND 9)

我有两个子区域可以说:

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

那可能吗?

答案1

一条CNAME记录指定了该名称左边记录的一侧CNAME是名称的别名正确的边 -适用于所有类型的 DNS 记录,不仅仅是为了A记录。粗体部分是导致此处问题的原因,因为“所有记录类型”还包括区域SOANS记录。

您正在尝试使用CNAME位于该区域顶部的记录second.com,该SOA记录也位于该区域的顶部。因此,以完全限定的形式编写,您的第一个CNAME内容是:

second.com.  IN CNAME subdomain.first.com.

因此,当请求 的 SOA 记录时,应该返回second.com的 SOA 记录。subdomain.first.com但是,真正的 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 节说

如果节点上存在 CNAME RR,则不应存在其他数据;这确保规范名称及其别名的数据不能不同。此规则还确保可以使用缓存的 CNAME,而无需与权威服务器检查其他 RR 类型。

(请注意,RFC 1034 早于使用词语的约定应该,必须可能严格按照要求等级,按照 RFC 2119 中的定义。虽然它说“没有其他数据应该存在”,这是一个要求,而不是建议,因为 DNS 缓存的正确性取决于它。)

此规则使得CNAME记录不可能存在于区域的顶点,因为SOANS记录需要位于顶点才能使区域有意义地存在,并且任何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.

相关内容