jianwei
jianwei
发布于 2025-12-17 / 21 阅读
0
1

dig教程

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.comark.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: QUERYDNS 操作类型: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/120TTL(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.88.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
+ttlunitsTTL显示为“秒/分/时”(默认只显示秒);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

输出会显示:

  1. 先查根服务器(.)→ 得到.com顶级域服务器;
  2. 再查.com服务器 → 得到taobao.com权威服务器;
  3. 最后查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 后,几乎能解决所有域名解析相关的排查问题(比如“为什么域名访问不了?”“解析结果和预期不一致?”“解析延迟高?”)。


评论