CNAME 和 MX 共存的解决方案?

2016-07-25 20:46:59 +08:00
 hqfzone

大家都知道裸域如果设置了 CNAME , MX 就会失效。 那么,能不能解决呢?

前提是用裸域作为主域名

19891 次点击
所在节点    DNS
34 条回复
hqfzone
2016-07-25 20:55:49 +08:00
貌似 cloudxns 提供了一种方法,它说:如果 www.a.com LINK 至 www.b.comwww.b.com 的 A 记录为 3.3.3.3,用户解析 www.a.com 时,结果会显示 www.a.com 的 A 记录为 3.3.3.3(前提是 www.a.comwww.b.com 都在 CloudXNS 系统中解析)
那么,如果 www.b.com 是 cname 到一个不在 cloudxns 解析的域名呢?可以吗?

有没有 cloudxns 的人员,回答一下?​​
ivmm
2016-07-25 20:56:20 +08:00
DesignerSkyline
2016-07-25 20:58:03 +08:00
CloudXNS 不行
CNAME Flattening 支持的有 rage4 cloudflare route53 dnsimple
ZE3kr
2016-07-25 21:00:53 +08:00
需要 DNS 解析商支持 ANAME ,或者 CNAME Flattening 功能,相当于是自动将主域的 CNAME 转化成 A 记录,实测感觉是 CloudFlare 效果最好,即使是原本 CNAME 是分区解析, CloudFlare 也能正确解析上(前提是目标 CNAME 支持 EDNS client subnet )。

我这里有介绍 ANAME : https://ze3kr.com/2016/05/rage4-best-dns/

Rage4 和 CloudFlare 都有支持,其他国外不少解析商也支持,比如 DNSimple 。
hqfzone
2016-07-25 21:05:54 +08:00
@DesignerSkyline
@ZE3kr 看上去, cloudxns 的 LINK 好像就是 CNAME Flattening 啊。那么主流的 CDN 厂商,有哪些支持 EDNS client subnet 呢?比如阿里、腾讯之类的?
abelyao
2016-07-25 21:08:59 +08:00
dnspod 支持裸域 cname 同时 mx 解析,除了这点,现在首选 cloudxns
Kilerd
2016-07-25 21:12:37 +08:00
这是一个很尴尬的问题。 我也想知道 CloudXNS 到底支不支持
Andy1999
2016-07-25 21:13:31 +08:00
alais
Delbert
2016-07-25 21:14:34 +08:00
zoneedit 裸域和 mx 同时解析,九年没出问题。当然, ze 本身几度易主。。。
ZE3kr
2016-07-25 21:15:13 +08:00
CloudXNS 的 LINK 更像是一个 "软连接",需要在两个域名设置完全一样的 A 记录时,在一个域名上设置 A 记录,另一个用 LINK 就能解决,这样每次只需要改一个 A 记录即可。前提是这两个域名都在 CloudXNS 上,如果不是,就会用 CNAME 而不是 LINK ,与 CNAME 就没有区别了。

还有就是只有是目标 CNAME 是分区解析时,才需要 EDNS client subnet ,国内应该有不少支持了,不过有些只是针对个别解析服务器才支持 EDNS client subnet 。

@DesignerSkyline Route53 不支持 CNAME Flattening ,他只能是说把一级(或二级)域名解析到一个他自己的服务上(如 CloudFront , S3 , EC2 …),然后给你直接解析 A 记录而不是 CNAME ,第三方应该是不能的。
ZE3kr
2016-07-25 21:32:29 +08:00
我还是讲一些为什么不能这样做的原因吧:

@abelyao 并不是说 MX 和 CNAME 不能同时在后台设置,但是请参见 RFC1912 section 2.4 ,“ A CNAME record is not allowed to coexist with any other data.”,有些 DNS 解析商为了遵守 RFC1912 就禁止你在根域下设置 CNAME ,不过实际上还是可以这样的,所以一些解析商没有禁止你在根域下设置 CNAME 。

这里有写在根域下设置 CNAME 的一些后果: https://blog.cloudflare.com/introducing-cname-flattening-rfc-compliant-cnames-at-a-domains-root/

Technically, the root could be a CNAME but the RFCs state that once a record has a CNAME it can't have any other entries associated with it: that's a problem for a root record like example.com because it will often have an MX record (so email gets delivered), an NS record (to find out which nameserver handles the zone) and an SOA record.

也就是说设置了 CNAME 后就不能设置其它类型的记录,比如 NS 、 MX ……而你的一级域名已经在根域名下分配了 NS 记录(比如 example.com 已经在 .com 下分配到了 NS 记录 `dig @a.gtld-servers.net example.com ns` 可以看出),所以不该再有一个 CNAME 了。

为什么会这样?因为设置了 CNAME 后所有记录都会 “转发” 到设置的那个域名,比如我 www.ze3kr.com CNAME 到了 ze3kr.com 上,现在查 www.ze3kr.com 的 MX 和 NS 记录,全都是 ze3kr.com 上的记录。



同理,假如你把 example.com CNAME 到了 example.net 上,然后 example.com 上的 MX 、 NS 等等记录都会解析到 example.net 上。最坏的情况还不只是 MX 到了 example.net 上别人能在他的服务器上收发给你域名上的邮件,而是, NS 记录也解析到了 example.net 上,而且 example.net 上正好也设置了 NS 记录,于是你的域名本身就被别人解析走了,不只是邮箱。不过被别人解析走之后,你的 example.com 上可能就解析不到 CNAME 记录了,如此循环,你的域名可能无法再解析……不过应该现在的客户端或者是解析缓存服务器都能避免这种错误了。
lslqtz
2016-07-25 21:41:02 +08:00
@ZE3kr 意思就是直接在另一个域名上做 MX 记录?
abelyao
2016-07-25 21:44:22 +08:00
@ZE3kr 道理都懂,我只是在回答楼主问的如何解决。
Bardon
2016-07-25 22:18:41 +08:00
万网(阿里云)、 dnspod 都支持
Ellison
2016-07-25 22:41:17 +08:00
我用的 dnspod,没有问题
mytsing520
2016-07-25 23:12:32 +08:00
@ZE3kr 你这家是哪家?
geekzu
2016-07-26 00:55:51 +08:00
cloudxns 的 LINK 并不是 CNAME Flattening ,只支持托管在 xns 的域名记录,如果不是托管在自家的记录会自动转化为 cname
roadna
2016-07-26 01:47:27 +08:00
@ZE3kr 感谢!
最近刚好有这样的需求, xxx.com 要 CNAME 到 github pages, 又想绑定 QQ 域名邮箱
Jimuforest
2016-07-26 08:04:30 +08:00
在这都能遇到...
MinonHeart
2016-07-26 09:08:50 +08:00
用子域做邮箱好了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/294863

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX