dig(Domain Information Groper)是 Linux/Unix 系统下最核心的 DNS 诊断工具,专为查询 DNS 记录、排查 DNS 解析问题设计,功能比 nslookup 更强大、输出更结构化、可定制性更高,也是运维/开发排查域名解析问题的首选工具。
下面从 核心定位、基础语法、输出结构、常用参数、实战场景、核心原理 六个维度,彻底讲透 dig:
一、核心定位
- 作用:查询域名的各类 DNS 记录(A/AAAA/CNAME/MX/NS 等)、验证 DNS 解析链路、排查解析故障(如域名不存在、解析延迟、缓存失效等)。
- 优势:
- 输出结构化,每部分含义明确,便于分析;
- 支持定制输出(只看核心结果/追踪解析链路);
- 兼容 EDNS(扩展 DNS)、TCP/UDP 协议、反向解析等;
- 无默认交互模式(纯命令行),适合脚本批量查询。
二、基础语法
dig 的语法灵活,核心结构如下:
dig [可选参数] [目标域名] [查询类型] [查询类] [@DNS服务器]
各部分拆解:
| 部分 | 说明 |
|---|---|
| 可选参数 | 定制查询行为(如 +short 简化输出、+trace 追踪链路),下文重点讲; |
| 目标域名 | 要查询的域名(如 www.baidu.com、ark.cn-beijing.volces.com); |
| 查询类型 | 指定 DNS 记录类型(如 A/AAAA/CNAME,默认 A); |
| 查询类 | 几乎只用 IN(Internet 类,默认值),其他如 CH(Chaosnet)极少用; |
| @DNS服务器 | 指定查询的 DNS 服务器(如 @8.8.8.8 谷歌DNS、@114.114.114.114 国内DNS),默认用系统 /etc/resolv.conf 配置的DNS; |
最简示例(默认查 A 记录):
dig www.baidu.com # 等价于 dig www.baidu.com A IN
三、完整输出结构(结合实例)
以 dig @8.8.8.8 www.baidu.com 为例,输出分为 9 个核心部分,每部分都有明确作用:
; <<>> DiG 9.10.6 <<>> @8.8.8.8 www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12345
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 1200 IN CNAME www.a.shifen.com.
www.a.shifen.com. 120 IN A 180.101.50.188
www.a.shifen.com. 120 IN A 180.101.50.189
;; AUTHORITY SECTION:
; (若有权威DNS服务器信息,会显示在这里,本例无)
;; ADDITIONAL SECTION:
; (若有权威服务器的IP等附加信息,会显示在这里,本例无)
;; Query time: 20 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Wed Dec 17 11:00:00 CST 2025
;; MSG SIZE rcvd: 100
1. 命令行标识行
; <<>> DiG 9.10.6 <<>> @8.8.8.8 www.baidu.com
DiG 9.10.6:当前dig工具版本;@8.8.8.8:本次指定的查询DNS服务器;www.baidu.com:目标域名;- 开头的
;是注释符,不影响解析。
2. 全局选项
;; global options: +cmd
+cmd:默认开启,显示命令行标识行;若加-nocmd,则隐藏这行,简化输出。
3. HEADER(核心元数据)
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12345
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
这是 DNS 响应的“头部信息”,是排查问题的关键:
| 字段 | 说明 |
|---|---|
opcode: QUERY | DNS 操作类型:QUERY(查询,默认)、UPDATE(更新)、NOTIFY(通知)等; |
status: NOERROR | 查询状态(核心!): - NOERROR:成功;- NXDOMAIN:域名不存在;- SERVFAIL:DNS服务器故障;- REFUSED:DNS服务器拒绝查询; |
id: 12345 | 查询唯一ID(匹配请求/响应,随机生成); |
flags | 响应标志位(组合): - qr:这是“响应包”(而非请求包);- rd:客户端请求“递归查询”;- ra:DNS服务器支持递归;- aa:权威回答(只有权威DNS服务器会返回);- tc:数据包截断(需用TCP重试); |
QUERY:1 | 发起的查询数量(默认1); |
ANSWER:3 | 有效解析结果数量(本例返回3条:1条CNAME+2条A记录); |
AUTHORITY:0 | 权威DNS服务器信息数量(本例无); |
ADDITIONAL:1 | 附加信息数量(本例只有EDNS信息); |
4. OPT PSEUDOSECTION(EDNS 扩展段)
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
EDNS:Extended DNS(扩展DNS),解决传统DNS的限制(如UDP包大小);version:0:EDNS 主流版本(兼容所有DNS服务器);udp:512:支持的UDP数据包最大大小(超过则自动切TCP)。
5. QUESTION SECTION(查询请求段)
;; QUESTION SECTION:
;www.baidu.com. IN A
这是你“主动发起的查询请求”,格式为:域名 + 类 + 记录类型:
www.baidu.com.:目标域名(末尾.是域名根标识,可省略);IN:查询类(Internet,默认,几乎所有场景都用);A:查询类型(默认查A记录,IPv4地址)。
6. ANSWER SECTION(核心解析结果)
;; ANSWER SECTION:
www.baidu.com. 1200 IN CNAME www.a.shifen.com.
www.a.shifen.com. 120 IN A 180.101.50.188
www.a.shifen.com. 120 IN A 180.101.50.189
这是 dig 最核心的部分,格式为:域名 + TTL + 类 + 记录类型 + 结果:
| 字段 | 说明 |
|---|---|
www.baidu.com. | 解析的域名; |
1200/120 | TTL(Time To Live):缓存时间(秒),表示解析结果在本地DNS缓存中保留的时长;TTL越小,解析结果更新越快; |
IN | 类(同上); |
CNAME/A | 记录类型(下文详细列); |
www.a.shifen.com./180.101.50.188 | 解析结果(CNAME是别名,A是IPv4地址); |
7. AUTHORITY SECTION(权威服务器段)
当 AUTHORITY > 0 时显示,内容是“管理该域名的权威DNS服务器”(比如查询 baidu.com 的NS记录时):
;; AUTHORITY SECTION:
baidu.com. 86400 IN NS ns3.baidu.com.
baidu.com. 86400 IN NS ns4.baidu.com.
- 表示
baidu.com的权威DNS服务器是ns3.baidu.com/ns4.baidu.com。
8. ADDITIONAL SECTION(附加信息段)
通常是 AUTHORITY SECTION 中权威服务器的IP地址(减少二次查询):
;; ADDITIONAL SECTION:
ns3.baidu.com. 86400 IN A 119.75.219.82
ns4.baidu.com. 86400 IN A 14.215.177.229
9. 统计信息(查询耗时/环境)
;; Query time: 20 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Wed Dec 17 11:00:00 CST 2025
;; MSG SIZE rcvd: 100
| 字段 | 说明 |
|---|---|
Query time:20 msec | 查询总耗时(网络延迟+DNS服务器处理时间,越小越好,正常<100ms); |
SERVER:8.8.8.8#53 | 提供解析的DNS服务器(#53是DNS默认端口); |
WHEN | 查询执行时间(CST=中国标准时间); |
MSG SIZE rcvd:100 | 接收的响应数据包大小(字节); |
四、常用 DNS 记录类型(dig -t 类型 域名)
dig 支持所有DNS记录类型,常用的如下:
| 记录类型 | 作用 | 示例命令 |
|---|---|---|
A | 域名 → IPv4 地址(默认查询类型); | dig www.baidu.com A |
AAAA | 域名 → IPv6 地址; | dig www.baidu.com AAAA |
CNAME | 域名别名(如 www.baidu.com 别名是 www.a.shifen.com); | dig www.baidu.com CNAME |
MX | 邮件服务器(如 qq.com 的收信服务器); | dig qq.com MX |
NS | 域名的权威DNS服务器(管理该域名解析的服务器); | dig baidu.com NS |
TXT | 文本记录(常用于SPF反垃圾邮件、DKIM验证、域名归属验证); | dig qq.com TXT |
SOA | 起始授权记录(域名的“主权威服务器”+管理信息); | dig baidu.com SOA |
PTR | 反向解析(IPv4/IPv6 → 域名,等价于 dig -x IP); | dig -x 8.8.8.8 |
五、dig 高频实用参数
dig 的参数可定制输出/查询行为,掌握以下参数能大幅提升效率:
| 参数 | 作用 | 示例 |
|---|---|---|
@<DNS服务器> | 指定查询的DNS服务器(突破系统默认DNS); | dig @114.114.114.114 www.baidu.com |
-t <类型> | 指定记录类型(等价于直接跟类型); | dig -t MX qq.com |
-x <IP> | 反向解析(自动生成反向域名,如 8.8.8.8 → 8.8.8.8.in-addr.arpa); | dig -x 101.126.7.76 |
+short | 极简输出(只显示核心结果,适合脚本); | dig +short www.baidu.com |
+trace | 追踪DNS解析全链路(从根服务器→顶级域→权威服务器,排查解析链路问题); | dig +trace www.taobao.com |
+noall +answer | 只显示ANSWER段(过滤所有无关输出); | dig +noall +answer www.baidu.com |
-4/-6 | 强制用IPv4/IPv6查询; | dig -6 www.baidu.com |
+tcp | 强制用TCP查询(默认UDP,包大时自动切,可手动指定); | dig +tcp www.baidu.com |
+nocmd | 隐藏命令行标识行(简化输出); | dig +nocmd www.baidu.com |
+ttlunits | TTL显示为“秒/分/时”(默认只显示秒); | dig +ttlunits www.baidu.com |
六、实战场景(必看)
结合实际问题,用 dig 解决常见场景:
场景1:验证域名是否解析(基础)
dig www.baidu.com # 查A记录,看ANSWER段是否有IP
场景2:指定公共DNS查询(排除本地DNS缓存问题)
dig @8.8.8.8 www.baidu.com # 用谷歌DNS查
dig @223.5.5.5 www.baidu.com # 用阿里DNS查
场景3:反向解析(验证IP对应域名)
dig -x 8.8.8.8 # 查8.8.8.8对应的域名(结果是dns.google)
场景4:只看核心结果(脚本/快速查看)
dig +short www.baidu.com
# 输出:
# www.a.shifen.com.
# 180.101.50.188
# 180.101.50.189
场景5:追踪解析链路(排查“域名解析慢”问题)
dig +trace www.taobao.com
输出会显示:
- 先查根服务器(
.)→ 得到.com顶级域服务器; - 再查
.com服务器 → 得到taobao.com权威服务器; - 最后查
taobao.com权威服务器 → 得到www.taobao.com的解析结果。
通过耗时可定位哪一段链路慢。
场景6:排查“域名不存在”问题
dig xxx.123.com # 不存在的域名
HEADER 中 status: NXDOMAIN,说明域名确实不存在(而非DNS服务器故障)。
七、核心原理补充
- 递归查询 vs 迭代查询:
dig默认是递归查询:客户端(你)→ 本地DNS服务器 → 本地DNS服务器帮你查根/顶级域/权威服务器 → 返回最终结果;dig +trace是迭代查询:客户端直接依次查询根服务器→顶级域服务器→权威服务器,自己拼出结果(适合排查链路问题)。
- TTL的作用:本地DNS缓存解析结果的时长,TTL越小,解析结果更新越快(比如域名换IP后,TTL=30秒则30秒后全网生效)。
- EDNS的作用:传统DNS的UDP包最大512字节,EDNS扩展后可支持更大的包(如1232字节),避免数据包截断。
总结
dig 的核心价值是结构化、可定制、全链路地查询DNS信息:
- 日常快速查解析:用
dig +short 域名; - 排查解析故障:看 HEADER 的
status+ ANSWER 段; - 定位链路问题:用
+trace追踪解析全过程; - 脚本批量查询:结合
+short/+noall +answer简化输出。
掌握 dig 后,几乎能解决所有域名解析相关的排查问题(比如“为什么域名访问不了?”“解析结果和预期不一致?”“解析延迟高?”)。