MX记录和CNAME记录冲突怎么办

很多朋友在部署域名邮箱的时候都会发现,DNS服务商会提示根域名MX记录和CNAME记录有冲突,不能共存。今天,我就来介绍一下这种情况为什么会发生,且如何完美解决。

本文作者为香菇肥牛,原文链接为https://qing.su/article/mx-records-conflict-with-cname.html, 如需转载请注明原文链接。谢谢大家!

 

1, CNAME和MX记录冲突的成因

CNAME记录和MX记录冲突的根本原因在于CNAME (Canonical NAME)记录的特殊性。根据RFC 1034的规定,根域名不能设置CNAME记录,这是由DNS服务本身的固有限制决定的。或许你可以在一些DNS服务商那里为根域名添加CNAME记录,但这些都是不符合DNS规范的。如果要将根域名设置为另一个域名的别名,需要设置ALIAS记录。在下一节我将具体介绍ALIAS记录。

如果根域名设置了CNAME记录,会和其他所有的记录相冲突,而最常见的冲突情形就是MX记录。对于同一个根域名,CNAME记录和A记录、NS记录、SOA记录、TXT记录等都会冲突,不过这些情形并不常见,所以一般不会造成太大的问题。

我们以同时在根域名设置CNAME记录和MX记录为例。向该域名的域名邮箱发信且使用DNS寻址时,如果先寻到了CNAME记录,就无法再获取到该域名对应的MX记录。这就会导致使用该域名搭建的域名邮箱在收件时会经常丢信漏信。同时,CNAME记录不仅与MX记录冲突,也会与TXT记录冲突,这就会导致为根域名设置的SPF-TXT记录无法生效,因此发信时更容易进垃圾箱。

那么问题来了,如果我们要为网站开启CDN, 那么最常见的方式就是使用CNAME接入。如果还需要一并使用域名邮箱,那么就不得不造成CNAME记录和MX记录的冲突。有什么好办法呢?这里我们有三个办法,可以解决这个问题。

 

2, 如何解决CNAME和MX记录冲突

解决CNAME和MX记录的冲突有三种可行的办法,分别是 (1) 使用www.域名接入CDN; (2) 使用A记录轮询接入CDN; (3) 使用ALIAS (CNAME Flattening) 记录代替CNAME记录。接下来我将具体介绍这三种方法。

(1) 使用www.域名接入CDN

大家都知道,一般来说为根域名设置CNAME记录的情况都是由于网站需要接入CDN.  如果您可以接受网站采用www.example.com这样的网址而不是example.com,那么您完全可以使用www.example.com域名接入CDN.  由于www.example.com不是根域名了,因此它的CNAME记录不会和根域名的MX记录冲突,这样就解决了网站的CDN接入与域名邮箱共存的问题。

这种方法的有点在于最为简单,但缺点是必须使用www.形式的域名。

(2) 使用A记录接入CDN

如果您无法接受网站采用www.域名,那么您也可以将根域名采用A记录的方式接入CDN.  使用A记录时,您还可以自行设定线路,或者设置轮询。根域名的A记录不会和MX记录冲突,这样就解决了网站的CDN接入与域名邮箱共存的问题。

一般来说,这种情况比较适用于网站使用自行搭建的CDN系统,因为商用CDN系统的IP地址有时会发生变动,造成A记录解析失效。

(3) 使用ALIAS (CNAME Flattening) 记录代替CNAME记录

使用ALIAS记录代替CNAME记录是目前国际上最主流的设置办法了,它能起到与CNAME记录完全一样的效果,又不会和其他记录产生冲突。

这里我们先介绍一下ALIAS记录。ALIAS记录,又称CNAME Flattening记录,中文为“别名”记录,是一种CNAME记录的替代型记录。它能够起到和CNAME记录完全一样的效果,即将一个域名设置为另一个域名的别名,而唯一的差别就是ALIAS记录不会与其他记录发生冲突

因此,我们只需要在DNS服务商那里为根域名设置ALIAS或者CNAME Flattening记录就可以了,它的设置方法与CNAME记录完全相同。通过设置ALIAS记录,我们就能够完美解决网站根域名的CDN接入与域名邮箱共存问题。如果您的DNS服务商目前不支持ALIAS记录,您可以使用市面上很多免费的DNS服务,比如Cloudflare, he.net, dnsimple.com, Route53 (这个不免费), cloudns.net, 等等。这些DNS服务商都支持设置ALIAS记录。大部分国际域名注册商,比如Godaddy, Porkbun, Namesilo, Namecheap, Gandi, Google Domains等等,也都支持设置ALIAS记录。

 

综上所述,CNAME记录具有特殊性,会和同域名下的所有其他记录发生冲突,导致无法同时配置根域名的CDN和MX域名邮箱。有三种方法可以解决CNAME记录与MX记录的冲突,分别是 (1) 使用www.域名接入CDN; (2) 使用A记录轮询接入CDN; (3) 使用ALIAS (CNAME Flattening) 记录代替CNAME记录。我们推荐您使用一个支持ALIAS记录的DNS服务商,然后为您的根域名设置ALIAS记录,就可以完美解决这个问题。

本文作者为香菇肥牛,原文链接为https://qing.su/article/mx-records-conflict-with-cname.html, 如需转载请注明原文链接。谢谢大家!

17 thoughts on “MX记录和CNAME记录冲突怎么办”

  1. What’s up to all, how is everything, I think every one is getting more from this
    web site, and your views are pleasant in support of new viewers.
    asmr 0mniartist

    Reply
  2. Hi there everyone, it’s my first visit at this site, and article is really fruitful for me, keep up posting these types of articles.

    Reply
  3. Hello! This post couldn’t be written any better!
    Reading this post reminds me of my old room mate! He always kept talking about this.

    I will forward this article to him. Pretty sure he will have a good
    read. Thanks for sharing!

    Reply
  4. Hello! Would you mind if I share your blog with my facebook group?
    There’s a lot of folks that I think would really enjoy your content.
    Please let me know. Many thanks

    Reply
  5. What’s up i am kavin, its my first time to commenting anyplace,
    when i read this post i thought i could also make comment
    due to this sensible article.

    Reply

Leave a Comment