如何正确检测 IPv6:方法、工具与结论边界
"我这个站支持 IPv6 吗?"——这是最常见的问题,也是最容易得到错误答案的问题。原因不在于工具不好用,而在于"支持 IPv6"本身就是个需要分层的判断。这篇给出正确的检测方法与结论口径。
一、先分清你要检测什么
| 检测对象 | 问题 | 典型方法 |
|---|---|---|
| 本机出口 | 我这台设备能不能上 IPv6? | 服务端回显对端地址 |
| 域名可达 | 这个域名能不能用 v6 访问? | dig AAAA + curl -6 |
| 全站资源 | 页面上所有内容是否都能 v6 加载? | 逐域名检查 AAAA + 抓包 |
| 服务端口 | 某个端口在 v6 上是否开放? | nc -6 / curl -6 / 端口探测 |
三个问题的答案可以完全不同。 例如:本机有 v6、域名也有 AAAA,但图片 CDN 只有 v4,页面能打开却加载不全——这时"支持 IPv6"只能说"部分支持"。
二、常见误判与成因
| 表面现象 | 可能的真实情况 |
|---|---|
| 网页能打开,所以支持 IPv6 | 可能只是 Happy Eyeballs 回落到了 IPv4 |
| 检测工具说"支持 IPv6" | 它可能只检查了 AAAA 记录,没有真的发起 v6 连接 |
| 本机显示有 IPv6 地址 | 有地址 ≠ 有可用的 v6 路由(可能只配了链路本地) |
| 用手机热点测能通,家里不能 | 不同运营商/链路的 v6 路径质量不同 |
| 装了 VPN 后检测结果全变 | 检测到的是 VPN 出口,不是你的真实链路 |
| 用 IPv6 访问很慢但能通 | 可能是 MTU / PMTUD 黑洞,连接建立了但大包丢失 |
结论:任何"能打开网页就算支持"的判断都不可靠。
三、检测的正确姿势
1. 本机出口检测
浏览器里 JavaScript 无法直接判断你走的是 v4 还是 v6——因为浏览器不暴露这个信息,而且它会自动在 A/AAAA 之间竞速。
正确做法是让服务端回显本次连接的对端地址:
- 打开本站首页,本页内联检测会显示服务端观测到的你的出口地址与协议版本;
- 或用命令行强制走某一栈:
curl -6/curl -4。
2. 域名可达检测
# 第一步:有没有 AAAA
dig AAAA example.com +short
# 第二步:能不能真的用 v6 连上(需要本机有 v6 出口)
curl -6 -I https://example.com
# 第三步:看看 v6 路径在哪一跳出问题
traceroute6 example.com # Linux / macOS
tracert -6 example.com # Windows
判据:dig 有 AAAA 且 curl -6 成功,才算"域名支持 IPv6"。只有前者只是"声明支持"。
3. 全站资源检测
# 把页面上出现的所有域名都查一遍
for h in www static img api cdn; do
echo "== $h"
dig AAAA $h.example.com +short
done
任何一个关键资源域名缺 AAAA,都会让 v6-only 用户看到残缺页面。
4. 从多个位置测
单点检测的结论只对那一个探测位置成立。做正式评估时至少覆盖:
- 不同运营商(电信 / 联通 / 移动);
- 不同地域(本地 / 跨省 / 境外);
- 纯 IPv6 环境(若有条件)。
四、命令行工具速查
| 工具 | 用途 | 示例 |
|---|---|---|
dig |
查询 AAAA / PTR | dig AAAA example.com |
nslookup |
跨平台 DNS 查询 | nslookup -type=AAAA example.com |
curl -6 |
强制 IPv6 请求 | curl -6 -I https://example.com |
ping -6 / ping6 |
v6 连通性 | ping -6 2400:3200::1 |
traceroute6 / tracert -6 |
v6 路径追踪 | traceroute6 example.com |
ss -lntp |
本地监听是否含 [::] |
ss -lntp | grep 443 |
ip -6 neigh |
NDP 邻居表 | ip -6 neigh show |
五、关于"检测工具的结论边界"
任何检测服务给出的结论,都受以下因素约束,看结果时务必对照:
- 探测视角:本站检测只能证明"从本站出发可达"。换一个网络位置观察,结果可能不同,结论不代表全球可达。
- 探测目标范围:检测的是"指定的地址或 URL 的基础连通性",不代表页面内全部资源都支持 IPv6。
- 探测时机:链路的 v6 质量会随时间波动,一次成功不代表长期稳定。
- DNS 解析位置:本站用的解析器与你的网络不同,可能得到不同的 AAAA 结果。
给结论加限定词是个好习惯。 与其说"这个网站支持 IPv6",不如说"从本站、在本次检测时刻,该域名的 AAAA 地址可建立 IPv6 连接"——后者才是可复核的表述。
六、给自己网站的检测清单
| # | 检查 | 命令/方式 |
|---|---|---|
| 1 | 主域名 AAAA | dig AAAA 域名 +short |
| 2 | 子域名 AAAA | 逐个 dig |
| 3 | 服务端口 v6 监听 | ss -lntp |
| 4 | 外部 v6 可达 | curl -6 -I 域名(从外部机器) |
| 5 | 页面资源域名 | 浏览器开发者工具看域名列表,逐个核对 |
| 6 | 限流口径 | 确认按 /64 归并 |
| 7 | 回滚预案 | 明确 AAAA 移除流程 |
小结
- "支持 IPv6"要分四层看:本机出口、域名可达、全站资源、服务端口。
- 网页能打开不能证明走了 IPv6——Happy Eyeballs 会静默回落到 v4。
- 只有 AAAA 只是"声明支持",
curl -6成功才是"真的支持"。 - 本站检测的结论有明确边界,表述时应带上限定条件。
下一篇进入应用篇:《过渡技术选型:双栈、隧道与 NAT64》。