在 Linux 中执行 IPv6 DNS 查询

CompTIABeginner
立即练习

介绍

在本实验中,你将学习在 Linux 系统上执行和验证 IPv6 DNS 查询所需的基本技能。你将探索 Linux 系统如何将域名解析为 IPv6 地址,这是现代网络中的一项关键功能。通过实践操作,你将学习使用标准的命令行工具来查询 IPv6 地址记录并测试网络连接。

你将首先检查 /etc/resolv.conf 文件,以识别已配置的 DNS 服务器。接下来,你将使用两个强大的工具 dignslookup 来专门查询 AAAA 记录,该记录将域名映射到 IPv6 地址。最后,你将使用 ping6 命令来确认你的系统可以使用其 IPv6 地址与目标建立直接连接,从而完成解析和连接的完整流程。

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

检查 /etc/resolv.conf 中的 DNS 服务器配置

在此步骤中,你将定位并检查你的 Ubuntu 系统上的 DNS 服务器配置。这是理解你的机器如何将域名解析为 IP 地址的基础步骤,这对包括 IPv6 在内的所有网络通信都至关重要。

Linux 上 DNS 解析的主要配置文件是 /etc/resolv.conf。此文件列出了你的系统将查询的名称服务器的 IP 地址。

首先,让我们查看此文件的内容。在你的终端中,该终端已打开并位于 ~/project 目录,运行以下命令:

cat /etc/resolv.conf

此命令读取 /etc/resolv.conf 文件,并直接在终端中显示其内容。

你应该会看到一个或多个以 nameserver 开头的行。这些条目定义了 DNS 服务器。地址可以是 IPv4(例如 8.8.8.8)或 IPv6(例如 2001:4860:4860::8888)。识别这些服务器是诊断任何 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 处的 systemd-resolved 存根解析器。这是一个本地 DNS 解析器,它会将请求转发到为你的系统配置的实际 DNS 服务器。你可以运行 systemd-resolve --status 来查看正在使用的实际名称服务器的详细信息。如果你的系统配置为 IPv6 DNS,你将在此处看到一个 IPv6 格式的地址。

通过完成此步骤,你现在知道如何查找你的系统在名称解析中依赖的 DNS 服务器。在下一步中,你将使用一个命令行工具来主动查询其中一个服务器的 IPv6 地址记录。

使用 dig 查询 IPv6 AAAA 记录

在此步骤中,你将使用 dig 命令行工具向 DNS 服务器专门查询 IPv6 地址记录。虽然 A 记录将域名映射到 IPv4 地址,但 AAAA 记录(或称“四重 A”记录)将域名映射到 IPv6 地址。

dig(domain information groper)实用程序是一个强大且灵活的 DNS 服务器查询工具。它是 dnsutils 包的一部分,该包可能默认未安装。

首先,让我们确保你的系统上安装了 dig。运行以下命令来更新你的包列表并安装 dnsutils

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

现在 dig 已安装,你可以使用它来查找已知启用 IPv6 的域(例如 ipv6.google.com)的 AAAA 记录。

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

dig AAAA ipv6.google.com

此命令指示 dig 搜索域名 ipv6.google.comAAAA 类型记录。

让我们检查输出。它分为几个部分,但对我们来说最重要的部分是 ANSWER SECTION

示例输出:

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

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

;; ANSWER SECTION:
ipv6.google.com.        10      IN      CNAME   ipv6.l.google.com.
ipv6.l.google.com.      10      IN      AAAA    2607:f8b0:4005:814::200e

;; Query time: 148 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Thu Jul 17 10:56:59 CST 2025
;; MSG SIZE  rcvd: 93

ANSWER SECTION 中,你可以看到 ipv6.google.com 首先解析为指向 ipv6.l.google.com 的 CNAME 记录,然后该记录又解析为一个 IPv6 地址(例如 2607:f8b0:4005:814::200e)。CNAME 和 AAAA 记录的存在都证实了 ipv6.google.com 拥有 IPv6 地址,并且你的系统已成功解析它。

你现在已经成功使用 dig 执行了特定的 IPv6 DNS 查询。在下一步中,你将学习如何使用另一个常用工具 nslookup 来执行相同的操作。

使用 nslookup 查询 AAAA 记录

在此步骤中,你将学习使用另一个常用工具 nslookup 来执行相同的查询 AAAA 记录的任务。虽然系统管理员通常更喜欢 dig 提供的详细输出,但 nslookup 也广泛可用,并且对于快速查找很有用。

nslookup(name server lookup)工具也是 dnsutils 包的一部分,你已在之前的步骤中安装了它,因此无需安装任何新内容。

要让 nslookup 查找特定类型的记录,你使用 -query= 选项。我们将再次查找 AAAA 记录以找到域的 IPv6 地址。这次让我们使用一个不同的启用 IPv6 的域,例如 facebook.com

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

nslookup -query=AAAA facebook.com

此命令指示 nslookup 从默认 DNS 服务器专门请求 facebook.comAAAA 记录。

nslookup 的输出通常比 dig 更简洁。查找“Non-authoritative answer”部分。

示例输出:

Server:         127.0.0.53
Address:        127.0.0.53#53

Non-authoritative answer:
Name:   facebook.com
Address: 2a03:2880:f131:83:face:b00c:0:25de

输出在“Non-authoritative answer”部分清晰地显示了与 facebook.com 关联的 IPv6 地址。“Non-authoritative”一词仅表示答案来自一个不是该域最终权威的 DNS 服务器,这对于递归 DNS 查询来说是正常的。

你现在已经成功使用了两个不同的工具 dignslookup 将域名解析为 IPv6 地址。在最后一步中,你将使用其中一个已解析的域来测试实际的网络连接。

使用 ping6 测试 IPv6 连接性

在最后一步中,你将结合 DNS 解析和网络测试来验证端到端的 IPv6 连接性。在前面的步骤中成功将域名解析到其 IPv6 地址后,你现在需要检查你的系统是否真的可以通过网络与该地址通信。

为此,你将使用 ping6 命令。此实用程序是熟悉的 ping 命令的 IPv6 等效项,用于通过向目标主机发送 ICMPv6 echo request 数据包来测试网络可达性。

当你为 ping6 提供域名时,它会执行两个操作:

  1. 它首先通过查询 AAAA 记录将域名解析为 IPv6 地址。
  2. 然后它向解析出的 IPv6 地址发送 ping 数据包。

让我们测试与 ipv6.google.com 的连接性。我们将使用 -c 4 选项仅发送 4 个数据包然后停止;否则,ping 将无限期运行。

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

ping6 -c 4 ipv6.google.com

观察输出。如果你的系统具有有效的 IPv6 Internet 连接,你将看到成功的回复。

成功输出示例:

PING ipv6.google.com(prg03s07-in-x0e.1e100.net (2a00:1450:4001:82e::200e)) 56 data bytes
64 bytes from prg03s07-in-x0e.1e100.net (2a00:1450:4001:82e::200e): icmp_seq=1 ttl=118 time=1.23 ms
64 bytes from prg03s07-in-x0e.1e100.net (2a00:1450:4001:82e::200e): icmp_seq=2 ttl=118 time=1.30 ms
64 bytes from prg03s07-in-x0e.1e100.net (2a00:1450:4001:82e::200e): icmp_seq=3 ttl=118 time=1.25 ms
64 bytes from prg03s07-in-x0e.1e100.net (2a00:1450:4001:82e::200e): icmp_seq=4 ttl=118 time=1.28 ms

--- ipv6.google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 1.230/1.265/1.300/0.027 ms

大多数实验环境中的预期输出:

ping6: connect: Network is unreachable

重要提示: 在 LabEx VM 中,当你尝试 ping IPv6 地址时,很可能会看到“Network is unreachable”(网络不可达)。这是因为实验环境可以解析 IPv6 地址,但没有到公共互联网的 IPv6 路由。这种情况很常见,被称为“IPv6 鸿沟”(IPv6 gap),它展示了成功的 DNS 解析与实际网络连接之间的关键区别。前面的步骤中 DNS 解析成功但此处连接失败的事实说明,即使无法建立实际的 IPv6 连接,你的系统也能正确查询和接收 IPv6 地址。

恭喜!你已完成此实验。你已学会如何检查本地 DNS 配置,使用 dignslookup 查询 IPv6 AAAA 记录,以及使用 ping6 测试 IPv6 连接性。

总结

在此实验中,你学习了在 Linux 环境中执行 IPv6 DNS 查询的基础步骤。你首先检查了 /etc/resolv.conf 文件,以识别你的系统配置使用的 DNS 服务器。然后,你练习使用了两个重要的命令行工具 dignslookup 来专门查询 IPv6 AAAA 记录,成功地将域名解析为其对应的 IPv6 地址。

最后,你使用 ping6 命令测试了 IPv6 连接性,这展示了 DNS 解析与实际网络连接之间的重要区别。即使实验环境可以成功解析 IPv6 地址,但它缺乏到公共互联网的 IPv6 路由,导致出现“Network is unreachable”(网络不可达)错误。通过完成这些步骤,你获得了管理和排查 Linux 上 IPv6 名称解析的核心工具和概念的实践经验,并理解了成功的 DNS 查询与实际网络连接之间的区别。