tech/network · 集群 B · 隧道与排障原理 · 4/6
IPv6 对代理的影响:双栈优先级、流量绕过与排查思路
在 IPv4 与 IPv6 同时可用的双栈网络中,系统和应用往往优先尝试 IPv6。如果代理客户端只接管或只解析 IPv4,部分 IPv6 流量就可能绕过代理直接出去,造成“开了代理仍直连”或地区判断不一致。如果你遇到这类现象,可以先确认本地是否获得了 IPv6 地址,再检查客户端的 IPv6 与 DNS 相关设置是否一致。
双栈网络是怎么回事
双栈是指一台设备同时拥有 IPv4 和 IPv6 两种地址,可以用其中任意一种访问目标。随着 IPv6 部署推进,不少家庭宽带和移动网络都已经默认下发 IPv6 地址,用户往往并不知道自己已经处于双栈环境。
在双栈环境中,访问一个同时支持两种协议的网站时,DNS 会同时返回 IPv4 地址(A 记录)和 IPv6 地址(AAAA 记录),系统或应用需要决定用哪一个。
[应用] 查询 example.com
│
├─ A 记录 → IPv4 地址
└─ AAAA 记录 → IPv6 地址
│
▼
系统 / 应用选择:优先 IPv6?还是 IPv4?
系统如何选择 IPv4 还是 IPv6
现代操作系统和浏览器普遍采用一种被称为“Happy Eyeballs”的策略:同时或几乎同时尝试 IPv6 和 IPv4,优先使用 IPv6,如果 IPv6 在很短时间内没有成功,再用 IPv4。这样既推动了 IPv6 使用,又避免 IPv6 故障导致长时间等待。
| 情况 | 通常的选择 |
|---|---|
| 只有 IPv4 记录 | 使用 IPv4 |
| 只有 IPv6 记录、本地有 IPv6 | 使用 IPv6 |
| 两者都有、IPv6 正常 | 通常优先 IPv6 |
| 两者都有、IPv6 失败 | 快速回退 IPv4 |
| 本地没有全局 IPv6 地址 | 使用 IPv4 |
这个策略对普通上网很友好,但对代理场景却可能带来问题:一旦 IPv6 能直接连通,系统就会愉快地走 IPv6,完全不经过只处理 IPv4 的代理。
IPv6 如何绕过代理
IPv6 绕过代理主要有三条路径,分别对应接管层、解析层和规则层。
接管层绕过:TUN 模式下如果客户端只为 IPv4 设置了路由,IPv6 流量仍按系统原有路由从物理网卡出去。系统代理模式下,部分应用直接使用 IPv6 连接而不读代理设置。TUN 原理见 TUN 虚拟网卡原理。
解析层绕过:如果代理内核不处理 AAAA 查询,系统可能从本地 DNS 拿到 IPv6 地址,再直接连接。这本质上也是一种 DNS 泄漏,原理见 DNS 污染是什么。
规则层绕过:规则只写了 IPv4 网段,IPv6 地址匹配不到这些规则,落到了兜底;如果兜底是直连,就直接出去了。规则匹配原理见 分流原理。
IPv6 流量去向判断:
[应用发出 IPv6 连接]
│
├─ 被客户端接管了吗?
│ ├─ 否 → 直接从物理网卡出去(绕过)
│ └─ 是 ↓
│
├─ 规则能匹配 IPv6 吗?
│ ├─ 否 → 落到兜底(若兜底直连则绕过)
│ └─ 是 ↓
│
└─ 节点支持 IPv6 出口吗?
├─ 否 → 连接失败,可能回退 IPv4
└─ 是 → 正常代理
IPv6 绕过的典型表现
IPv6 绕过通常不会导致“完全不通”,而是带来一些令人困惑的不一致现象:
- IP 检测结果不一致:检测 IPv4 显示节点地区,检测 IPv6 显示本地地区。
- 同一网站时好时坏:Happy Eyeballs 有时选 IPv6(直连)、有时选 IPv4(代理)。
- 部分服务提示地区异常:服务看到的是你的本地 IPv6 地址,与代理出口不一致。
- 日志里看不到连接:客户端日志中完全没有该网站的记录,说明根本没进入客户端。
第 3 点涉及 IP 归属问题,可参考 节点与 IP 专题。访问 AI 或流媒体平台时请遵守平台服务条款与支持地区。
代理客户端处理 IPv6 的几种方式
代理客户端对 IPv6 的处理一般有以下几种思路,各有取舍。具体选项名称因客户端而异,且可能随版本变化,以界面为准。
| 方式 | 做法 | 优点 | 代价 |
|---|---|---|---|
| 内核禁用 IPv6 解析 | DNS 模块不返回 AAAA | 强制走 IPv4,简单有效 | 无法访问仅 IPv6 的目标 |
| TUN 同时接管 IPv6 | 为 IPv6 也设置路由 | 覆盖完整 | 需节点支持,配置更复杂 |
| 规则补充 IPv6 网段 | 规则中加入 IPv6 段 | 分流更精确 | 维护成本较高 |
| 系统层禁用 IPv6 | 关闭网卡 IPv6 | 彻底 | 影响其他依赖 IPv6 的服务 |
对多数用户而言,在客户端内保持 DNS 与接管设置一致是最重要的原则:要么都处理 IPv6,要么都不处理。最容易出问题的是“TUN 接管了 IPv6 但 DNS 不返回 AAAA”或反过来这种半开状态。
排查步骤
怀疑 IPv6 导致问题时,可以按下面的顺序检查:
- 确认本地是否有全局 IPv6 地址:查看系统网络设置,链路本地地址(以 fe80 开头)不算。
- 分别检测 IPv4 与 IPv6 出口:在开启代理时,分别查看两个协议的出口地区是否一致。
- 查看客户端 IPv6 相关设置:DNS 模块、TUN 设置中 IPv6 的开关状态是否一致。
- 查看日志:问题网站的连接是否出现在日志中,命中了哪条规则。
- 临时在客户端禁用 IPv6 解析对比:如果问题消失,说明与 IPv6 有关。
完整的逐层排查思路见 分层排障法。
路由器层面的 IPv6
除了电脑本身,家用路由器的 IPv6 设置也会影响代理表现。很多路由器默认开启 IPv6 并向局域网设备下发地址,这意味着即使你在电脑上没做任何改动,系统也可能已经处于双栈状态。如果你在路由器上部署了代理方案,同样要考虑路由器是否接管了 IPv6 流量,否则局域网设备的 IPv6 连接会直接从路由器出去。
在路由器上调整 IPv6 会影响家中所有设备,改动前建议先了解哪些设备或服务依赖 IPv6,例如部分远程访问、家庭存储或智能设备。比较稳妥的做法是先在单台电脑的客户端里测试,确认效果后再考虑是否在路由器层面统一处理。路由器场景下的代理部署思路可参考 路由器方案 专题。
不同场景下的取舍建议
是否处理 IPv6、怎么处理,没有放之四海皆准的答案,可以按场景做条件化选择:
- 如果你主要用浏览器访问常规网站,且不依赖任何 IPv6 专属服务,可以优先考虑在客户端内禁用 IPv6 解析,配置最简单;
- 如果你的节点明确支持 IPv6 出口,且需要访问仅 IPv6 的目标,更适合让 TUN 与 DNS 同时接管 IPv6;
- 如果你在家中运行依赖 IPv6 的服务,不适合在系统层或路由器层直接关闭 IPv6。
无论选择哪种方式,调整后都应重新检测 IPv4 与 IPv6 的出口是否一致。
小结
IPv6 本身不是问题,问题在于“代理只管了一半”。双栈环境下系统倾向优先 IPv6,只要接管、解析、规则中有一环没覆盖 IPv6,就会出现绕过和不一致。保持客户端内 IPv6 设置的一致性,是减少这类问题的关键。
想了解服务商资料对客户端的描述,可以访问 机场品牌库 或 对比工具,所有字段来自品牌资料,本站未实测。
常见问题
怎么知道自己的网络有没有 IPv6?
可以在系统网络设置中查看网卡是否获得了全局 IPv6 地址(非链路本地地址),也可以在关闭代理时访问显示 IP 版本的检测页面确认。
为什么开了代理,某些网站还是显示本地 IP?
一种常见原因是该网站支持 IPv6,系统优先通过 IPv6 直接连接,而客户端只接管了 IPv4。检查客户端 IPv6 设置,或观察日志中是否出现这条连接。
关闭 IPv6 是不是最简单的办法?
在客户端层面禁用 IPv6 解析是一种常见取舍,可以减少绕过问题;但在系统层面完全关闭 IPv6 可能影响部分依赖 IPv6 的本地服务。建议优先在客户端内统一设置,并观察影响。
节点本身需要支持 IPv6 吗?
如果你希望通过代理访问仅有 IPv6 的目标,落地节点需要具备 IPv6 出口。多数网站同时提供 IPv4,节点仅有 IPv4 时一般也能访问。
信息来源与更新时间
- 信息来源
- 品牌清单资料(品牌公开信息整理)
- 测试范围
- 本站未进行测速与解锁实测,所有能力描述均为资料声明或未测试状态。
- 发布时间
- 待核实
- 核实日期
- 待核实
- 最近更新
- 待核实