为什么 CNAME 不能与其他具有相同名称的记录共存?

为什么 CNAME 不能与其他具有相同名称的记录共存?

我读过各种博客,说 CNAME 不能与具有与 CNAME 记录相同名称的其他记录共存。

我还没有找到一个很好的例子来解释这个问题。

以下是博客中的一个例子:

CNAME 记录不能与具有相同 FQDN 的其他记录共存,因为它们会有效地覆盖具有相同 FQDN 的所有其他记录。

例如,CNAME 记录 FQDN 为 example.com,而您想要创建 A 记录 FQDN example.com。这是不允许的,因为 A 记录 FQDN 与 CNAME 记录 FQDN 相同,导致 A 记录毫无意义。

我觉得这个例子不够清楚,无法让我理解这个问题。

我试图理解这个解释的含义。

假设我已经配置了:

域名 生存时间 班级 记录类型 价值
别名.example.com 300 别名记录 名称.example.com
名称.example.com 300 A 10.0.0.1

在这样的配置下会发生什么?

编辑:我坚持答案的正确性,即我上述的例子是正确/有效的。

下面放置了一个不正确/无效的配置。上述示例源自我对缺少表格说明的文本示例的错误理解。

域名 生存时间 班级 记录类型 价值
名称.example.com 300 别名记录 其他名称.example.com
名称.example.com 300 A 10.0.0.1

我的理解是后一种配置无效,因为根据 RFC,首先使用 CNAME,而从未使用 A 记录。

我对后一个表格不正确的原因的判断正确吗?

或者一般来说,后一种配置的情况下会发生什么情况?

答案1

您的最后一个例子是无效的,不是因为“某物首先被使用”。它无效是因为它违反了 逻辑CNAME 后面。

我所说的逻辑是 CNAME 将名称定义为别名一些其他的名字,然后被称为正典名称,“cname” 是其缩写。记录的alias CNAME canonical-name字面意思是:“别名是另一种形式规范名称“。这很像说:“鲍勃是罗伯特的另一种形式”。荒谬的是补充说:“还有别名是别的东西”,至少在计算上是没有意义的。它不适合数据模型,因此 RFC 明确禁止它。

同样的道理也适用于区域顶点的 CNAME:顶点必须定义至少两个记录,SOA 和 NS,这已经与 CNAME 必须单独出现的要求相冲突。(最初,我打算投票关闭这个问题,因为它是链接问题的重复,因为那个答案实际上也回答了这个问题;然而,这似乎是另一个更广泛的问题,从相反的方向来做会更有意义。)

引入 DNSSEC 时,此规则进行了更新。签名记录必须与 CNAME 一起出现,以证明其在签名区域中的有效性。但其他任何记录都不能。(RFC 2181 说“可以”,但如果不在签名区域中签名,记录实际上就无法工作。)

答案2

CNAME 不能与其他记录类型共存与此有关:

域名 生存时间 班级 记录类型 价值
主机.example.com 300 别名记录 fqdn.example.com
主机.example.com 300 A 192.0.2.1

不是您描述的场景。它无效的原因似乎有些武断,但我相信这是 RFC 的要求。

您描述的场景非常有效 - 并且被广泛使用。例如

域名 生存时间 班级 记录类型 价值
service1.example.com 300 别名记录 reverseproxy.example.com
service2.example.com 300 别名记录 reverseproxy.example.com
service3.example.com 300 别名记录 reverseproxy.example.com
reverseproxy.example.com 300 A 192.0.2.1

答案3

您的例子很有效。

无效的是

域名 生存时间 班级 记录类型 价值
cname.example.com 300 别名记录 foo.example.org
cname.example.com 300 A 192.0.2.1

相关内容