域名解析是否正常,用浏览器打开网页判断是不准的——浏览器能访问只代表你所在的网络解析对了,换一个运营商、换一个国家可能完全是另一回事。真正可靠的做法是直接用 DNS 查询工具向指定服务器发问。常用的有四条路径:nslookup 做快速验证,dig 看完整响应报文,host 做极简查询,在线工具做多地对比。

查询前必须分清的两台服务器
DNS 查询结果对不对,取决于你问的是谁。同一条记录,问”递归服务器”和问”权威服务器”,得到的答案可能不一样,这不是故障,而是缓存机制使然。
| 查询对象 | 返回的内容 | 适合回答的问题 |
|---|---|---|
| 递归服务器(本地 DNS、8.8.8.8、1.1.1.1) | 它缓存里的值,可能是旧记录 | 当前访客实际看到的是什么 |
| 权威服务器(域名自己的 NS) | 区域文件里的配置值,无缓存 | 我的修改到底保存成功没有 |
改完解析后正确的验证顺序是:先问权威服务器确认配置已保存,再问几家公共 DNS 看缓存是否已过期。反过来查,很容易得出”没生效”的错误结论。
方法一:用 nslookup 做快速验证
nslookup 是 Windows、macOS、Linux 三个平台都自带的工具,适合”这条记录现在是什么”这类快速确认。不带参数时查询的是系统当前配置的那台 DNS 服务器,默认返回 A 记录。
# 基础查询:返回解析服务器地址与域名对应的 IP
nslookup example.com
# 查询指定记录类型
nslookup -type=MX example.com # 邮件交换记录
nslookup -type=TXT example.com # SPF、DKIM、站点验证
nslookup -type=NS example.com # 权威服务器列表
nslookup -type=CNAME www.example.com
# 指定 DNS 服务器:把服务器地址放在域名后面
nslookup example.com 8.8.8.8
输出里的 “Non-authoritative answer”(非权威应答)是正常现象,只表示答案来自缓存而非权威服务器,不是报错。若返回 “Non-existent domain” 说明域名不存在,”Server failed” 或超时则是被查询的 DNS 服务器本身有问题。
nslookup 还支持交互模式:直接输入 nslookup 回车进入,用 server 8.8.8.8 切换服务器,set type=MX 切换记录类型,之后连续输入域名即可批量查询,exit 退出。需要注意的是,它查询 CNAME 时不会自动追踪到最终的 A 记录,只返回第一层别名。
方法二:用 dig 看完整响应报文
dig 在 macOS 和多数 Linux 发行版上默认可用,Windows 需要安装 BIND 工具包或借助 WSL。它的输出比 nslookup 完整,是排查解析故障时的主要工具。
dig example.com # 完整输出,含 HEADER / QUESTION / ANSWER
dig example.com +short # 只留答案,适合脚本处理
dig @8.8.8.8 example.com A # 指定服务器查询
dig @ns1.example.com example.com A # 直连权威服务器
dig example.com MX +short # 查邮件记录
dig -x 203.0.113.10 +short # 反向查询 PTR,邮件场景常用
dig example.com +trace # 从根服务器逐层追踪委派链路
读懂 dig 的输出
dig 的头部有一行 status,判断查询结果主要看它:NOERROR 表示查询成功(注意:域名存在但没有该类型记录时也是 NOERROR,只是 ANSWER 段为空);NXDOMAIN 表示域名不存在;SERVFAIL 表示权威服务器侧出错;REFUSED 表示被拒绝。
ANSWER SECTION 里那一列数字是 TTL,代表这条记录在缓存里还能存活多少秒,它是倒计时值,两个人相隔几分钟查询会看到不同的数字。判断一条记录是否刷新过,看 TTL 是否恢复到配置值即可。
方法三:用在线工具做多地对比
改完解析后最想确认的是”全球用户看到的是不是新值”,这件事靠本机命令做不到。在线 DNS 查询工具会同时向分布在不同国家和运营商的几十个探测点发起查询,把结果并排列出,哪里有缓存未过期一目了然。
这类工具的使用方式一致:输入域名和记录类型,查看各地返回值的分布。全部一致说明变更已收敛;少数地区不一致说明缓存还在陆续过期,此时正确做法是什么都不做,等 TTL 耗尽——反复修改记录只会不断重置倒计时。
常用记录类型速查
| 记录类型 | 用途 | 典型查询场景 |
|---|---|---|
| A | 域名指向 IPv4 地址 | 网站访问异常、切换服务器 |
| AAAA | 域名指向 IPv6 地址 | 双栈环境连通性检查 |
| CNAME | 域名别名 | CDN 接入、域名跳转配置 |
| MX | 邮件服务器及优先级 | 收不到邮件时排查 |
| TXT | SPF、DKIM、DMARC 与站点验证 | 邮件被判垃圾、域名归属验证 |
| NS | 权威服务器列表 | 修改 DNS 服务商后是否生效 |
| SOA | 区域元数据与序列号 | 主从同步是否完成 |
一次完整的 DNS 查询步骤
把上面的方法串起来,解析类问题可以按固定顺序处理:
- 用
nslookup -type=NS example.com拿到权威服务器列表; - 用
dig @权威服务器 example.com A确认配置值是否已保存; - 用
dig @8.8.8.8 example.com A +short与dig @1.1.1.1对比公共 DNS 结果; - 结果不一致时等待 TTL 耗尽,或用在线工具确认各地收敛情况;
- 若本机仍访问旧地址,清理本机 DNS 缓存,Windows 用
ipconfig /flushdns,macOS 用sudo killall -HUP mDNSResponder,Linux 用sudo systemd-resolve --flush-caches; - 浏览器仍异常时开无痕窗口重试,排除浏览器自身的 DNS 缓存。
这套流程的核心在第二步和第三步的对比:权威服务器正确而公共 DNS 是旧值,说明配置没问题,只是缓存时间;权威服务器本身就是错的,那等待毫无意义,应该回去改配置。
常见问题(FAQ)
Q1:为什么不同 DNS 服务器查到的结果不一样?
各地递归服务器缓存的记录过期时间不同,属于正常的缓存收敛过程,等旧 TTL 耗尽后会一致。
Q2:dig 和 nslookup 该用哪个?
快速确认用 nslookup,Windows 默认自带;排查故障用 dig,能看到状态码、TTL 和完整报文。
Q3:改完解析记录多久生效?
权威服务器即时生效,全球生效时间取决于旧 TTL,300 秒约几分钟,86400 秒最长接近一天。