我读过各种博客,指出 CNAME 不能与与 CNAME 记录同名的其他记录共存。
我还没有找到一个很好的例子来解释这个问题。
这是博客中的示例:
CNAME 记录不能与具有相同 FQDN 的其他记录共存,因为它们实际上会覆盖具有相同 FQDN 的所有其他记录。
例如,CNAME 记录的 FQDN 是 example.com,而您想要创建 A 记录 FQDN example.com。这是不允许的,因为 A 记录 FQDN 与 CNAME 记录 FQDN 相同,从而导致 A 记录毫无用途。
我发现这个例子不够清晰,无法让我理解这个问题。
我试图理解这个解释的意思。
想象一下我已经配置了:
域名 | TTL | 班级 | 记录类型 | 价值 |
---|---|---|---|---|
别名.example.com | 300 | 在 | 别名记录 | name.example.com |
name.example.com | 300 | 在 | A | 10.0.0.1 |
在这样的配置中会发生什么?
编辑:我的答案纠正了我上面的例子是正确/有效的。
下面放置不正确/无效的配置。上面的例子来自我对缺乏表格插图的文本示例的错误理解。
域名 | TTL | 班级 | 记录类型 | 价值 |
---|---|---|---|---|
name.example.com | 300 | 在 | 别名记录 | othername.example.com |
name.example.com | 300 | 在 | A | 10.0.0.1 |
我的理解是,后一种配置是无效的,因为根据 RFC,首先使用 CNAME 并且从不使用 A 记录。
我对后一个表不正确的原因是否正确?
或者一般来说,在后一种配置的情况下会发生什么?
CNAME 不能与其他记录类型共存与此相关:
不是你描述的场景。它无效的原因似乎有些武断,但我相信这是 RFC 的要求。
您所描述的场景非常有效 - 并且被广泛使用。例如
你的例子是有效的。
无效的是
cname.example.com
foo.example.org
cname.example.com
192.0.2.1
你的最后一个例子是无效的,不是因为“先使用某些东西”。它是无效的,因为它违反了 CNAME 背后的逻辑。
我所说的逻辑是 CNAME 将名称定义为其他名称的别名,然后将其称为规范名称,“cname”是其缩写。该记录
alias CNAME canonical-name
字面意思是:“别名是规范名称的另一种形式”。这很像说:“鲍勃是罗伯特的另一种形式”。添加“别名也是别的东西”是荒谬的,至少在计算中它没有意义。它不适合数据模型,因此 RFC 明确禁止它。同样的推理也适用于区域顶点的 CNAME:顶点必须定义至少两条记录:SOA 和 NS,这已经与 CNAME 必须单独出现的要求相冲突。(最初我想投票赞成将这个问题作为链接问题的重复项来关闭,因为该答案也确实回答了这个问题;但是,这似乎是另一个更广泛的问题,并且这样做更有意义其方向相反。)
引入 DNSSEC 后,此规则进行了更新。签名记录必须与 CNAME 一起出现,以证明其在签名区域中的有效性。但没有其他记录可以。(RFC 2181 说“可以”,但如果不在签名区域中签名,记录将无法真正工作。)