MX记录怎么查:三条命令和输出怎么读
要证明「别人能不能找到你的 MX」,查公共递归 DNS,命令是 nslookup -type=mx 域名 8.8.8.8 或 dig mx 域名 @8.8.8.8。要证明「你有没有提交成功」,得查自己的权威 NS。ANSWER: 0 表示域名存在但没有这类记录,NXDOMAIN 表示域名本身就不存在。输出里那个 TTL 是剩余缓存秒数,不是你填的值。
这一篇只做一件事:把查 MX 记录这件事查明白——用什么查、查出来的东西怎么读。MX 记录怎么设置那篇讲的是填什么;MX 记录多久生效那篇讲的是等多久。三篇各管一段,不重复。
先想清楚要证明什么,再选查法
多数人打开命令行就开始敲,敲完看到一堆输出,还是不知道该信哪个。问题出在没先说清要证明什么。三个问题对应三种查法,答案本来就可能不一样。
| 你想证明的事 | 该查哪里 | 查到的意义 |
|---|---|---|
| 外面的人现在能不能找到我的邮件服务器 | 公共递归 DNS(8.8.8.8、223.5.5.5) | 这是大多数发件方看到的结果,最接近「邮件能不能投进来」 |
| 我到底有没有提交成功 | 自己的权威 NS | 权威上有,剩下的只是等;权威上没有,等多久都没用 |
| 不同地区的人看到的是不是一样 | 多地在线查询工具 | 能暴露分线路解析造成的地区差异 |
三种结果不一致是常态,不是出错。递归 DNS 各自缓存,谁也不跟谁同步。查到三种答案,说明你正处在一个「缓存还没追平」的窗口里,此时唯一能定性的只有权威那一层。
三条命令,输出逐行读
Windows 用 nslookup。不加服务器参数时,它查的是本机配置的 DNS,那可能是路由器,也可能是公司内网服务器,结论最不可靠。要绕过本机,就指定公共 DNS:
nslookup -type=mx abc.com 8.8.8.8
正常输出会长这样:
非权威应答:
abc.com MX preference = 5, mail exchanger = mx1.example.com
abc.com MX preference = 10, mail exchanger = mx2.example.com
三处要看。「非权威应答」这行不是报错,只是说明这份答案来自缓存,不是直接问的权威服务器——看到它不用慌,但也别拿它当最终结论。preference 是优先级,数字小的先投。mail exchanger 是目标主机名,注意它可能带也可能不带结尾的点,含义不同(见下一节)。
Mac 和 Linux 用 dig。输出比 nslookup 长,但信息更全:
dig mx abc.com @8.8.8.8
第一段 status: 是总判定,正常情况下是 NOERROR。ANSWER SECTION 下面才是记录本体,一行四段:域名、TTL、记录类型、优先级、目标主机名。第三段 3600 那个数字是剩余缓存秒数,不是你在后台填的值。同一个域名连查几次,这个数字会往下掉,掉到 0 就重新拉一次。很多人把剩余 TTL 当成配置值截图发出去,客服一看就误判「你刚改过」。
两个参数值得记住。+short 只输出结果,适合粘到工单里;@服务器 指定向谁查,不加就用本机配置。要查权威那一层怎么做三步,生效时间那篇写过,这里只说结果怎么读:权威应答里看不到「非权威」字样,TTL 通常也是完整值而不是剩余值。
结尾那个点别忽略。dig mx abc.com 和 dig mx abc.com. 在多数环境里结果一样,但不是所有环境。带不带点影响的是「这是绝对域名还是一个会被补后缀的名字」,本机配了搜索域时,不带点会被拼成 abc.com.corp.local 这种,查出来当然什么都没有。查不到记录又确信自己配了,先补个点重试。
你查到的和别人查到的不一样,四个原因
- 缓存没到期。最常见。你这边刚改完,递归服务器手上还是旧值,得等它过期。看 TTL 剩余秒数就知道了,那个数在减,说明还在缓存里。
- 域名商开了分线路。默认线路、电信、联通、境外各配一套记录,你从联通网里查到的和从境外节点查到的不一样,两边都没错。这种情况只有把所有线路都改成一致才治本。
- 本机或内网在拦。公司内网 DNS 常把自家域名指到内网服务器,本机 hosts 文件也可能写死过。这类「查出来是内网 IP」的怪结果,八成是这一层干的。
- 查的对象不对。查了
www.abc.com而不是abc.com,MX 一般配在根域名上,查 www 当然没有。或者域名后缀写错,.com写成.cn。
六种返回,对应六种结论
命令跑完不是「有」或「没有」两种结果。这六种情况指向完全不同的下一步,混着看会绕远路。
| 看到什么 | 含义 | 下一步 |
|---|---|---|
status: NOERROR,应答段有 MX | 记录存在且在流通 | 核对优先级与目标主机名是否和服务商给的一致 |
NOERROR 但 ANSWER: 0 | 域名存在,就是没有 MX 这一类记录 | 大概率没提交成功,或提交到了别的线路;转到权威那层确认 |
status: NXDOMAIN | 域名本身不存在 | 先查拼写和后缀,再查域名是不是过期了 |
status: SERVFAIL | 解析服务器放弃回答 | 常见于 DNSSEC 校验失败或权威服务器不可达,换一个公共 DNS 复测 |
status: REFUSED | 对方拒绝提供服务 | 多半是向权威服务器查了不归它管的域名,或该服务器不对外提供递归 |
| 超时、无响应 | 网络层没通 | 53 端口被防火墙或代理拦了,换网络环境再试 |
ANSWER: 0 是这里最容易被误读的一个。它不等于域名有问题,只等于「这条记录不存在」。有人把它当成「解析失败」,于是去换 DNS 服务商,折腾两天才发现是当初压根没点保存。
SERVFAIL 要单独提一句。它经常出现在刚换完 DNS 服务商、或者刚给域名上过 DNSSEC 的时候。这种状态下不只是邮箱,网站也打不开,因为整个域名的解析都失效了。判断方法很简单:随便查一条 A 记录,如果 A 也 SERVFAIL,问题就不在 MX 上。
MX 值后面,还得再查一次 A
这一步几乎没人做,但它是「记录都对、邮件就是投不进来」的头号原因。
MX 记录给的是主机名,不是 IP。发件方拿到主机名之后,还要再解析一次地址,才能建立连接。dig mx 只证明记录在,不证明能投递。
拿到 mail exchanger 的值之后,照抄主机名再查一次:
nslookup mx1.example.com 8.8.8.8
查不到地址,邮件就投不出去,退信里通常写找不到主机或连接超时。另外两种情况也会在这步暴露:MX 值指向了一个 CNAME——这在 DNS 规范里是不允许的,部分解析器会直接忽略这条记录;以及同一个目标主机名配了两条优先级不同的 MX,等于重复,没有冗余意义。
顺带纠一个常见误解:A 记录和 MX 记录是两条独立路径,网站换了服务器、动了 A 记录,只要 MX 没碰,收信不受影响。反过来说,用「网站能打开」来推断「邮箱正常」也不成立。
找客服之前,截这四样
技术支持每天收到大量「收不到邮件」的截图,其中一半因为信息不全要来回问三轮。想让对方一次定位,截图带上这四样:
- 完整命令行。含域名和指定的 DNS 服务器地址。只截结果不截命令,对方无法判断你查的是哪一层、有没有绕开本机缓存。
- NS 那一段。
dig NS 你的域名的结果,证明你查的权威确实是你自己在用的那家。 - MX 的全部结果行。优先级和目标主机名都要,别只截第一条。多条记录里有一条错的,只截一条永远发现不了。
- 查询时间。记录会变,没有时间的截图没法复现。手机截图自带时间,命令行截图请把系统时间栏一起截进去。
不建议截的:整屏带浏览器书签和桌面文件;把剩余 TTL 当成配置值标出来;以及只截一行红字错误。如果用的是在线查询工具,把工具页面的链接一起给出,比图片有用得多——对方可以自己复跑一次,还能换节点对比。
还有一种情况值得先自查再找人:如果 MX 查得到、A 也查得到、测试信也发得出去,只有某一家域名的来信收不到,那问题多半不在你的解析上,而在对方的发信配置或者中间的反垃圾判定,这时候该看 域名解析未生效那篇里的排查顺序,而不是继续查 MX。
相关问题
nslookup 和 dig 查出来不一样,该信哪个?
两者查的可能不是同一台服务器。nslookup 不指定服务器时用本机配置的 DNS,dig 默认也用本机配置,但很多人习惯加 @8.8.8.8。结果不同说明中间有缓存或分线路,此时两个都不算定论,去查自己的权威 NS 才有意义。
为什么每次查到的 TTL 数字都在变小?
那个数字是剩余缓存秒数,不是你在后台填的 TTL。递归服务器把你这条记录缓存下来之后,每过一秒就减一,减到 0 会重新回源拉取。想看你真正提交的 TTL,去查权威服务器,那边显示的才是配置值。
手机上能查 MX 记录吗?
手机上没有方便的命令行工具,用在线查询页面或者 DNS 类 App 更快。要注意在线工具是从它自己的服务器发起的查询,位置和你不在一个网络,结果可能和你在电脑上查的不同,看结果时留意页面上标注的查询节点。
查出来只有一条 MX,是不是配错了?
不算错,但少了冗余。一条 MX 能正常收信,只是目标服务器维护或临时不可达时没有备用可切,那段时间的来信会延迟或退信。服务商一般会给出主备两条,按给的填就行。
优先级 0 和 10,哪个先投?
0 先投,数字越小优先级越高。0 是合法值,不必因为「看起来像没填」而改掉。同一域名下多条 MX 的优先级不要写成一样,相同优先级会让发件方随机挑一条,表现为邮件时收时不收。