dig 追踪解析链路是什么
dig 加 +trace 会自己从根域名服务器开始,沿委派链路逐级向下一路问到底:先问根、再问顶级域、最后问到承载记录的权威服务器,并把每一跳的应答完整打印出来。它不走本地缓存,所以能看到真实的 NS 委派关系——域名迁移后「解析还没生效还是已经切到新服务商」这类问题,用 +trace 比 ping 域名可靠得多。配合 -f 读域名清单,还能一次批量巡检几十上百个域名的解析结果。
基本信息
| 适用平台 | GNU/Linux、macOS(bind-utils / bind9-dnsutils 中的 dig) |
|---|---|
| 语法 | dig +trace 域名 与 dig -f 域名清单 +short |
| 批量输入 | -f 每行一个域名,# 开头视为注释 |
| 关键差异 | +trace 不读本地缓存,+short 只输出答案 |
| 权限 | 普通用户即可 |
| 适用实现 | BIND 9 及兼容实现(knot-dnsutils 等) |
典型使用场景
- 域名迁移后确认各级 DNS 委派是否已经指向新服务商。
- 排查「本地能解析、其他运营商解析不到」这类差异问题。
- 批量巡检域名的 A 记录,输出结果用于资产台账核对。
- 核对 NS 记录与权威服务器地址是否与实际部署一致。
- 迁移前记录解析快照,迁移后做前后对比。
常用写法
常用写法
dig +trace example.com | head -40 # 从根开始的逐级委派路径
dig +trace example.com | grep -E 'NS|A' # 只看委派与地址记录
dig +short example.com # 单域名速查
printf 'qiqicto.com\nexample.com\n' > domains.txt
dig +short -f domains.txt | sort -u # 批量查询并去重
dig +noall +answer -f domains.txt # 保留域名上下文,便于归属
dig +short @8.8.8.8 -f domains.txt | sort -u # 指定公共 DNS 批量核查
dig NS example.com +short # 只看权威 NS 列表选项与输出读法
| 选项 | 作用 | 使用要点 |
|---|---|---|
| +trace | 从根逐级追踪 | 不读本地缓存,看到的是真实委派链路 |
| +short | 只输出答案 | 批量时没有域名前缀,多域名难以分辨 |
| -f 文件 | 批量查询 | 每行一个域名,# 开头行会被忽略 |
| +noall +answer | 只保留回答段 | 保留完整记录格式,适合脚本解析归属 |
| +nocmd | 不打印 dig 回显 | 输出更干净 |
| @服务器 | 指定查询服务器 | 用于对比不同 DNS 的解析差异 |
+trace 的起点取决于本机递归配置,逐级结果可能与真实客户端路径存在差异。判断「谁是权威」时应以最后 answer 段中的记录与权威服务器地址为准,而不是只看中间过程。
批量查询时 +short 不带域名前缀,多个域名的结果混在一起无法分辨归属,核对台账极易张冠李戴。脚本里改用 +noall +answer,或逐个域名查询后自己打印域名再拼结果。
解析慢要区分是缓存还是权威的问题:分别对本地递归服务器、公共 DNS、权威服务器各查一次,对比响应时间与结果,能快速定位慢在哪一段链路。