菜鸟科技网

Linux dig命令,如何高效查询DNS信息并解析常见问题?

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

Linux dig命令,如何高效查询DNS信息并解析常见问题?-图1
(图片来源网络,侵删)

安装 dig

在大多数现代 Linux 发行版中,dig 通常与 dnsutilsbind-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:

Linux dig命令,如何高效查询DNS信息并解析常见问题?-图2
(图片来源网络,侵删)
sudo pacman -S bind-tools

安装完成后,可以通过 dig -v 检查版本。


基本语法

dig 命令的基本语法如下:

dig [全局选项] [命令] [查询选项] [域名] [查询类型] [查询类]

在大多数日常使用中,我们只需要关注最核心的部分:

dig @DNS服务器地址 域名 查询类型

常用查询示例

示例 1:查询 A 记录(最常用)

A 记录用于将域名映射到 IPv4 地址,如果不指定查询类型,dig 默认查询 A 记录。

Linux dig命令,如何高效查询DNS信息并解析常见问题?-图3
(图片来源网络,侵删)
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 是更优的选择。


实际应用场景

  1. 网站无法访问

    • 首先检查域名是否能解析到正确的 IP:dig +short www.example.com
    • 如果无法解析,尝试更换 DNS 服务器(如 @8.8.8.8)确认是否是本地 DNS 问题。
    • 如果换了 DNS 服务器能解析,说明是本地 DNS 服务器配置问题。
  2. 邮箱发送失败

    • 检查域名的 MX 记录是否正确配置:dig example.com MX
    • 检查 SPF 记录是否存在且格式正确:dig example.com TXT
  3. 服务切换到新 IP,但用户仍访问旧地址

    • 使用 dig 检查全球各地的 DNS 缓存情况,确认是否 TTL (Time To Live) 过期,可以结合 +trace 查看解析路径。
  4. 配置负载均衡

    • 检查一个域名是否有多个 A 记录,指向不同的 IP 地址:dig www.example.com A

希望这份详细的指南能帮助你熟练掌握 dig 命令!

分享:
扫描分享到社交APP
上一篇
下一篇