DNS查询利器:dig工具完全指南
dig 工具简介
dig(Domain Information Groper)是一个功能强大的 DNS 查询工具,用于查询 DNS 域名服务器。它是 BIND(Berkeley Internet Name Domain)软件包的一部分,广泛用于 DNS 故障诊断、域名解析验证和网络配置检查。
与传统的 nslookup 工具相比,dig 的优势在于:
- 输出信息更加详细和结构化
- 支持多种 DNS 记录类型查询
- 提供更丰富的调试信息
- 支持批量查询和脚本化操作
- 几乎所有 Linux/Unix 系统预装
基本语法
dig [@服务器] [域名] [类型] [选项]参数说明:
@服务器:指定查询的 DNS 服务器(如@8.8.8.8)域名:要查询的域名类型:DNS 记录类型(如 A、MX、CNAME、TXT 等)选项:控制输出格式和查询行为的选项
常用 DNS 记录类型
| 记录类型 | 说明 | 用途 |
|---|---|---|
A | IPv4 地址记录 | 将域名映射到 IPv4 地址 |
AAAA | IPv6 地址记录 | 将域名映射到 IPv6 地址 |
CNAME | 别名记录 | 将域名指向另一个域名 |
MX | 邮件交换记录 | 指定邮件服务器 |
NS | 域名服务器记录 | 指定授权 DNS 服务器 |
TXT | 文本记录 | 存储任意文本,常用于 SPF、DKIM 验证 |
PTR | 指针记录 | 反向解析,IP 到域名的映射 |
SOA | 起始授权记录 | 包含 DNS 区域管理信息 |
ANY | 所有记录 | 返回所有可用记录类型 |
常用选项
| 选项 | 描述 |
|---|---|
+short | 精简输出,只显示结果 |
+noall | 不显示默认输出的所有部分 |
+answer | 只显示回答部分 |
+trace | 追踪完整的 DNS 解析过程 |
+tcp | 使用 TCP 协议进行查询 |
-4 | 强制使用 IPv4 |
-6 | 强制使用 IPv6 |
-p | 指定端口号(默认 53) |
-x | 反向 DNS 查找 |
基本使用示例
查询 A 记录(默认)
dig example.com指定 DNS 服务器查询
dig @8.8.8.8 example.com查询特定记录类型
# 查询 MX 记录dig example.com MX
# 查询 NS 记录dig example.com NS
# 查询 TXT 记录dig example.com TXT
# 查询 SOA 记录dig example.com SOA
# 查询所有记录dig example.com ANY精简输出
dig +short example.com只显示回答部分
dig +noall +answer example.com反向 DNS 查找
dig -x 8.8.8.8追踪解析过程
dig +trace example.com输出解读
完整输出示例
dig @8.8.8.8 example.com A输出内容分为几个部分:
1. 头部信息
; <<>> DiG 9.10.6 <<>> @8.8.8.8 example.com A; (1 server found);; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12345;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1opcode:操作类型,通常为 QUERYstatus:返回状态,NOERROR表示查询成功flags:响应标志qr:查询响应rd:期望递归ra:服务器支持递归
2. 问题部分
;; QUESTION SECTION:;example.com. IN A显示查询的域名和记录类型。
3. 回答部分
;; ANSWER SECTION:example.com. 86400 IN A 93.184.216.34字段说明:
- 第1列:域名
- 第2列:TTL(生存时间,秒)
- 第3列:IN(Internet 类)
- 第4列:记录类型
- 第5列:记录值
4. 统计信息
;; Query time: 12 msec;; SERVER: 8.8.8.8#53(8.8.8.8);; WHEN: Thu May 21 10:00:00 2026;; MSG SIZE rcvd: 55Query time:查询耗时SERVER:使用的 DNS 服务器WHEN:查询时间MSG SIZE:响应消息大小
Trace 输出解读
+trace 选项会模拟 DNS 递归解析的完整过程,从根域名服务器开始,逐级向下查询,直到找到目标域名的授权 DNS 服务器并获取最终记录。这对于排查 DNS 配置问题、验证 DNS 传播状态非常有用。
Trace 输出示例
dig +trace example.com A典型的 trace 输出如下:
; <<>> DiG 9.10.6 <<>> +trace example.com A;; global options: +cmd. 518400 IN NS a.root-servers.net.. 518400 IN NS b.root-servers.net....(根域名服务器列表);; Received 811 bytes from 8.8.8.8#53(8.8.8.8) in 12 ms
com. 172800 IN NS a.gtld-servers.net.com. 172800 IN NS b.gtld-servers.net....(顶级域名服务器列表);; Received 833 bytes from 198.41.0.4#53(a.root-servers.net) in 35 ms
example.com. 172800 IN NS a.iana-servers.net.example.com. 172800 IN NS b.iana-servers.net....(二级域名服务器列表);; Received 661 bytes from 192.5.6.30#53(a.gtld-servers.net) in 45 ms
example.com. 86400 IN A 93.184.216.34;; Received 55 bytes from 199.43.135.53#53(a.iana-servers.net) in 18 msTrace 输出详解
Trace 查询过程
| 查询阶段 | 查询目标 | 返回内容 | 典型耗时 |
|---|---|---|---|
| 第1阶段 | 根域名服务器 | 根域名服务器列表 | 10-30 ms |
| 第2阶段 | 顶级域名服务器 | 顶级域名服务器列表 | 20-50 ms |
| 第3阶段 | 授权 DNS 服务器 | 域名的 NS 记录 | 30-100 ms |
| 第4阶段 | 最终记录 | 目标域名的 A/AAAA/MX 等记录 | 10-50 ms |
1. 根域名服务器查询
. 518400 IN NS a.root-servers.net.. 518400 IN NS b.root-servers.net.;; Received 811 bytes from 8.8.8.8#53(8.8.8.8) in 12 ms字段说明:
| 字段 | 值 | 说明 |
|---|---|---|
| 域名 | . | 根域名 |
| TTL | 518400 | 生存时间(秒,约6天) |
| 类 | IN | Internet 类 |
| 类型 | NS | 域名服务器记录 |
| 值 | a.root-servers.net | 根域名服务器名称 |
查询来源:8.8.8.8#53(8.8.8.8) - 本地 DNS 服务器
查询耗时:12 ms
这一步是向本地配置的 DNS 服务器(如 8.8.8.8)查询根域名服务器列表。
2. 顶级域名(TLD)服务器查询
com. 172800 IN NS a.gtld-servers.net.com. 172800 IN NS b.gtld-servers.net.;; Received 833 bytes from 198.41.0.4#53(a.root-servers.net) in 35 ms字段说明:
| 字段 | 值 | 说明 |
|---|---|---|
| 域名 | com. | 顶级域名 |
| TTL | 172800 | 生存时间(秒,约2天) |
| 类型 | NS | 域名服务器记录 |
| 值 | a.gtld-servers.net | .com 顶级域名服务器 |
查询来源:198.41.0.4#53(a.root-servers.net) - 某台根域名服务器
查询耗时:35 ms
这一步是向根域名服务器查询 .com 顶级域名服务器列表。
3. 二级域名服务器查询
example.com. 172800 IN NS a.iana-servers.net.example.com. 172800 IN NS b.iana-servers.net.;; Received 661 bytes from 192.5.6.30#53(a.gtld-servers.net) in 45 ms字段说明:
| 字段 | 值 | 说明 |
|---|---|---|
| 域名 | example.com. | 二级域名 |
| TTL | 172800 | 生存时间(秒,约2天) |
| 类型 | NS | 域名服务器记录 |
| 值 | a.iana-servers.net | example.com 的授权 DNS 服务器 |
查询来源:192.5.6.30#53(a.gtld-servers.net) - 某台 .com 顶级域名服务器
查询耗时:45 ms
这一步是向顶级域名服务器查询 example.com 的授权 DNS 服务器列表。
4. 最终记录查询
example.com. 86400 IN A 93.184.216.34;; Received 55 bytes from 199.43.135.53#53(a.iana-servers.net) in 18 ms字段说明:
| 字段 | 值 | 说明 |
|---|---|---|
| 域名 | example.com. | 目标域名 |
| TTL | 86400 | 生存时间(秒,约1天) |
| 类型 | A | IPv4 地址记录 |
| 值 | 93.184.216.34 | 最终解析结果 |
查询来源:199.43.135.53#53(a.iana-servers.net) - example.com 的授权 DNS 服务器
查询耗时:18 ms
这一步是向授权 DNS 服务器查询 example.com 的 A 记录。
Trace 输出分析要点
1. 确认 NS 记录配置
检查每一级的 NS 记录是否正确:
- 根域名服务器是否正确返回顶级域名服务器列表
- 顶级域名服务器是否正确返回二级域名服务器列表
- 授权 DNS 服务器是否正确设置
2. 检查 TTL 值
观察各级 DNS 记录的 TTL 值:
- 根域名服务器:通常为 518400 秒(6天)
- 顶级域名服务器:通常为 172800 秒(2天)
- 二级域名服务器:可自行配置,常见为 86400 秒(1天)
- A 记录:可自行配置,常见为 300 秒(5分钟)到 86400 秒(1天)
TTL 值越小,DNS 传播越快,但会增加 DNS 服务器负载。
3. 分析查询耗时
+trace 输出的每一行都包含 in X ms,表示该次查询的耗时:
;; Received 833 bytes from 198.41.0.4#53(a.root-servers.net) in 35 ms- 正常范围:国内 DNS 服务器通常在 10-50ms
- 异常情况:超过 200ms 可能存在网络问题或 DNS 服务器响应缓慢
4. 识别 DNS 解析链路
通过 trace 输出可以了解 DNS 解析的完整路径:
本地 DNS → 根域名服务器 → 顶级域名服务器 → 授权 DNS 服务器 → 最终记录每一步的 from X 都标识了查询来源,可以帮助排查:
- 某一级服务器无响应(超时)
- 某一级服务器返回错误的 NS 记录
- 某一级服务器响应缓慢
常见问题诊断
问题 1:某一级查询超时
;; communication error: connection reset可能原因:
- 网络防火墙阻止了 DNS 查询(端口 53)
- DNS 服务器不可用
- 网络连接问题
排查方法:
# 测试与 DNS 服务器的连通性ping 198.41.0.4
# 使用 TCP 协议重试dig +tcp +trace example.com问题 2:NS 记录不一致
在不同的顶级域名服务器返回了不同的 NS 记录列表。
可能原因:
- DNS 传播未完成
- NS 记录配置错误
- DNS 缓存问题
排查方法:
# 向多个顶级域名服务器查询 NS 记录dig @a.gtld-servers.net example.com NSdig @b.gtld-servers.net example.com NS问题 3:TTL 值异常
A 记录的 TTL 为 0 或非常短(如 1 秒)。
可能原因:
- DNS 配置错误
- 某些 CDN 动态调整 TTL
- DNS 服务提供商的特殊设置
问题 4:多路径 DNS 解析
不同地区的 trace 输出可能不同,这是正常现象:
- CDN 通常会根据地理位置返回不同的 NS 记录
- 大型 DNS 服务商使用任播(Anycast)技术
高级 Trace 应用
1. 追踪特定记录类型
# 追踪 MX 记录dig +trace example.com MX
# 追踪 TXT 记录dig +trace example.com TXT
# 追踪 CNAME 记录dig +trace www.example.com CNAME2. 使用特定 DNS 服务器开始追踪
# 从 Cloudflare DNS 开始dig @1.1.1.1 +trace example.com
# 从本地 DNS 开始(系统默认)dig +trace example.com3. 对比多个 DNS 服务商的解析结果
# Google DNSdig @8.8.8.8 +trace example.com
# Cloudflare DNSdig @1.1.1.1 +trace example.com
# 国内 DNSdig @114.114.114.114 +trace example.com通过对比不同 DNS 服务商的 trace 输出,可以:
- 检查 DNS 传播状态
- 识别 CDN 智能解析策略
- 排查特定 DNS 服务商的问题
注意:+trace 会执行多次 DNS 查询,总耗时会比普通查询长很多,这是正常现象。
常见场景
验证 DNS 解析
# 检查域名是否正确解析dig +short example.com
# 检查是否使用了正确的 DNS 服务器dig example.com NS排查邮件问题
# 检查 MX 记录dig +short example.com MX
# 检查 SPF 记录dig +short example.com TXT
# 检查反向解析(防止邮件被标记为垃圾邮件)dig -x <邮件服务器IP>诊断 CDN 配置
# 检查 CNAME 配置dig +short www.example.com CNAME
# 检查边缘节点dig +trace www.example.com排查 DNS 缓存问题
# 检查 TTL 值dig example.com
# 使用不同 DNS 服务器对比结果dig @8.8.8.8 example.comdig @1.1.1.1 example.com与其他工具对比
| 工具 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
dig | 输出详细、功能丰富、支持脚本 | 输出信息较多 | 详细诊断、技术排查 |
nslookup | 简单易用、交互模式 | 功能有限、部分平台已弃用 | 快速查询 |
host | 简单直观 | 功能有限 | 快速查询 |
总结
dig 是网络管理员和开发人员必备的 DNS 诊断工具,掌握其使用方法可以帮助您:
- 快速验证 DNS 配置:检查 A 记录、MX 记录、NS 记录等
- 排查网络问题:诊断 DNS 解析失败、邮件发送失败等问题
- 监控 DNS 健康:追踪 TTL 值、检查 DNS 传播状态
- 安全检查:验证 SPF、DKIM、DMARC 记录
无论是日常的 DNS 配置检查,还是复杂的网络故障排查,dig 都是不可或缺的利器。建议配合 +trace、+short、-x 等选项,根据具体场景灵活使用。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!