dig 是什么
dig 是域名系统排查的事实标准工具:它按协议原样构造查询,再把服务器返回的报文按区块分门别类地展示出来,头部状态、应答记录、权威段、附加段与耗时统计一应俱全。与操作系统自带的小工具相比,它不做额外加工,所以『查询结果本身是什么样』一目了然。排查域名问题时,先用它定位到底是解析链路有问题,还是应用拿到的结果不对。
基本信息
| 适用平台 | Linux、macOS 需安装 dig 所属的工具包;Windows 可用系统自带的小工具替代 |
|---|---|
| 默认行为 | 不带记录类型时查地址记录,默认使用系统配置的解析服务器 |
| 常用参数 | 指定服务器查询、只看答案值、不递归、显示统计、逐层溯源 |
| 结果分块 | 头部、附加段、问题段、应答段、权威段、附加数据段、统计行 |
| 观察重点 | 状态码是否正常、标志位是否符合预期、应答的服务器是不是你以为的那一台 |
典型使用场景
- 确认解析结果:核对域名当前解析出的地址是否正确
- 验证权威数据:绕过缓存直接向权威服务器查询,判断是源站配置问题还是缓存问题
- 定位解析服务:确认实际应答的服务器地址与端口,排查内网劫持与转发
- 批量核对记录:一次性导出某域名的多种记录,用于迁移前后对比
- 为变更服务:域名切换前后用同一命令留存证据,避免口头争论
基本查询与输出结构
基本查询与输出结构
$ dig example.com
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24312
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION: ; EDNS: version: 0, udp: 1232
;; QUESTION SECTION: ;example.com. IN A
;; ANSWER SECTION: example.com. 3600 IN A 93.184.216.34
;; Query time: 12 msec
;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP)
;; WHEN: Mon Oct 12 10:30:00 CST 2026输出逐段读法
| 区段 | 内容 | 正常与异常 |
|---|---|---|
| 头部状态 | 响应码,如正常、无此域名、服务器失败、拒绝 | 非正常码先看是哪一类,再决定排查方向 |
| 标志位 | 是否响应、是否权威、是否期望递归、是否允许递归、是否已校验 | 向权威查询却看到允许递归,说明查错了对象 |
| 问题段 | 实际发出的查询名与类型 | 与预期不一致说明命令写错或脚本传参出错 |
| 应答段 | 记录名、生存时间、记录类型、记录值 | 生存时间很短说明频繁变更或做过预切换 |
| 统计行 | 查询耗时与实际应答的服务器 | 耗时异常大指向解析链路慢 |
| 端口与传输 | 本次使用的端口与传输方式 | 看到截断标志时说明应答过大并改走其他传输 |
排障先看三件事:状态码是否正常、标志位是否符合预期、应答的服务器是不是你配置的那一台;三项都对,再去看应答内容对不对。
只看答案不看状态码会踩坑:某些情况下即使状态异常,也仍可能打印出缓存里的旧答案,容易得出错误结论。
容器与本机自带解析代理的环境里,查询很可能被转发到别处:应答行里的服务器地址就是判断『到底问到了谁』的关键依据。
用带递归请求的方式去问不提供递归的服务器会被拒绝,这不是故障;判断权威侧是否正常,应当直接向该域的权威服务器查询。