双栈访问涉及两类地址
A 记录通常给出 IPv4 地址,AAAA 记录给出 IPv6 地址。域名可以同时有两类记录,也可以只提供其中一种。拿到 AAAA 不等于本机已经具备可用的 IPv6 路由。
查询哪种记录,与向解析器发送查询时用哪种网络,不是一回事。通过 IPv4 连接 DNS 服务器,也能查询 AAAA;通过 IPv6 查询,也能得到 A 记录。
代理又多了一层:curl 连到本机 127.0.0.1 是 IPv4,但客户端或远端节点向目标建立连接时,仍可能选 IPv6。不要用入口地址代替整条路径的判断。
先对照 A 和 AAAA 查询
doggo example.com A --timeout 5
doggo example.com AAAA --timeout 5这两条命令使用 doggo 的当前解析器设置。记录答案、状态和查询条件;如果一类记录为空,先区分域名没有该记录、解析失败,以及客户端 DNS 策略过滤。详细查询方法可看 doggo 教程。
Fake-IP 模式可能返回客户端分配的合成地址,而不是目标真实地址。需要对照真实解析时,明确查询用了哪个解析器及传输协议,别把两种答案混在一起判断。
固定目标,分别尝试 IPv4 和 IPv6
curl -4 --noproxy "*" --verbose --head --connect-timeout 5 --max-time 20 https://example.com
curl -6 --noproxy "*" --verbose --head --connect-timeout 5 --max-time 20 https://example.comWindows 中使用 curl.exe。--noproxy "*" 关闭 curl 的显式代理;如果 TUN 仍在接管路由,测试依然可能经过客户端,需结合连接记录解释。
两次请求保持域名和方法一致。IPv6 失败时记下最后一个成功阶段:没有可用地址、没有路由、连接超时,还是 TLS 或网站返回错误。它们需要的修复并不相同。
经过 HTTP 代理或 socks5h 入口时,目标解析和连接可能由代理端负责。此时 -4、-6 不能保证远端最终用相应地址族访问网站;需要看代理端支持的设置及日志。
浏览器能打开,不代表两条路径都正常
支持 Happy Eyeballs 的应用会安排不同地址族的连接尝试,减少其中一条路径不通时的等待。自动访问成功,而强制 IPv6 的测试失败,并不矛盾:应用可能最终用了 IPv4。
不同应用、版本和连接复用状态会影响尝试方式。一个浏览器自动回退成功,也不能证明下载工具或后台服务一定会同样回退。排查时记录实际连接地址,比只看网页有没有打开更有用。
核对客户端里四个不同的位置
| 设置所在位置 | 需要确认的问题 |
|---|---|
| DNS | 是否返回 AAAA,是否使用 Fake-IP,是否有过滤策略 |
| 系统或 TUN 路由 | IPv6 流量是否在接管范围,是否存在排除路由 |
| 分流规则 | IPv4 与 IPv6 地址是否匹配了不同规则或出站 |
| 节点及目标连接 | 当前出站是否支持并选择了 IPv6 路径 |
例如,关闭某个 DNS 的 IPv6 选项可能只改变 AAAA 答案,不会自动禁止所有已经拿到 IPv6 地址的程序发包。反过来,允许 AAAA 也不会替系统修好 IPv6 默认路由。
按失败阶段修复,每次只改一项
- 没有 AAAA:先确认域名本身是否提供该记录,再看解析器与客户端策略。
- 有地址但无可用路由:检查系统网络、路由器和接管范围,先保留现有配置备份。
- 连接建立后才失败:继续检查 TLS、HTTP 和具体出站,不要把所有问题都归给地址族。
- 只有某个应用异常:确认它是否使用独立代理、缓存连接或不同的解析方式。
临时强制 IPv4 可以帮助缩小问题范围。若要长期改动,写下改动前后的相同目标结果,并考虑哪些应用确实需要 IPv6;不要靠反复开关全局选项掩盖尚未定位的故障。
常见问题
关闭 IPv6 能提高所有网站速度吗?
不能这样概括。只有当前 IPv6 路径存在问题、应用又不能妥善回退时,关闭或调整它才可能改善某些访问。应先用固定目标做对照。
DNS 能查到 AAAA,为什么 curl -6 还失败?
DNS 返回地址只是第一步。系统需要可用的 IPv6 网络和路由,之后还要完成连接、TLS 与网站请求。根据实际失败阶段继续排查。
参考资料
原理和协议定义可查以下标准与官方文档。文中的流程图由 AFQKit 绘制。