申请域名用作网站访问添加了 CNAME 主机记录以后,又想添加邮箱的 MX 的主机记录,或者想添加 CDN 的 CNAME 记录,这时候经常会遇到主机记录冲突的问题导致添加失败。接下来我们详细分析一下。
原因分析
根据国际上互联网标准 RFC 1034 章节3.6.2中指出:
If aCNAME RR is present at a node, no other data should be present; this ensuresthat the data for a canonical name and its aliases cannot be different.
大意就是说如果CNAME资源记录出现在一个域名节点,为了确保不会出现不同的解析结果,这个域名节点将不再接受其他记录值。
所以一些记录的冲突会导致主机记录值无法正常添加,究竟哪些不能冲突,可以查看阿里的这篇文章 。
知道了原因,我们就可以尝试来解决问题了,经过试验发现,解决域名的解析记录冲突有三种方法,分别是:
- 删除其中的一条解析记录
- 使用跳转的方式进行解析
- 使用二级域名进行解析
删除其中的一条解析记录
既然发生冲突了,那么最简单的方式就是二选一,保留一条,删除一条,这样就可以恢复正常。
如果实在不愿意删除,那么可以尝试把其中一条 CNAME 的解析记录更换为 A 记录,指定到一个 IP 地址上。这样会有一个隐患发生,那就是当 IP 地址更换了以后,你的解析会中断,需要手动变更 A 记录才能恢复。不是很推荐这种方法。
使用隐式CNAME进行解析
在不同的域名服务商可能有不同的叫法,比如阿里云叫 显示/隐式 URL,CloudXNS的叫做 LINK 记录。思路就是给其中的一条解析起一个名字,然后将这条解析通过 LINK 或者 URL 的方式去解析。大致操作方法如下:
记录类型 | 主机记录 | 记录值 |
---|---|---|
MX | @ | qiye.aliyun.com |
LINK | @ | www.test.com |
CNAME | www | xxx.github.io |
使用二级域名进行解析
在分析的时候也说到了,一个域名节点只能有一个 CNAME 的解析记录,那么就可以启用二级域名,这样就不是同一个域名节点了。
而且可以不同的二级域名可以对应不同的功能服务,比如用 mail.xxx.com 来解析邮箱,用 blog.xxx.com 来映射博客访问,做好二级域名的规划,完全不用担心解析记录的冲突。
大致操作方法如下:
记录类型 | 主机记录 | 记录值 |
---|---|---|
MX | mx1.qiye.aliyun.com | |
CNAME | smtp.mail | smtp.qiye.aliyun.com |
CNAME | imap.mail | imap.qiye.aliyun.com |
CNAME | pop3.mail | pop.qiye.aliyun.com |
CNAME | mail.mail | qiye.aliyun.com |
CNAME | blog | xxx.github.io |
这样就把 blog.xxx.com 解析到了 github pages,把 mail.xxx.com 解析到了邮箱。
阿里云的邮箱详细解析见这里 。
个人比较推荐第三种方法,规划好二级域名,用二级域名来做各种功能的解析,这样可以发挥一个域名最大的作用。
也来谈谈关于 CNAME 和 MX 冲突的一些事 这篇博客也对冲突进行了一些分析,也可以参考一下
参考链接:
- https://help.aliyun.com/knowledge_detail/39787.html ,by Aliyun
- https://help.aliyun.com/knowledge_detail/36723.html ,by Aliyun
- http://tools.ietf.org/pdf/rfc1034 ,by P. Mockapetris
======================
Erdong, A Linux user !