CNAME 和 MX 共存的解决方案?

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

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

前提是用裸域作为主域名

19911 次点击
所在节点    DNS
34 条回复
a84945345
2016-07-26 09:31:20 +08:00
这里有 CloudXNS 官方介绍为什么 CNAME 和 MX 不能共存的原因:https://www.cloudxns.net/Support/detail/id/130.html



这个是金粉专家团给出的一个解决 CNAME 和 MX 共存的方案: https://www.cloudxns.net/Support/detail/id/792.html
lslqtz
2016-07-26 10:09:42 +08:00
@MinonHeart 这个是不错的建议~,我觉得大部分 @跳转到 www 也是基于这个原因。。
CloudXNS
2016-07-26 10:24:59 +08:00
CloudXNS 的 Link 记录历经了几次改造,现在已经支持避免 CNAME 和 MX 的冲突了,并且支持传递分区解析。

只不过,需要注意以下几点:
1.Link 和被 Link 记录必须同时是 CloudXNS 中的域名,如果不是则退化成 CNAME ;
2.不支持双重 link ,除了第一个,后面的都会退化成 CNAME ;
3.@下配置 Link 记录时,被 Link 记录必须不是 link 记录,否则会造成 @无法解析;
4.@下配置 Link 记录时,不能配置非 CloudXNS 中的域名,否则会造成 @无法解析(不会退化成 CNAME );

另外,由于牛盾在 CloudXNS 系统中原生使用的是 Link 记录(只是不在用户面板显示),所以根据上面的 2 和 3 ,则:@下配置 Link 记录时,被 Link 记录不能是开启牛盾的状态,否则会造成 @无法解析。

感谢大家对 CloudXNS 的关注与支持!
johnjiang85
2016-07-26 10:34:29 +08:00
johnjiang85
2016-07-26 10:54:52 +08:00
cloud flare 可以进行递归查询根上的 CNAME 记录并返回最终的 A 记录,但是我们认为在 DNS 攻击频繁的网络环境中,该功能会严重影响 DNS 的解析性能,目前在 DNSPod 上是不支持去递归查询的。只有当 CNAME 指向的记录能够在 DNSPod 直接解析出 A 记录时,会直接返回 A 记录,不返回 IP 。
johnjiang85
2016-07-26 10:56:21 +08:00
@johnjiang85 最后一句是“不返回 IP ” -> “不返回 CNAME ”
lslqtz
2016-07-26 11:38:34 +08:00
@abelyao 那就把 cloudxns 上需要的部分记录 ns 过去?
dynos01
2016-07-26 11:48:24 +08:00
其实有个办法。。。用一台 vps 跑 crontab ,解析要 cname 到的 ip ,如果发现变动,则利用 dns 服务商的 api 将要设置 cname 的域名的 a 记录变成新的,应该是相当于 cname 了
hqfzone
2016-07-26 17:24:25 +08:00
@abelyao
@ZE3kr
@Bardon
@CloudXNS
@a84945345
@johnjiang85
统一回复及感谢。

首先,我说的共存不仅仅是可以设置,还要保证设置之后, MX 记录没有失效的隐患。
那些说没遇到问题的,可能是因为域名访问量少,邮件发送方所用的 DNS 没有缓存你的 CNAME 记录,一旦有 CNAME 缓存, MX 应该是失效的。( TTL 越小,冲突隐患可能越小)
所以目前看来,至少国内这几家,几乎是不行了,因为大部分 CDN 厂商让你 CNAME 到的域名,都和你现在用的 DNS 不是同一家。

那么终极解决方案,可不可以是 CDN 厂商提供?比如 abc.com 的 MX 记录本来是 abc-mx.com ,但是裸域需要用七牛的 CDN ,七牛提供给你的 CNAME 域名是 abc.qiniudns.com ,同时,允许你提交一个 MX 记录,七牛为你在 abc.qiniudns.com 下添加一条 MX 记录为 abc-mx.com ?这样,就不怕 MX 记录被转向了吧?
hqfzone
2016-07-26 17:25:11 +08:00
@Jimuforest 哈哈,一看头像就认识
CloudXNS
2016-07-26 17:35:15 +08:00
@hqfzone
所以要加速的话,在 CloudXNS 中可以上 A 记录,开牛盾。。
因为 A 和 MX 并不冲突。。
ZE3kr
2016-07-26 17:51:45 +08:00
@hqfzone 你的思路对了, CNAME 会被缓存,所以就算都能设置,也只是从权威服务器上解析的 MX 是对的, DNS 缓存服务器会出问题。不过在 CDN 厂商设置 MX 也不太行,因为 CNAME 还会与 NS 记录冲突,之前也说了,根域名上肯定是要有 NS 记录,不过这不是太大的问题。

最后解决方案有三个:

1. 直接用 CDN 厂商的 DNS (或者是有合作的),比如 CloudFlare 、百度云加速、 Akaimai 、和 CloudFront 配合 Route 53 、 @CloudXNS 配合牛盾,效果最佳。

2. ANANE 方案,解析可能会慢一些,分区解析可能出问题

3. 加 www 前缀,然后主域跳转到 www , www 的上 CDN , CloudXNS 就能在主域设置跳转,缺点就是主域上不了 CDN 。
hqfzone
2016-07-26 18:33:02 +08:00
@ZE3kr NS 的问题应该不会出现吧,至少还没听说过。

看上去第一个方案最好,只是选择自由度就小了很多。加 www 前缀,还是要看域名及个人喜好了。
johnjiang85
2016-07-26 19:43:02 +08:00
@hqfzone 理论上 NS 记录和 CNAME 记录确实是冲突的,但是在实际使用中还没有发现相关的影响解析的 CASE 。
CDN 厂商提供的域名上设置 MX 记录当然是可行的,也是完全符合协议的,但是除非是大客户,不然 CDN 厂商不会支持的。因为每支持一个客户,需要单独分配一套完全独立的 CNAME 解析链,并同步修改调度。

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

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

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

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

© 2021 V2EX