检查 DNS AAAA 记录及其背后的 IPv6 服务
理解 DNS AAAA 记录,并把 IPv6 与 IPv4 分开测试。比较回答、检查双栈故障,并验证地址背后的服务。
作者Yiyao
AAAA 是 IPv6 地址记录
DNS AAAA 记录将主机名映射到 IPv6 地址。该名称也可以拥有 IPv4 的 A 记录。发布两种记录可以支持两类地址的发现,但每条网络路径和服务配置仍需正常工作。
将成功的查询视为验证中的一个步骤。客户端可能收到 IPv6 地址,但仍因路由、防火墙规则、服务器监听器或应用程序尚未准备好而无法连接 IPv6。诊断这种情况时,不要只查看 IPv4 路径。
比较等价查询
nslookup -type=A example.com
nslookup -type=AAAA example.com
第一次比较时使用相同的主机名和解析器。要进行独立的公共查询,可以打开 Open NSLookup,然后比较返回值。由于服务于不同的协议族,返回值的地址格式不同。IPv6 地址不是通过向 IPv4 地址添加文本得到的,也不能把 A 记录复制到另一种类型中。
在公共浏览器查询中明确选择 AAAA。空的 AAAA 应答可能只表示该名称没有 IPv6 地址记录。在称其为 NXDOMAIN 之前先检查 DNS 状态;某一记录类型缺失和名称不存在是不同的结果。
保持双栈测试矩阵清晰
| 层级 | IPv4 检查 | IPv6 检查 |
|---|---|---|
| DNS | 主机名的 A 应答 | 同一主机名的 AAAA 应答 |
| 网络 | 到 IPv4 目的地的路由 | IPv6 连通性和路由 |
| 传输 | 服务端口可达 | 同一服务可通过 IPv6 使用 |
| TLS 和 HTTP | 有效的主机名和预期响应 | 相同的证书身份和预期内容 |
在对远程服务下结论之前,请使用 IPv6 正常工作的测试环境。没有 IPv6 路由的工作站无法判断目的地是否对拥有 IPv6 路由的用户可用。每次失败都记录客户端环境。

检查实际服务,而不只是记录
curl -4 --head --connect-timeout 10 --max-time 20 https://example.com/
curl -6 --head --connect-timeout 10 --max-time 20 https://example.com/
这些只读示例会向公共演示站点请求响应头。在 Windows PowerShell 中,如果 curl 被解析为其他命令,请使用 curl.exe。-6 尝试要求本地具备 IPv6 连通性;仅此处失败并不能证明公共网站已损坏。
对于你自己的服务,请使用实际主机名检查 TLS 错误、HTTP 状态和预期内容。在某些应用程序中,HEAD 的行为可能不同于 GET,因此当响应头结果无法确定时,应继续执行经过授权的普通页面请求。
排查双栈故障
考虑一个示例服务:A 记录指向正常工作的 IPv4 部署,而 AAAA 记录指向尚未准备好的 IPv6 端点。DNS 工具成功返回两条记录,但尝试使用 IPv6 的客户端遇到超时。记录查询通过了,但服务就绪状态没有通过。
下一步是与服务负责人核实 IPv6 路由、预期地址、防火墙范围、监听器和应用程序配置。通过批准的变更流程决定完成 IPv6 部署,或撤回错误的记录。不要把在每位访问者设备上禁用 IPv6 当作修复服务的替代方案。
跨缓存和区域检查变更
记录更新后比较权威应答和递归应答。保留 TTL 和测试时间。缓存中的旧 AAAA 应答可能会在其生命周期结束前继续将部分客户端指向之前的目的地。
保留回滚记录,并至少测试最初发生故障的环境。来自 Arcvenza 服务器的公共查询可以提供独立的 DNS 视图,但不能证明用户本地 IPv6 网络的连通性。Internet Protocol 指南解释了地址发现在哪里结束,以及数据包传输从哪里开始。
常见问题与下一步
每个网站都需要立即拥有 AAAA 记录吗?当预期的 IPv6 服务已经准备好并经过测试时再发布。记录应描述一个可正常工作的目的地。
同一主机名可以同时有 A 和 AAAA 记录吗?可以。IPv4 侧可以参考 DNS A record guide,然后分别查询并验证两条服务路径。打开 Open NSLookup,选择 AAAA,并在测试记录中保留响应类型和状态。
技术参考
RFC 3596: IPv6 DNS records · Microsoft: nslookup
RFC 3596:IPv6 DNS 记录 · Microsoft:nslookup
