Linux DNS 查询完全指南:从dig入门到精通
掌握 Linux 下最强大的 DNS 排查工具,成为网络排障专家
前言:为什么需要了解 DNS 查询?
DNS(域名系统)是互联网的“电话簿”,它将人类易记的域名(如www.example.com)转换为机器可读的 IP 地址(如93.184.216.34)。当网站无法访问、解析缓慢或怀疑被劫持时,一个高效的 DNS 查询工具就是你的“照妖镜”。
在 Linux 生态中,dig(Domain Information Groper)毫无疑问是 DNS 查询领域的“瑞士军刀”——功能最全、细节最丰富、输出最可控。本文将带你从零开始,全面掌握dig的使用,同时简要介绍其他辅助工具。
一、环境准备:安装dig
1.1 检查是否已安装
whichdig# 或dig-v1.2 各发行版安装命令
| 发行版 | 命令 |
|---|---|
| Ubuntu / Debian | sudo apt install dnsutils -y |
| CentOS / RHEL / Fedora | sudo yum install bind-utils -y或sudo dnf install bind-utils -y |
| Alpine Linux | apk add bind-tools |
| Arch Linux | sudo pacman -S bind-tools |
二、dig命令核心语法
dig[@DNS服务器][域名][记录类型][选项参数]| 参数部分 | 说明 | 示例 |
|---|---|---|
@DNS服务器 | 指定查询的目标 DNS 服务器(默认使用/etc/resolv.conf) | @8.8.8.8 |
域名 | 要查询的目标域名 | www.baidu.com |
记录类型 | DNS 资源记录类型(默认 A) | A、AAAA、MX、CNAME、NS、TXT、SOA |
选项参数 | 控制输出格式与行为 | +trace、+short、+json |
三、最常用的 DNS 记录类型(全解析)
| 类型 | 全称 | 作用说明 | 查询示例 |
|---|---|---|---|
| A | Address | 返回域名对应的 IPv4 地址 | dig example.com A |
| AAAA | IPv6 Address | 返回域名对应的 IPv6 地址 | dig example.com AAAA |
| CNAME | Canonical Name | 返回域名的别名(指向另一个规范域名) | dig www.example.com CNAME |
| MX | Mail Exchange | 返回邮件服务器地址及优先级(数值越小优先级越高) | dig example.com MX |
| NS | Name Server | 返回该域名的权威名称服务器 | dig example.com NS |
| TXT | Text | 返回文本记录(常用于 SPF、DKIM、域名验证等) | dig example.com TXT |
| SOA | Start of Authority | 返回区域权威信息(主 DNS、管理员邮箱、刷新时间等) | dig example.com SOA |
| PTR | Pointer | 反向解析:根据 IP 查询对应的域名 | dig -x 8.8.8.8 |
| SRV | Service | 返回特定服务的服务器位置(常用于 SIP、LDAP) | dig _sip._tcp.example.com SRV |
| CAA | Certification Authority | 返回允许为域名签发证书的 CA 列表 | dig example.com CAA |
| ANY | All Types | 返回所有类型的记录(⚠️ 现代 DNS 多已禁用) | dig example.com ANY |
四、dig输出结果详解(逐段解读)
执行dig baidu.com后,输出通常包含以下 6 个部分:
4.1 Header(头信息)
; <<>> DiG 9.16.1-Ubuntu <<>> baidu.com ;; global options: +cmd- 显示使用的
dig版本、查询的目标域名。 global options: +cmd表示当前启用的全局选项。
4.2 OPT PSEUDOSECTION(EDNS 扩展段)
;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12345 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232- status: NOERROR:查询成功(其他状态:NXDOMAIN 域名不存在,SERVFAIL 服务器故障)。
- flags:
qr(查询响应)、rd(期望递归)、ra(服务器支持递归)。 - udp: 1232:支持的最大 UDP 数据包大小。
4.3 QUESTION SECTION(问题段)
;; QUESTION SECTION: ;baidu.com. IN A- 这里显示你问了什么:查询
baidu.com的 A 记录。
4.4 ANSWER SECTION(应答段)⭐ 核心
;; ANSWER SECTION: baidu.com. 210 IN A 110.242.68.66 baidu.com. 210 IN A 110.242.68.4- 210:TTL(Time To Live),单位秒,表示这条记录在本地缓存的有效时长。
- IN:Internet 类(固定)。
- A:记录类型。
- IP 地址:最终的解析结果。
4.5 AUTHORITY SECTION(权威段)
;; AUTHORITY SECTION: baidu.com. 64810 IN NS ns4.baidu.com. baidu.com. 64810 IN NS ns7.baidu.com.- 显示该域名由哪些权威 DNS 服务器负责管理。
4.6 ADDITIONAL SECTION(附加段)
;; ADDITIONAL SECTION: ns4.baidu.com. 64810 IN A 112.80.248.73 ns7.baidu.com. 64810 IN A 180.76.76.76- 提供权威 NS 服务器对应的 IP 地址,帮助减少额外查询。
4.7 Footer(统计段)
;; Query time: 23 msec ;; SERVER: 127.0.0.53#53(127.0.0.53) ;; WHEN: Sun Aug 02 10:30:00 CST 2026 ;; MSG SIZE rcvd: 112- Query time:查询耗时(毫秒),反映 DNS 服务器的响应速度。
- SERVER:实际响应的 DNS 服务器地址。
- MSG SIZE:响应数据包大小。
五、核心参数详解(按使用频率排序)
5.1+short—— 输出精简结果
只返回最终的 IP 地址,适合脚本处理和快速查看:
$digbaidu.com +short110.242.68.66110.242.68.45.2+trace—— 完整追踪解析路径 🔥
模拟 DNS 递归解析全过程,从根服务器 → 顶级域服务器 → 权威服务器,直至拿到最终答案。这是排查 DNS 链路的“终极武器”:
digwww.jd.com +trace输出示例解读:
. 518400 IN NS a.root-servers.net. # 第一步:根服务器 . 518400 IN NS b.root-servers.net. ;; Received 525 bytes from 192.168.1.1#53 in 2 ms com. 172800 IN NS a.gtld-servers.net. # 第二步:.com 顶级域 com. 172800 IN NS b.gtld-servers.net. ;; Received 1174 bytes from 198.41.0.4#53 in 180 ms jd.com. 86400 IN NS ns1.jd.com. # 第三步:jd.com 权威 DNS jd.com. 86400 IN NS ns2.jd.com. ;; Received 113 bytes from 192.48.79.30#53 in 86 ms www.jd.com. 30 IN A 123.125.114.144 # 最终答案 ;; Received 63 bytes from 123.125.114.144#53 in 25 ms5.3+noall +answer—— 只显示应答部分
过滤掉杂乱的辅助信息,只看最终解析结果:
digbaidu.com +noall +answer# 输出只包含 ANSWER SECTION5.4+stats—— 显示统计信息
显示查询耗时、服务器响应时间等:
digbaidu.com +stats5.5+json—— JSON 格式输出
便于程序解析(需要较新版本的dig):
digbaidu.com +json5.6+tcp—— 强制使用 TCP 协议
默认使用 UDP,某些场景(如 DNSSEC 或大响应包)需要 TCP:
digbaidu.com +tcp5.7-x—— 反向查询(IP → 域名)
根据 IP 地址反查对应的域名:
dig-x8.8.8.8# 输出:dns.google.5.8-f—— 批量查询
从一个文件中读取多个域名,一次性查询:
echo"baidu.com">domains.txtecho"google.com">>domains.txtdig-fdomains.txt5.9+dnssec—— DNSSEC 验证
查询并验证 DNSSEC 签名:
digsigfail.verteiltesysteme.net +dnssec# 会显示签名验证失败信息digsigok.verteiltesysteme.net +dnssec# 会显示签名验证成功信息六、实战场景示例
场景1:排查本地 DNS 是否有问题
# 对比本地 DNS 和公共 DNS 的结果digbaidu.com# 使用本地 /etc/resolv.conf 中的 DNSdig@8.8.8.8 baidu.com# 使用 Google DNSdig@1.1.1.1 baidu.com# 使用 Cloudflare DNS# 如果结果不同,说明本地 DNS 可能被污染或缓存异常场景2:检查 DNS 解析是否被劫持
# 用 +trace 追踪完整路径,看是否被中间节点篡改digwww.google.com +trace# 如果权威服务器返回的结果与最终答案不符,说明存在劫持场景3:检查新添加的域名解析是否生效
# 直接查询权威 DNS 服务器,跳过本地缓存dig@ns1.yourdomain.com yourdomain.com A# 如果权威服务器返回新记录,说明已生效场景4:测量 DNS 查询延迟
digbaidu.com +stats|grep"Query time"# 输出:;; Query time: 23 msec场景5:批量检查多个域名的 IP
fordomaininbaidu.com sina.com163.com;doecho-n"$domain: "dig+short$domaindone场景6:CDN 节点归属查询(反向解析)
dig-x123.125.114.144# 输出:spider.123.125.114.144 → 百度蜘蛛的 IP场景7:检查邮件服务器配置
# 查询 MX 记录dig163.com MX +short# 输出:10 163mx01.mxmail.netease.com.# 查询 SPF 记录(TXT 类型的一部分)dig163.com TXT +short|grepspf场景8:域名迁移验证
# 迁移前备份所有记录digexample.com ANY>dns_backup.txt# 迁移后对比 NS 记录digexample.com NS +short七、高级技巧:~/.digrc配置文件
在用户目录下创建.digrc文件,设置默认参数,每次执行dig时自动生效:
echo"+noall +answer +stats">~/.digrc之后每次执行dig baidu.com,都会自动应用+noall +answer +stats,只显示答案和统计信息,省去手动敲参。
八、dig查询结果状态码速查表
| 状态码 | 含义 | 常见原因 |
|---|---|---|
| NOERROR | 查询成功 | 正常响应 |
| NXDOMAIN | 域名不存在 | 域名拼写错误或未注册 |
| SERVFAIL | 服务器故障 | DNS 服务器配置错误或上游不可达 |
| REFUSED | 拒绝查询 | 服务器策略拒绝(如 ACL 限制) |
| FORMERR | 格式错误 | 查询报文格式有误 |
| NOTIMP | 未实现 | 服务器不支持该查询类型 |
九、其他 DNS 查询工具(简要介绍)
除了dig,Linux 下还有其他常用 DNS 查询工具,各有侧重。
9.1nslookup—— 交互式查询工具
系统自带,支持交互式和非交互式两种模式。
# 非交互式:直接查询nslookupbaidu.com# 指定 DNS 服务器nslookupbaidu.com8.8.8.8# 查询 MX 记录nslookup-type=MX163.com# 交互式模式(输入 exit 退出)nslookup>settype=MX>163.com>exit适用场景:快速查询、交互式调试。
9.2host—— 精简版查询工具
系统自带,输出简洁,适合快速查看。
# 基础查询hostbaidu.com# 指定类型host-tMX163.com# 反向查询host8.8.8.8# 查询所有记录host-abaidu.com适用场景:快速确认域名是否有解析。
9.3whois—— 域名注册信息查询
查询域名的注册人、注册商、创建时间、过期时间等。
# 安装(Ubuntu/Debian)sudoaptinstallwhois-y# 查询域名信息whois baidu.com适用场景:查询域名归属、过期时间、联系信息。
9.4dnsrecon—— 安全审计工具 🔒
专用于 DNS 枚举和信息收集的安全工具,可进行区域传输、子域名爆破等。
# 安装sudoaptinstalldnsrecon-y# 基础枚举dnsrecon-dbaidu.com# 字典爆破子域名dnsrecon-dbaidu.com-D/usr/share/wordlists/subdomains.txt适用场景:安全测试、子域名发现、DNS 配置审计。
9.5 在线 DNS 查询工具
无需安装,浏览器即可使用,适合临时查询。
| 工具名称 | 特点 |
|---|---|
| 站长工具 DNS 查询 | 国内访问快,支持多地解析对比 |
| DNSPod 公共 DNS 诊断 | 腾讯出品,诊断工具完善 |
| MXToolbox | 国际知名,支持 DNS、邮件、黑名单等全方位检测 |
| Google Admin Toolbox | Google 官方工具,包含 Dig、DNS 检查等 |
适用场景:临时查询、跨地域解析对比、非 Linux 环境。
9.6 各工具对比总结
| 工具 | 详细程度 | 适用场景 | 系统自带 |
|---|---|---|---|
dig | ⭐⭐⭐⭐⭐ | 专业深度排查、链路追踪 | ❌(需安装) |
nslookup | ⭐⭐⭐ | 日常快速查询、交互调试 | ✅ |
host | ⭐⭐ | 快速确认有无解析 | ✅ |
whois | ⭐⭐ | 查询域名注册信息 | ❌(需安装) |
dnsrecon | ⭐⭐⭐⭐ | 安全测试、子域名枚举 | ❌(需安装) |
| 在线工具 | ⭐⭐ | 临时查询、跨地域对比 | 无需安装 |
十、常见报错与解决方法
| 报错信息 | 原因 | 解决方法 |
|---|---|---|
;; connection timed out; no servers could be reached | DNS 服务器不可达 | 检查网络连接,或换用@8.8.8.8 |
;; Got answer: SERVFAIL | DNS 服务器无法解析该域名 | 可能域名不存在,或服务器配置错误 |
;; Got answer: NXDOMAIN | 域名不存在 | 检查域名是否拼写错误 |
;; Got answer: REFUSED | 服务器拒绝查询 | 换用公共 DNS(如 8.8.8.8) |
dig: command not found | 未安装 dig | 参照第一章安装dnsutils |
总结
dig是 Linux 下 DNS 排障的“第一利器”,其核心优势在于:
- 输出可控:通过
+short、+noall +answer等参数精准控制输出。 - 链路追踪:
+trace是诊断解析链问题的核心武器。 - 批量处理:
-f支持批量查询,配合脚本实现自动化。 - 协议支持:支持 UDP/TCP、EDNS、DNSSEC 等高级特性。
配合nslookup(快速查询)、whois(注册信息)和在线工具(跨地域对比),你可以应对日常工作中 99% 的 DNS 排查场景。
如果本文对你有帮助,欢迎点赞、收藏、转发!😊