使用 dig 和 nslookup 查询 Linux 中的 DNS 记录

CompTIABeginner
立即练习

介绍

在本实验中,你将学习如何在 Linux 环境下从命令行查询域名系统 (DNS) 记录的基础知识。你将使用两个强大且常用的工具 dignslookup 来执行各种类型的 DNS 查询。这种实践经验对于网络管理员和系统工程师来说至关重要,可以帮助他们排查名称解析问题并理解网络配置。

你将首先通过检查 /etc/resolv.conf 文件来识别你系统的默认 DNS 服务器。然后,你将继续执行几个常见的 DNS 查询,包括查找域名的 IP 地址(A 记录)、通过反向查询(PTR 记录)从 IP 地址发现主机名,以及查找域名的邮件交换(MX)记录。最后,你将学习如何将你的查询定向到特定的公共 DNS 服务器,而不是使用你系统的默认服务器。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 92%。获得了学习者 100% 的好评率。

使用 cat 命令识别你的系统默认 DNS 服务器

在本步骤中,你将学习如何识别你系统配置使用的默认 DNS 服务器。DNS(域名系统)服务器负责将人类可读的域名(如 www.google.com)转换为机器可读的 IP 地址(如 142.250.186.132)。了解你的系统默认查询哪些 DNS 服务器是诊断任何名称解析问题的第一个也是最关键的步骤。

在大多数 Linux 系统上,此配置存储在位于 /etc/resolv.conf 的文件中。我们将使用 cat 命令,这是一个用于连接和显示文件内容的标准实用程序,来查看此文件。

打开你的终端并执行以下命令来显示 resolv.conf 文件的内容:

cat /etc/resolv.conf

你将看到类似以下的输出。nameserver 指令后面的 IP 地址是你的系统将联系以解析域名的 DNS 服务器。

## Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
##     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
## 127.0.0.53 is the systemd-resolved stub resolver.
## run "systemd-resolve --status" to see details about the actual nameservers.

nameserver 127.0.0.53
options timeout:2 attempts:3 rotate single-request-reopen

从输出中,你可以看到 127.0.0.53 是此系统的主要 DNS 服务器。你默认进行的任何不指定特定服务器的 DNS 查询都将发送到这里。现在你已经知道如何查找你的默认 DNS 服务器,你已准备好在下一步进行你的第一次 DNS 查询。

使用 dignslookup 查找域名的 IP 地址(A 记录)

在本步骤中,你将执行一次标准的正向 DNS 查询,这是将域名解析为 IP 地址的过程。这是 DNS 最常见的功能之一。将域名映射到 IPv4 地址的记录类型称为 A 记录。我们将为此任务使用两个流行的命令行工具:nslookupdig

首先,你需要确保这些工具已安装。在基于 Debian 的系统(如 Ubuntu)上,它们是 dnsutils 包的一部分。让我们更新你的包列表并安装它。

sudo apt-get update
sudo apt-get install -y dnsutils

现在工具已准备就绪,让我们使用 nslookup(意为“名称服务器查找”)来查找 www.google.com 的 IP 地址。

nslookup www.google.com

输出显示了响应查询的服务器(来自步骤 1 的你的默认服务器)以及“非权威应答”(Non-authoritative answer),其中包含与 www.google.com 关联的 IP 地址。

Server:         127.0.0.53
Address:        127.0.0.53#53

Non-authoritative answer:
Name:   www.google.com
Address: 142.250.189.196
Name:   www.google.com
Address: 2607:f8b0:4005:80d::2004

接下来,让我们使用 dig(Domain Information Groper)执行相同的查询。dig 通常受到系统管理员的青睐,因为它提供更详细、结构化的输出。

dig www.google.com

检查 dig 的输出。它分为几个部分。QUESTION SECTION 显示了你的查询内容(www.google.comA 记录)。ANSWER SECTION 提供了结果,包括 IP 地址和 TTL(Time To Live)值,该值指示解析器可以缓存此信息多长时间。

; <<>> DiG 9.18.1-1ubuntu1.3-Ubuntu <<>> www.google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5247
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;www.google.com.                        IN      A

;; ANSWER SECTION:
www.google.com.         7       IN      A       142.251.46.196

;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Mon Jul 14 14:55:18 CST 2025
;; MSG SIZE  rcvd: 59

通过比较这两个输出,你可以看到,虽然两个工具都实现了相同的目标,但 dig 提供了更全面的 DNS 响应视图。

使用 dig -x 命令通过 IP 地址查找主机名(PTR 记录)

在本步骤中,你将执行一次反向 DNS 查询。正向查询将域名解析为 IP 地址,而反向查询则做相反的事情:它查找与给定 IP 地址关联的主机名。此过程依赖于一种特殊的 DNS 记录类型,称为 PTR(Pointer)记录。反向查询通常被邮件服务器用于验证发件人身份,并在网络故障排除中用于识别流量来源。

我们将使用你在上一步中发现的 www.google.com 的一个 IP 地址。让我们以 142.251.46.196 为例。

首先,让我们尝试使用你已熟悉的 nslookup 进行反向查询。只需将 IP 地址作为参数提供:

nslookup 142.251.46.196

输出将显示与 IP 地址关联的 name,该名称存储在用于反向 DNS 的特殊 in-addr.arpa 域中。

196.46.251.142.in-addr.arpa     name = nuq04s45-in-f4.1e100.net.

Authoritative answers can be found from:

现在,让我们使用 dig 执行相同的反向查询。dig 命令使用 -x 选项来指定反向查询。这是一个方便的快捷方式,可以为你正确格式化查询。

dig -x 142.251.46.196

观察输出。在 ANSWER SECTION 中,你将找到将 IP 地址映射回其主机名的 PTR 记录。请注意,QUESTION SECTION 如何显示反转的 IP 地址并附加了 .in-addr.arpa,这是 IPv4 反向 DNS 查询的标准格式。

; <<>> DiG 9.18.1-1ubuntu1.3-Ubuntu <<>> -x 142.251.46.196
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46896
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;196.46.251.142.in-addr.arpa.   IN      PTR

;; ANSWER SECTION:
196.46.251.142.in-addr.arpa. 10 IN      PTR     nuq04s45-in-f4.1e100.net.

;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Mon Jul 14 14:56:11 CST 2025
;; MSG SIZE  rcvd: 94

你现在已经成功使用 nslookupdig 执行了反向 DNS 查询,将 IP 地址转换回了主机名。

使用 dig 命令查找域名的邮件交换 (MX) 记录

在本步骤中,你将学习如何查询另一种重要的 DNS 记录类型:邮件交换(MX)记录。MX 记录对于电子邮件传递至关重要。它们指定了负责接收域名邮件的邮件服务器。当你向 user@example.com 发送电子邮件时,你的邮件服务器首先会为 example.com 执行 DNS 查询 MX 记录,以确定将消息发送到何处。

我们将继续使用 dig 命令来查询 google.com 域名的 MX 记录。为此,你需要指定域名,后跟记录类型(MX)。

在你的终端中,运行以下命令:

dig google.com MX

输出将与你之前看到的类似,但 ANSWER SECTION 现在将包含 MX 记录而不是 A 记录。

; <<>> DiG 9.18.1-1ubuntu1.3-Ubuntu <<>> google.com MX
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45070
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;google.com.                    IN      MX

;; ANSWER SECTION:
google.com.             10      IN      MX      10 smtp.google.com.

;; Query time: 12 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Mon Jul 14 14:56:29 CST 2025
;; MSG SIZE  rcvd: 60

请注意 ANSWER SECTION 中邮件服务器主机名之前的数字(10)。这是首选项优先级值。邮件服务器将首先尝试将电子邮件发送到优先级数字最低的服务器。如果该服务器不可用,它们将尝试下一个较低的服务器,依此类推。这提供了一个主备邮件服务器系统。

使用 dig @<服务器> 查询指定的公共 DNS 服务器

在最后这个步骤中,你将学习如何绕过你系统的默认 DNS 服务器,直接向特定的公共 DNS 服务器发送查询。这是一项极其有用的故障排除技术。例如,如果你无法使用默认服务器解析域名,你可以查询像 Google(8.8.8.8)或 Cloudflare(1.1.1.1)这样的可靠公共服务器,以确定问题是出在你本地配置上还是一个更普遍的问题。

dig 命令使这变得很容易。你可以通过在 IP 地址前加上 @ 符号来指定要使用的 DNS 服务器。

让我们查询 Google 的公共 DNS 服务器 8.8.8.8 来查找 www.cloudflare.com 的 IP 地址。

dig @8.8.8.8 www.cloudflare.com

现在,仔细检查输出。密切关注底部的 SERVER 行。它应该显示 8.8.8.8#53,确认你的查询已发送到 Google 的 DNS 服务器并由其回答,而不是你系统的默认服务器(来自步骤 1 的 127.0.0.53)。

; <<>> DiG 9.18.1-1ubuntu1.3-Ubuntu <<>> @8.8.8.8 www.cloudflare.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62439
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.cloudflare.com.            IN      A

;; ANSWER SECTION:
www.cloudflare.com.     300     IN      A       104.16.123.96
www.cloudflare.com.     300     IN      A       104.16.124.96

;; Query time: 16 msec
;; SERVER: 8.8.8.8#53(8.8.8.8) (UDP)
;; WHEN: Mon Jul 14 14:56:45 CST 2025
;; MSG SIZE  rcvd: 79

你已成功将 DNS 查询定向到特定服务器,这是一项用于诊断网络和名称解析问题的强大技能。本实验关于使用 nslookupdig 进行客户端 DNS 查询的内容到此结束。

总结

在本实验中,你学习了如何在 Linux 系统上执行基本的 DNS 查询。你首先通过使用 cat 命令检查 /etc/resolv.conf 文件来识别你系统的默认 DNS 服务器。在此之后,你使用了 dignslookup 工具执行了标准的正向查找,将域名解析为其对应的 IP 地址(A 记录)。

接着,你探索了更高级的查询,包括使用 dig -x 进行反向查找以从 IP 地址获取主机名(PTR 记录),以及如何检索域名的邮件交换(MX)记录。最后,你学会了如何通过使用 dig @<server> 语法将 DNS 查询定向到特定的公共服务器来绕过系统的默认设置,这是一项用于故障排除和测试名称解析的关键技能。