pre-post()
因为我自己搞了一个域名邮箱,用的腾讯企业邮箱,之前为了上国内CDN从Cloudflare
迁移出来换成 Cloudflare Partner
,用 DNSPOD
实现 GEODNS
,国内用 百度CDN
,国外用 Cloudflare
,通过 CNAME
解析指向,但是后面发现一个问题就是域名邮箱突然无法正常收发邮件了,网上通过谷歌和其他博主的博文得知这是DNS的特性导致的(参考5),如果想要解决就只能A+MX
的共存方式,但是显然这种方式对我来说弊端很多,另一种方案就是将网站解析到www
子域名,把@
腾出来给MX
,或者将域名邮箱解析到 mail
子域名,虽然对大部分人来说可行,但是对我有点强迫症,我就想用@
,毕竟chrome都模糊化www
和@
了,自然是@
更适合一点,接下来的方法就是我自己瞎鼓捣出来的,但是又没有查询相关资料证明100%不会出问题,但到目前来看还是很稳的,也不确定放到其他DNS服务商以及其他CDN服务商是否同样有效。
subject(‘实现目标’)
能够使用 DNSPOD
使 pwecho.com
支持境内境外不同CDN服务 Cloudflare
和 BaiduCDN
,同时兼容 腾讯企业邮箱
subject(‘当前配置’)
Cloudflare Partner
Name |
Type |
Record |
Remark |
@ |
CNAME |
s-ip.pwecho.com |
网站服务器 |
使用 s-ip.pwecho.com
方便更改IP,CDN需要CNAME指向 s-ip.pwecho.com
DNSPOD
Name |
Type |
Record |
Region |
Remark |
s-ip |
A |
x.x.x.x |
网站服务器源站IP |
|
@ |
MX |
mx1.qq.com |
默认 |
腾讯企业邮箱 |
@ |
MX |
mx2.qq.com |
默认 |
腾讯企业邮箱 |
@ |
CNAME |
pwecho.com.cdn.cloudflare.com |
境外 |
Cloudflare |
@ |
CNAME |
pwecho.com.a.bdydns.com |
境内 |
BaiduCDN |
虽然 DNSPOD
支持MX和CNAME同时记录,会提示可能会产生不兼容问题,但可以忽略,实际测试会出现无法正常返回MX的情况
subject(‘解决方案’)
目前的解决方案是,单独剥离一个CNAME,境外让 Cloudflare
负责提供MX和A记录,境内让 DNSPOD
提供,以下是修改方案
Cloudflare Partner
Name |
Type |
Record |
Remark |
@ |
CNAME |
s-ip.pwecho.com |
网站服务器 |
@ |
MX |
mx1.qq.com |
腾讯企业邮箱 |
@ |
MX |
mx2.qq.com |
腾讯企业邮箱 |
DNSPOD
Name |
Type |
Record |
Region |
Remark |
s-ip |
A |
x.x.x.x |
网站服务器源站IP |
|
root.cn-bd-cdn |
CNAME |
pwecho.com.a.bdydns.com |
默认 |
BaiduCDN |
root.cn-bd-cdn |
MX |
mx1.qq.com |
默认 |
腾讯企业邮箱 |
root.cn-bd-cdn |
MX |
mx2.qq.com |
默认 |
腾讯企业邮箱 |
@ |
CNAME |
pwecho.com.cdn.cloudflare.com |
境外 |
Cloudflare |
@ |
CNAME |
root.cn-bd-cdn.pwecho.com |
境内 |
|
通过以上配置查询DNS记录即可得出结果
中国地区
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| $ dig MX pwecho.com
; <<>> DiG 9.14.8 <<>> MX pwecho.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11135 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;pwecho.com. IN MX
;; ANSWER SECTION: pwecho.com. 597 IN CNAME root.cn-bd-cdn.pwecho.com. root.cn-bd-cdn.pwecho.com. 597 IN MX 5 mxbiz1.qq.com. root.cn-bd-cdn.pwecho.com. 597 IN MX 10 mxbiz2.qq.com.
;; Query time: 10 msec ;; SERVER: 192.168.50.1#53(192.168.50.1) ;; WHEN: Sat Feb 27 14:11:41 ;; MSG SIZE rcvd: 117
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| $ dig CNAME pwecho.com
; <<>> DiG 9.14.8 <<>> CNAME pwecho.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63349 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION: ;pwecho.com. IN CNAME
;; ANSWER SECTION: pwecho.com. 563 IN CNAME root.cn-bd-cdn.pwecho.com.
;; Query time: 76 msec ;; SERVER: 192.168.50.1#53(192.168.50.1) ;; WHEN: Sat Feb 27 14:12:10 ;; MSG SIZE rcvd: 57
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| $ dig A pwecho.com
; <<>> DiG 9.14.8 <<>> A pwecho.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12359 ;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;pwecho.com. IN A
;; ANSWER SECTION: pwecho.com. 37 IN CNAME root.cn-bd-cdn.pwecho.com. root.cn-bd-cdn.pwecho.com. 37 IN CNAME pwecho.com.a.bdydns.com. pwecho.com.a.bdydns.com. 37 IN CNAME opencdncloud.jomodns.com. opencdncloud.jomodns.com. 37 IN A 101.72.249.35
;; Query time: 9 msec ;; SERVER: 192.168.50.1#53(192.168.50.1) ;; WHEN: Sat Feb 27 14:15:33 ;; MSG SIZE rcvd: 153
|
境外地区
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| $ dig MX pwecho.com
; <<>> DiG 9.16.1-Ubuntu <<>> MX pwecho.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48915 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;pwecho.com. IN MX
;; ANSWER SECTION: pwecho.com. 600 IN MX 10 mxbiz2.qq.com. pwecho.com. 600 IN MX 5 mxbiz1.qq.com.
;; Query time: 276 msec ;; SERVER: 1.1.1.1#53(1.1.1.1) ;; WHEN: Sat Feb 27 07:14:54 CET 2021 ;; MSG SIZE rcvd: 88
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| $ dig CNAME pwecho.com
; <<>> DiG 9.16.1-Ubuntu <<>> CNAME pwecho.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55778 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;pwecho.com. IN CNAME
;; ANSWER SECTION: pwecho.com. 600 IN CNAME pwecho.com.cdn.cloudflare.net.
;; Query time: 276 msec ;; SERVER: 1.1.1.1#53(1.1.1.1) ;; WHEN: Sat Feb 27 07:14:43 CET 2021 ;; MSG SIZE rcvd: 82
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| $ dig A pwecho.com
; <<>> DiG 9.16.1-Ubuntu <<>> A pwecho.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35366 ;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;pwecho.com. IN A
;; ANSWER SECTION: pwecho.com. 600 IN CNAME pwecho.com.cdn.cloudflare.net. pwecho.com.cdn.cloudflare.net. 300 IN A 104.26.6.173 pwecho.com.cdn.cloudflare.net. 300 IN A 104.26.7.173 pwecho.com.cdn.cloudflare.net. 300 IN A 172.67.69.29
;; Query time: 280 msec ;; SERVER: 1.1.1.1#53(1.1.1.1) ;; WHEN: Sat Feb 27 07:17:11 CET 2021 ;; MSG SIZE rcvd: 130
|
从上面结果可以看出,pwecho.com.cdn.cloudflare.net
本身返回的就是 A
记录,而它做的只是将你的 MX
记录也加到他的 CNAME
域名解析中,所以完全没有问题,而 DNSPOD
虽然还是返回 CNAME
来解析 A
记录,但是实测多次并没有发现出现查询 MX
, CNAME
混乱返回的情况, 但同样我也尚未能提供资料证明不会出现这个问题。
⚠️ 补充测试结果: 通过 https://www.boce.com/dns/ 测试发现全国查询的时候会有部分地区随机返回 CNAME
记录,所以这个方法还是不稳定,Cloudflare
那种实现对境外邮箱来说则完全没有问题
其实这里还有个发现,即便是国内的 QQ邮箱
, 腾讯企业邮箱
, 163邮箱
或者是国外的 Gmail
, Outlook
都会查询出境外的MX记录,即便境内没设置MX记录也可,所以如果不放心其实可以直接干掉境内的MX记录,只让 Cloudflare
返回 MX
记录也可以稳定运作 (不打包票,境内还有很多邮箱没有做测试
参考资料
- 域名解析的 MX 和 CNAME 记录冲突 - 谢先斌的博客
- 解析记录冲突规则 - 阿里云文档
- 三种方法解决域名解析的主机记录冲突 - Erdong’ Blog
- 域名 MX 记录与 CNAME 冲突 - 老鬼的博客
- RCF 1034 - 下载PDF文件
- DNS using CNAMEs breaks MX records? - StackExchange