介绍
在本实验中,你将学习如何在 Linux 环境下从命令行查询域名系统 (DNS) 记录的基础知识。你将使用两个强大且常用的工具 dig 和 nslookup 来执行各种类型的 DNS 查询。这种实践经验对于网络管理员和系统工程师来说至关重要,可以帮助他们排查名称解析问题并理解网络配置。
你将首先通过检查 /etc/resolv.conf 文件来识别你系统的默认 DNS 服务器。然后,你将继续执行几个常见的 DNS 查询,包括查找域名的 IP 地址(A 记录)、通过反向查询(PTR 记录)从 IP 地址发现主机名,以及查找域名的邮件交换(MX)记录。最后,你将学习如何将你的查询定向到特定的公共 DNS 服务器,而不是使用你系统的默认服务器。
使用 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 查询。
使用 dig 和 nslookup 查找域名的 IP 地址(A 记录)
在本步骤中,你将执行一次标准的正向 DNS 查询,这是将域名解析为 IP 地址的过程。这是 DNS 最常见的功能之一。将域名映射到 IPv4 地址的记录类型称为 A 记录。我们将为此任务使用两个流行的命令行工具:nslookup 和 dig。
首先,你需要确保这些工具已安装。在基于 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.com 的 A 记录)。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
你现在已经成功使用 nslookup 和 dig 执行了反向 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 查询定向到特定服务器,这是一项用于诊断网络和名称解析问题的强大技能。本实验关于使用 nslookup 和 dig 进行客户端 DNS 查询的内容到此结束。
总结
在本实验中,你学习了如何在 Linux 系统上执行基本的 DNS 查询。你首先通过使用 cat 命令检查 /etc/resolv.conf 文件来识别你系统的默认 DNS 服务器。在此之后,你使用了 dig 和 nslookup 工具执行了标准的正向查找,将域名解析为其对应的 IP 地址(A 记录)。
接着,你探索了更高级的查询,包括使用 dig -x 进行反向查找以从 IP 地址获取主机名(PTR 记录),以及如何检索域名的邮件交换(MX)记录。最后,你学会了如何通过使用 dig @<server> 语法将 DNS 查询定向到特定的公共服务器来绕过系统的默认设置,这是一项用于故障排除和测试名称解析的关键技能。



