DNS 查询工具对比:dig、nslookup、host 怎么用
查 DNS 有三个工具,知道什么时候用哪个、以及 dig 那几个关键参数,排查解析问题会快很多。
一、三个工具怎么选
| 工具 | 平台 | 特点 | 适用 |
|---|---|---|---|
dig | Linux/macOS | 信息最全,输出规范 | 首选 |
nslookup | 全平台 | 到处都有,但输出啰嗦 | Windows 应急 |
host | Linux/macOS | 输出最简洁 | 快速看一眼 |
host www.bzii.cn # 只要结果
# www.bzii.cn has address 1.2.3.4
dig +short www.bzii.cn A # dig 的简洁模式
# 1.2.3.4二、dig 的常用参数
# 只显示答案(脚本里最爱用)
dig +short www.bzii.cn A
# 指定记录类型
dig +short www.bzii.cn AAAA
dig +short www.bzii.cn MX
dig +short www.bzii.cn TXT
dig +short www.bzii.cn NS
dig +short www.bzii.cn CAA
dig www.bzii.cn ANY # 所有类型(很多服务器已不响应)
# 指定 DNS 服务器
dig @1.1.1.1 www.bzii.cn A +short
dig @8.8.8.8 www.bzii.cn A +short
dig @223.5.5.5 www.bzii.cn A +short
# 追踪完整的解析过程(从根服务器开始)
dig +trace www.bzii.cn A
# 显示详细信息(看 TTL、权威服务器)
dig www.bzii.cn A三、看懂 dig 完整输出
$ dig www.bzii.cn A
;; QUESTION SECTION:
;www.bzii.cn. IN A
;; ANSWER SECTION:
www.bzii.cn. 300 IN A 1.2.3.4
# ↑TTL ↑类型 ↑值
;; AUTHORITY SECTION:
www.bzii.cn. 86400 IN NS lola.ns.cloudflare.com.
;; Query time: 12 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)关键看这几处:
- ANSWER 里的 TTL:还有多久过期(调试时看它倒计时);
- SERVER:这次查询用的哪个 DNS;
- status: NOERROR /
NXDOMAIN(不存在)/SERVFAIL(服务端出错)。
四、最常用的排查组合
判断是不是本地缓存问题
# 用不同的公共 DNS 对比
for ns in 1.1.1.1 8.8.8.8 223.5.5.5 119.29.29.29; do
echo -n "$ns: ";
dig @$ns +short www.bzii.cn A
done如果只有本地 DNS 返回旧值 → 本地缓存问题,清缓存即可。 如果全都返回旧值 → 权威 DNS 还没更新,继续查。
追踪到底哪一级没生效
dig +trace www.bzii.cn A
# 会依次显示:根服务器 → .net 顶级域 → www.bzii.cn 的权威服务器某一步返回的还是旧 NS,说明那一层没更新完。
确认权威服务器的答案
# 先查 NS
dig +short www.bzii.cn NS
# lola.ns.cloudflare.com.
# 直接问权威服务器(绕过缓存,最准确)
dig @lola.ns.cloudflare.com www.bzii.cn A +short直接问权威服务器是判断「DNS 到底改没改对」的黄金标准。 如果权威服务器返回正确值,那问题只在传播时间。
五、nslookup
Windows 上默认只有它:
nslookup www.bzii.cn
nslookup www.bzii.cn 8.8.8.8 # 指定服务器
nslookup -type=MX www.bzii.cn
nslookup -type=TXT www.bzii.cn
nslookup -debug www.bzii.cn # 详细信息Windows 上想用 dig,可以:
- WSL 里用;
- 装 BIND 工具包;
- 用在线工具。
六、在线工具
| 工具 | 用途 |
|---|---|
| dnschecker.org | 全球 DNS 生效情况,一张地图 |
| whatsmydns.net | 同上 |
| dnssec-analyzer.verisignlabs.com | DNSSEC 信任链 |
| mxtoolbox.com | 邮件记录全面体检 |
全球生效检查特别有用:看到「欧洲已生效、亚洲还没」,就知道再等等而不是瞎改配置。
七、清本地缓存
# macOS
sudo dscacheutil -flushcache && sudo killall -HUP mDNSResponder
# Linux(systemd-resolved)
sudo resolvectl flush-caches
# Linux(nscd)
sudo systemctl restart nscd
# Windows
ipconfig /flushdns
# Chrome 也有自己的 DNS 缓存
# 访问 chrome://net-internals/#dns → Clear host cache八、几个实用组合
# 一次性查所有常用记录
for t in A AAAA CNAME MX TXT NS CAA; do
echo "--- $t ---";
dig +short www.bzii.cn $t;
done
# 看域名从哪天过期
whois www.bzii.cn | grep -iE "expir|registrar|status"
# 持续观察解析变化
watch -n 10 "dig +short www.bzii.cn A"九、常见状态码含义
dig www.bzii.cn | grep "status"| 状态 | 含义 |
|---|---|
| NOERROR | 正常 |
| NXDOMAIN | 域名不存在(记录没配或域名拼错) |
| SERVFAIL | 权威服务器出错(DNSSEC 校验失败常见) |
| REFUSED | 服务器拒绝查询 |
| NOERROR 但无 ANSWER | 记录确实不存在(CNAME 指向问题等) |
SERVFAIL往往意味着 DNSSEC 出了问题(换了 NS 没更新 DS 记录)。这是最需要警惕的一个状态。
记住两条就够:查当前值用 dig +short,判断对不对直接问权威服务器。
