是否允许 CNAME 到 CNAME 链?

Eri*_*und 81 domain-name-system cname-record

DNS 中是否允许拥有指向另一个 CNAME 记录的 CNAME 记录?

我们需要它的原因是我们有一个主机名,我们希望在我们的网络服务器计算机的 IP 地址中查找它。我们还有另一台备用的网络服务器计算机,可以在第一台计算机死亡的情况下激活它。在这种情况下,我们很快就需要将主机名指向备用 Web 服务器计算机的 IP 地址。

不幸的是,主机名驻留在 DNS 域中,由于依赖于其他系统管理员的手动操作,任何更改都需要很长时间。但是我们有另一个 DNS 域,我们可以在其中快速执行更改。拥有 CNAME 到 CNAME 链似乎是一个可能的解决方案。但允许吗?网络浏览器会理解它吗?

Paw*_*cki 92

来自RFC 1034 - 域名 - 概念和设施

RR 中指向另一个名称的域名应始终指向主名称而不是别名。这避免了访问信息时的额外间接访问。例如,为上述主机命名 RR 的地址应该是:

52.0.0.10.IN-ADDR.ARPA  IN      PTR     C.ISI.EDU
Run Code Online (Sandbox Code Playgroud)

而不是指向 USC-ISIC.ARPA。当然,根据健壮性原则,域软件在出现 CNAME 链或循环时不应失败;应遵循 CNAME 链,并将 CNAME 循环作为错误发出信号。

所以是的,这是允许的,并且正确编写的软件可以处理它。然而,CNAME 链不被认为是良好的做法,并且会对基础设施造成开销。

  • 虽然我一直都这样做,但上面的引用是断章取义的。就在这一段的上方,它读到...... `RRs 中指向另一个名称的域名应该始终指向主名称而不是别名。这避免了访问信息时的额外间接访问。` (16认同)
  • [Microsoft Azure 网络专家](https://www.youtube.com/watch?v=40MONHHF2BU) 提到,CNAME 链接对于为他们进行 AnyCast 负载平衡很重要。 (4认同)
  • +1 为 RFC 参考 (3认同)

Aro*_*eel 30

当然,这是可能的。

但通常不鼓励这样做,原因很明显,它使用了更多的 DNS 资源。例如:

foo   IN      CNAME  someserver.somehost.com.
bar   IN      CNAME  foo
Run Code Online (Sandbox Code Playgroud)

查询 'bar' 将导致 CNAMEfoo被查询,然后someserver.somehost.com.被查询,从而产生一个额外的查询。

对于您将添加的链中的每个元素,都需要另一个查询。

不鼓励这样做的另一个原因是,通过创建这样的链,您以某种方式创建CNAME 循环的机会会增加;这些应该被当前的 DNS 服务器自动检测到,但仍然会给服务器带来很大的负载。


Mik*_*ott 6

是的,它被允许并且会起作用,但它不被认为是好的做法。多次查找使用更多资源,并且存在意外创建循环的风险。