资讯>产品动态>如何解决CNAME和MX不能共存的问题?CloudDNS来支招

如何解决CNAME和MX不能共存的问题?CloudDNS来支招

全速云2017-05-25阅读量:2546点赞数:0

背景

当前很多网站,不管是大的网站,还是个人站长,都有使用到CDN,大部分加速服务提供的都是CNAME模式;与此同时,MX企业邮件记录也必须配置到同一个节点下。由于很多系统在域名配置管理时并没有做记录的互斥限制,当客户同时配置cnamemx时,会出现mx记录解析异常的问题。

原因分析

根据RFC 1034 3.6.2

If a CNAME RR is present at a node, no other data should be present; this ensures that the data for a canonical name and its aliases cannot be different. This rule also insures that a cached CNAME can be used without checking with an authoritative server for other RR types.

不想看英文?没关系,我大概解释一下:如果CNAME资源记录出现在一个域名节点,为了确保不会出现不同的解析结果,这个域名节点将不再接受其他记录值。

我们做一下测试,在CloudDNS的基础套餐上同事配置了cnamemx记录:


我们分别dig一下;

dig域名:


mx记录dig:


我们可以看到MX记录查询的结果其CNAME记录值所配置的值,当我们在递归服务器的CNAME记录TTL过期后再来做查询,则有可能得到期望的正确结果。

因此,即使某些域名解析系统网页上并未限制用户同时填写CNAMEMX的操作,但只要将CNAMEMX配置到一起,会导致邮件服务偶尔出现异常。

实际上除了CNAMEMX不能共存外,已经注册了CNAME类型的域名记录是不能再注册除DNSSEC相关类型记录(RRSIGNSEC等)之外的任何其他类型记录(包括MXTXTANS等记录)。

解决方案

我们CloudDNS提供了此类问题的解决方案,即在遵循dns协议的基础上,新增了一层代理的服务器。

外部公网 DNS DNS 代理请求一个域名时, DNS 代理先查找本地的缓存应答,在没有缓存应答时,向源授权器转发请求,得到响应后再回复请求,同时缓存得到的响应信息;若本地已有缓存应答,则直接对外回复请求。

在我们使用CDN加速时,大多数都是对域名解析记录配置 CNAME,别名到另一个平台的域名,DNS 代理可以直接代替公网 DNS CNAME 后的解析,将最终结果返回给公网,减少了 CNAME解析,不但提高了解析速度,也实现cname记录和mx记录的共存(具体原理如下图所示)。



我们使用上述方案重新配置后,分别再对域名和mx记录做dig查询,得到结果如下,从结果上看,已经可以很好解决MXCNAME共存的问题;

域名查询结果,隐藏了cname,直接给a记录:



mx记录查询结果:

总体而言,此方案优势之处有以下两点:

1、解决cname记录和其它记录(包括MXTXTANS等记录)共存的问题;

2、减少cname,降低解析时间。

结语

通过DNS代理的方案,我们可以很好实现CNAME记录与其他记录共存问题,也大大提高了解析速度。当然,这个仅仅是我们致力解决用户各种关于DNS使用场景问题的其中一个,您若需要提升解析速度,保证解析安全以及实现CNAMEMX记录共存等,相信CloudDNS提供的方案会使您不错的选择。


全球1000+节点
实时网络监控
稳定的云服务
超强后备资源