把 DNS 域的 @ 配置成 CNAME 的一个坑

如果你在一个域里面( 比如 test.com. )同时配置下面两条记录:

@ CNAME 默认(或其他线路) www.test.com.
@ MX         默认(或其他线路) 「记录值」.

那么 向 test.com. 域发邮件可能失败,原因是:

CNAME 其实只是一个别名,DNS 服务器在收到常规 DNS 记录 (非 CNAME )请求的时候会检查是否已经有对应的 CNAME 记录,如果有就重新启动对 CNAME 值的查询并返回,如果显示指定查询的就是 CNAME 记录,则直接返回。

所以,即使在配了 CNAME 之后又配置了 A、MX 等记录,也没用,因为 CNAME 优先级高。

 

记住,「请不要对 @ 设置 CNAME 记录」。

 

RFC 的说明如下:

When a DNS resolver encounters a CNAME record while looking for a regular resource record, it will restart the query using the canonical name instead of the original name. (If the resolver is specifically told to look for CNAME records, the canonical name (right-hand side) is returned, rather than restarting the query.)

An alias defined in a CNAME record must have no other resource records of other types (MX, A, etc.). (RFC 1034 section 3.6.2, RFC 1912 section 2.4) The exception is when DNSSEC is being used, in which case there can be DNSSEC related records such as RRSIG, NSEC, etc. (RFC 2181 section 10.1)

 

参考

http://blog.clanzx.net/2013/09/02/dns-cname.html

 

update at Sat Jul 18 10:13:15 CST 2015

增加一点,AWS 的 route53 可以通过 alias 实现对 @ 增加 CNAME 记录,但只限于 LB 和 S3 等服务,具体请看  http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/ResourceRecordTypes.html

http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-choosing-alias-non-alias.html

0FA5B5CB-62E7-4441-AE4C-95D729B51EAC

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注