DNS查询利器:dig工具完全指南

2735 字
14 分钟
DNS查询利器:dig工具完全指南

dig 工具简介#

dig(Domain Information Groper)是一个功能强大的 DNS 查询工具,用于查询 DNS 域名服务器。它是 BIND(Berkeley Internet Name Domain)软件包的一部分,广泛用于 DNS 故障诊断、域名解析验证和网络配置检查。

与传统的 nslookup 工具相比,dig 的优势在于:

  • 输出信息更加详细和结构化
  • 支持多种 DNS 记录类型查询
  • 提供更丰富的调试信息
  • 支持批量查询和脚本化操作
  • 几乎所有 Linux/Unix 系统预装

基本语法#

Terminal window
dig [@服务器] [域名] [类型] [选项]

参数说明:

  • @服务器:指定查询的 DNS 服务器(如 @8.8.8.8
  • 域名:要查询的域名
  • 类型:DNS 记录类型(如 A、MX、CNAME、TXT 等)
  • 选项:控制输出格式和查询行为的选项

常用 DNS 记录类型#

记录类型说明用途
AIPv4 地址记录将域名映射到 IPv4 地址
AAAAIPv6 地址记录将域名映射到 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 记录(默认)#

Terminal window
dig example.com

指定 DNS 服务器查询#

Terminal window
dig @8.8.8.8 example.com

查询特定记录类型#

Terminal window
# 查询 MX 记录
dig example.com MX
# 查询 NS 记录
dig example.com NS
# 查询 TXT 记录
dig example.com TXT
# 查询 SOA 记录
dig example.com SOA
# 查询所有记录
dig example.com ANY

精简输出#

Terminal window
dig +short example.com

只显示回答部分#

Terminal window
dig +noall +answer example.com

反向 DNS 查找#

Terminal window
dig -x 8.8.8.8

追踪解析过程#

Terminal window
dig +trace example.com

输出解读#

完整输出示例#

Terminal window
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: 1
  • opcode:操作类型,通常为 QUERY
  • status:返回状态,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: 55
  • Query time:查询耗时
  • SERVER:使用的 DNS 服务器
  • WHEN:查询时间
  • MSG SIZE:响应消息大小

Trace 输出解读#

+trace 选项会模拟 DNS 递归解析的完整过程,从根域名服务器开始,逐级向下查询,直到找到目标域名的授权 DNS 服务器并获取最终记录。这对于排查 DNS 配置问题、验证 DNS 传播状态非常有用。

Trace 输出示例#

Terminal window
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 ms

Trace 输出详解#

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

字段说明

字段说明
域名.根域名
TTL518400生存时间(秒,约6天)
INInternet 类
类型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.顶级域名
TTL172800生存时间(秒,约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.二级域名
TTL172800生存时间(秒,约2天)
类型NS域名服务器记录
a.iana-servers.netexample.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.目标域名
TTL86400生存时间(秒,约1天)
类型AIPv4 地址记录
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 服务器不可用
  • 网络连接问题

排查方法

Terminal window
# 测试与 DNS 服务器的连通性
ping 198.41.0.4
# 使用 TCP 协议重试
dig +tcp +trace example.com

问题 2:NS 记录不一致#

在不同的顶级域名服务器返回了不同的 NS 记录列表。

可能原因

  • DNS 传播未完成
  • NS 记录配置错误
  • DNS 缓存问题

排查方法

Terminal window
# 向多个顶级域名服务器查询 NS 记录
dig @a.gtld-servers.net example.com NS
dig @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. 追踪特定记录类型#

Terminal window
# 追踪 MX 记录
dig +trace example.com MX
# 追踪 TXT 记录
dig +trace example.com TXT
# 追踪 CNAME 记录
dig +trace www.example.com CNAME

2. 使用特定 DNS 服务器开始追踪#

Terminal window
# 从 Cloudflare DNS 开始
dig @1.1.1.1 +trace example.com
# 从本地 DNS 开始(系统默认)
dig +trace example.com

3. 对比多个 DNS 服务商的解析结果#

Terminal window
# Google DNS
dig @8.8.8.8 +trace example.com
# Cloudflare DNS
dig @1.1.1.1 +trace example.com
# 国内 DNS
dig @114.114.114.114 +trace example.com

通过对比不同 DNS 服务商的 trace 输出,可以:

  • 检查 DNS 传播状态
  • 识别 CDN 智能解析策略
  • 排查特定 DNS 服务商的问题

注意+trace 会执行多次 DNS 查询,总耗时会比普通查询长很多,这是正常现象。

常见场景#

验证 DNS 解析#

Terminal window
# 检查域名是否正确解析
dig +short example.com
# 检查是否使用了正确的 DNS 服务器
dig example.com NS

排查邮件问题#

Terminal window
# 检查 MX 记录
dig +short example.com MX
# 检查 SPF 记录
dig +short example.com TXT
# 检查反向解析(防止邮件被标记为垃圾邮件)
dig -x <邮件服务器IP>

诊断 CDN 配置#

Terminal window
# 检查 CNAME 配置
dig +short www.example.com CNAME
# 检查边缘节点
dig +trace www.example.com

排查 DNS 缓存问题#

Terminal window
# 检查 TTL 值
dig example.com
# 使用不同 DNS 服务器对比结果
dig @8.8.8.8 example.com
dig @1.1.1.1 example.com

与其他工具对比#

工具优点缺点适用场景
dig输出详细、功能丰富、支持脚本输出信息较多详细诊断、技术排查
nslookup简单易用、交互模式功能有限、部分平台已弃用快速查询
host简单直观功能有限快速查询

总结#

dig 是网络管理员和开发人员必备的 DNS 诊断工具,掌握其使用方法可以帮助您:

  1. 快速验证 DNS 配置:检查 A 记录、MX 记录、NS 记录等
  2. 排查网络问题:诊断 DNS 解析失败、邮件发送失败等问题
  3. 监控 DNS 健康:追踪 TTL 值、检查 DNS 传播状态
  4. 安全检查:验证 SPF、DKIM、DMARC 记录

无论是日常的 DNS 配置检查,还是复杂的网络故障排查,dig 都是不可或缺的利器。建议配合 +trace+short-x 等选项,根据具体场景灵活使用。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

DNS查询利器:dig工具完全指南
https://blog.cllll.link/posts/dig-dns-query-tool-guide/
作者
clll
发布于
2026-05-21
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
clll
Hello, I'm clll.
公告
Hello, World!
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
17
分类
3
标签
48
总字数
27,020
运行时长
0
最后活动
0 天前

目录