为什么一个域的根目录不能成为CNAME?

我刚刚读过这个问题 ,基本上说,当我为example.com设置DNS时,根logging不能是CNAME,它必须是Alogging。

我的问题是,为什么?

我敢肯定,deviseDNS的聪明人没有任何理由不做任何的限制,但是我没有看到我们通过将根域作为Alogging来获得什么。 我很乐意将我的example.com域指向someserver.somewebhost.example,忘记它,但我不能。

请赐教,billpg。

首先,其根本原因不是你必须使用Alogging,而是你不能使用CNAMElogging,因为这些logging不能与其他普通的资源loggingtypes共存。

该限制的原因在RFC 1034的第3.6.2节中:

如果CNAME RR存在于一个节点上,则不应该存在其他数据。 这确保了规范名称和别名的数据不能不同。 此规则还确保可以使用caching的CNAME,而无需与其他RRtypes的授权服务器进行检查。

作为(委托)域的根必须有一个SOA,NSlogging上面的规则,防止使用CNAME。

那么这不是一个域的根不能成为一个CNAME – 这是一个CNAME不能与同一个域的其他loggingtypes共存。

简而言之,使用CNAME的域具有任何其他loggingtypes是没有意义的,因为CNAME将确保它们永远不会被看到或读取。

比方说,我们尝试给example.net一个CNAME (指向host.example.com)和一个Alogging(指向其他IP地址)。

  1. 首先,客户端将从example.net的域名服务器请求example.netAlogging。

  2. example.net的名称服务器会通知我们,我们需要按照CNAMElogging才能继续。 所以我们做 CNAME指向host.example.com

  3. 客户端将从host.example.com的域名服务器请求一条Alogging。

请注意,我们从来没有机会从example.net读取Alogging或任何其他loggingtypes? CNAME优先。