dig (Domain Information Groper) 是一个功能强大的用于查询 DNS 域名服务器的命令行工具,它比 nslookup 更灵活,输出信息也更详细,是系统管理员和开发人员排查网络问题的首选工具之一。

安装 dig
在大多数现代 Linux 发行版中,dig 通常与 dnsutils 或 bind-utils 软件包捆绑在一起,如果你的系统中没有 dig,可以使用以下命令进行安装:
对于 Debian / Ubuntu:
sudo apt update sudo apt install dnsutils
对于 CentOS / RHEL / Fedora:
sudo yum install bind-utils # 或者对于 dnf sudo dnf install bind-utils
对于 Arch Linux:

sudo pacman -S bind-tools
安装完成后,可以通过 dig -v 检查版本。
基本语法
dig 命令的基本语法如下:
dig [全局选项] [命令] [查询选项] [域名] [查询类型] [查询类]
在大多数日常使用中,我们只需要关注最核心的部分:
dig @DNS服务器地址 域名 查询类型
常用查询示例
示例 1:查询 A 记录(最常用)
A 记录用于将域名映射到 IPv4 地址,如果不指定查询类型,dig 默认查询 A 记录。

dig www.google.com
输出解析:
HEADER部分:显示了查询的通用信息,如状态(status: NOERROR)、opcode等。QUESTION SECTION:显示了你的查询内容,这里是www.google.com. IN A。ANSWER SECTION:这是最重要的部分,包含了 DNS 服务器的返回结果,你会看到www.google.com对应的 IP 地址。AUTHORITY SECTION:显示该域名有权威 DNS 服务器。ADDITIONAL SECTION:显示一些额外的辅助信息,例如权威服务器的 IP 地址。Query time:查询耗时,单位是毫秒。SERVER:本次查询所使用的 DNS 服务器(通常是你的系统配置的/etc/resolv.conf里的服务器)。WHEN:查询发生的时间。MSG SIZE rcvd:接收到的响应报文大小。
示例 2:指定 DNS 服务器进行查询
使用 符号可以指定要查询的 DNS 服务器,这对于排查特定 DNS 服务器的解析问题非常有用。
# 使用 Google 的公共 DNS 服务器查询 dig @8.8.8.8 www.baidu.com # 使用 Cloudflare 的公共 DNS 服务器查询 dig @1.1.1.1 www.github.com
示例 3:查询不同类型的 DNS 记录
DNS 不仅仅是 A 记录,还有很多其他类型的记录。
-
查询 NS (Name Server) 记录:显示该域名的权威域名服务器是哪些。
dig example.com NS
-
查询 MX (Mail Exchange) 记录:显示该域名的邮件服务器是哪些。
dig google.com MX
-
查询 CNAME (Canonical Name) 记录:显示域名的别名。
dig www.github.com CNAME
-
查询 TXT 记录:通常用于 SPF 记录、验证域名所有权等。
dig example.com TXT
-
查询 SOA (Start of Authority) 记录:显示该域名的权威记录信息,如管理员邮箱、序列号等。
dig example.com SOA
示例 4:反向查询 (PTR 记录)
根据 IP 地址查找对应的域名。
dig -x 8.8.8.8
-x 选项是反向查询的快捷方式,它会自动将 IP 地址格式化为 in-addr.arpa 域名进行查询。
示例 5:查询任何类型的记录
使用 ANY 类型可以一次性查询该域名下的所有可用记录类型。
dig google.com ANY
常用选项
dig 提供了许多选项来控制输出格式和查询行为。
| 选项 | 描述 | 示例 |
|---|---|---|
+short |
极简模式,只返回答案部分,非常适合在脚本中使用。 | dig +short www.google.com |
+noall |
禁止显示所有部分。 | dig +noall ... |
+answer |
只显示 ANSWER SECTION。 |
dig +answer www.google.com |
+authority |
只显示 AUTHORITY SECTION。 |
dig +authority example.com |
+additional |
只显示 ADDITIONAL SECTION。 |
dig +additional example.com |
+trace |
跟踪模式,会从根域名服务器开始,依次查询各级域名的权威服务器,直到最终目标域名,这是排查 DNS 解析路径问题的利器。 | dig +trace www.example.com |
+nostats |
禁止显示最后的统计信息(Query time, SERVER 等)。 | dig +nostats www.google.com |
+time=N |
设置等待响应的超时时间,单位是秒,默认为 5 秒。 | dig +time=2 www.google.com |
+retry=N |
设置查询失败时的重试次数,默认为 2 次。 | dig +retry=5 www.google.com |
组合使用示例:
# 只获取 IP 地址 dig +short www.google.com # 输出: 142.250.199.110 # 跟踪解析路径 dig +trace www.example.com # 这会输出大量的查询过程,帮助你了解 DNS 查询是如何一步步完成的。 # 只显示 NS 记录 dig +short example.com NS # 输出: ns1.example.com. ns2.example.com.
与 nslookup 的对比
| 特性 | dig |
nslookup |
|---|---|---|
| 输出格式 | 结构化、详细,默认为文本格式,易于解析和阅读。 | 交互式和命令行两种模式,输出格式相对简单。 |
| 功能 | 功能强大,选项丰富,支持 +trace、+short 等高级功能。 |
功能相对基础,主要用于简单的查询。 |
| 脚本友好 | 非常友好。+short 模式是脚本中的首选。 |
不太友好,需要处理交互模式或解析非结构化输出。 |
| 默认安装 | 通常在 dnsutils 包中,可能需要手动安装。 |
通常在 bind-utils 包中,或在某些系统中是基础系统工具。 |
对于日常的 DNS 排查和自动化脚本,dig 是更优的选择。
实际应用场景
-
网站无法访问:
- 首先检查域名是否能解析到正确的 IP:
dig +short www.example.com。 - 如果无法解析,尝试更换 DNS 服务器(如
@8.8.8.8)确认是否是本地 DNS 问题。 - 如果换了 DNS 服务器能解析,说明是本地 DNS 服务器配置问题。
- 首先检查域名是否能解析到正确的 IP:
-
邮箱发送失败:
- 检查域名的 MX 记录是否正确配置:
dig example.com MX。 - 检查 SPF 记录是否存在且格式正确:
dig example.com TXT。
- 检查域名的 MX 记录是否正确配置:
-
服务切换到新 IP,但用户仍访问旧地址:
- 使用
dig检查全球各地的 DNS 缓存情况,确认是否 TTL (Time To Live) 过期,可以结合+trace查看解析路径。
- 使用
-
配置负载均衡:
- 检查一个域名是否有多个 A 记录,指向不同的 IP 地址:
dig www.example.com A。
- 检查一个域名是否有多个 A 记录,指向不同的 IP 地址:
希望这份详细的指南能帮助你熟练掌握 dig 命令!
