开了 IPv6 反而更慢?原因与处理

有些网络开了 IPv6 之后,访问反而变慢,甚至部分站点超时。这不是错觉,原因很具体。

为什么开了更慢

浏览器访问域名时,会同时查 A(IPv4)和 AAAA(IPv6)记录。如果两者都有,现代浏览器优先试 IPv6。

问题在于:IPv6 的路径质量经常不如 IPv4。跨境链路上尤其明显——IPv6 的互联点少、绕路多,延迟可能比 IPv4 高一倍。

浏览器有"Happy Eyeballs"机制:IPv6 连不上会回退到 IPv4,但回退要等一个超时(通常 200–300ms)。每个新连接都等一次,累积起来就是"每个页面都慢半拍"。

怎么确认是这个问题

# 强制走 IPv6
curl -6 -o /dev/null -s -w "v6: %{time_connect}s\n" https://example.com

# 强制走 IPv4
curl -4 -o /dev/null -s -w "v4: %{time_connect}s\n" https://example.com

两者差距明显(比如 v6 是 v4 的两倍以上),基本就能确认。

还可以看解析结果:

dig AAAA example.com +short
dig A example.com +short

有 AAAA 但连不通,就是典型的"有记录没路由"。

三种处理方式

一、关闭 IPv6

最直接。Windows 在网络适配器属性里取消勾选 IPv6;macOS 在网络设置里把 IPv6 设为"仅本地";Linux 可以用 sysctl 关闭。

代价是失去 IPv6 的原生优势,但在质量问题没解决前,关掉通常更快。

二、调整优先级

让系统优先用 IPv4,保留 IPv6 作为备用。Linux 上可以调 gai.conf 的优先级表;Windows 有对应的注册表策略。

这种方式保留了两栈能力,但要逐个系统配。

三、在代理层处理

如果代理支持,让 DNS 对代理域名只返回 A 记录,从源头避免 IPv6 绕路。这是最干净的做法,但依赖客户端能力。

什么时候该保留 IPv6

不是所有场景都该关。以下情况保留:

  • 访问的站点只有 IPv6(少见但存在)
  • 本地网络 IPv6 质量好(同城、家宽原生)
  • 需要 P2P 或直连设备

判断标准很简单:用 curl -6 和 curl -4 各测三次,取中位数,差得不多就留着。

💡 一个反常识的点:IPv6 慢往往不是"IPv6 本身慢",而是"DNS 返回了 AAAA,但那条路径不通"。所以先测连通性,再决定要不要关。

延伸阅读:四层连通性自检、MTU 与分片、DNS 泄露怎么自测。