DNS 查询工具对比:dig、nslookup、host 怎么用

查 DNS 有三个工具,知道什么时候用哪个、以及 dig 那几个关键参数,排查解析问题会快很多。

一、三个工具怎么选

工具平台特点适用
digLinux/macOS信息最全,输出规范首选
nslookup全平台到处都有,但输出啰嗦Windows 应急
hostLinux/macOS输出最简洁快速看一眼
bash
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 的常用参数

bash
# 只显示答案(脚本里最爱用)
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 完整输出

bash
$ 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(服务端出错)。

四、最常用的排查组合

判断是不是本地缓存问题

bash
# 用不同的公共 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 还没更新,继续查。

追踪到底哪一级没生效

bash
dig +trace www.bzii.cn A
# 会依次显示:根服务器 → .net 顶级域 → www.bzii.cn 的权威服务器

某一步返回的还是旧 NS,说明那一层没更新完。

确认权威服务器的答案

bash
# 先查 NS
dig +short www.bzii.cn NS
# lola.ns.cloudflare.com.

# 直接问权威服务器(绕过缓存,最准确)
dig @lola.ns.cloudflare.com www.bzii.cn A +short

直接问权威服务器是判断「DNS 到底改没改对」的黄金标准。 如果权威服务器返回正确值,那问题只在传播时间。

五、nslookup

Windows 上默认只有它:

bash
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.comDNSSEC 信任链
mxtoolbox.com邮件记录全面体检

全球生效检查特别有用:看到「欧洲已生效、亚洲还没」,就知道再等等而不是瞎改配置。

七、清本地缓存

bash
# 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

八、几个实用组合

bash
# 一次性查所有常用记录
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"

九、常见状态码含义

bash
dig www.bzii.cn | grep "status"
状态含义
NOERROR正常
NXDOMAIN域名不存在(记录没配或域名拼错)
SERVFAIL权威服务器出错(DNSSEC 校验失败常见
REFUSED服务器拒绝查询
NOERROR 但无 ANSWER记录确实不存在(CNAME 指向问题等)

SERVFAIL 往往意味着 DNSSEC 出了问题(换了 NS 没更新 DS 记录)。这是最需要警惕的一个状态。


记住两条就够:查当前值用 dig +short,判断对不对直接问权威服务器。