疑难解答进阶
开代理后部分网站绕过代理或时好时坏:IPv6 导致的问题与排查
家里网络同时有 IPv4 和 IPv6 时,代理只接管了其中一条路,另一条就可能直接出去。先临时关掉 IPv6 验证,再决定是统一关闭还是让代理完整接管。
文章目录
简要回答
先在系统里临时关闭 IPv6 再测试,问题消失就说明是 IPv6 导致的。多数机场节点不提供 IPv6 出口,最省事的做法是让代理内核不处理 IPv6:mihomo 系客户端把顶层 ipv6 和 DNS 里的 ipv6 都设为 false,或在系统、路由器层面关闭 IPv6。确实需要 IPv6 时,要让节点、内核、DNS 和 TUN 同时支持,不能只开一半。
IPv6 为什么会让代理漏掉流量
现在不少宽带和手机网络会同时下发 IPv4 和 IPv6 地址,也就是双栈网络。
双栈Dual Stack
设备同时拥有 IPv4 与 IPv6 两种地址,访问网站时两条路都可能被使用,系统通常会优先尝试 IPv6。
问题在于,大多数机场节点只提供 IPv4 出口,很多客户端也默认只接管 IPv4。于是会出现两种结果:
- 漏过去:IPv6 流量没被代理接管,直接从本地网络出去,网站看到的是你的国内 IPv6 地址。
- 卡一下:内核接收了 IPv6 请求,但节点无法连接 IPv6 目标,只能等超时后退回 IPv4,表现为首次加载很慢、时好时坏。
一分钟验证是不是 IPv6
看检测网站
打开能同时显示 IPv4 与 IPv6 出口的检测网站,例如 test-ipv6.com。IPv4 显示节点地区、IPv6 却显示国内运营商,就是 IPv6 绕过了代理。
临时关闭系统 IPv6
Windows 在网络适配器属性里取消勾选「Internet 协议版本 6 (TCP/IPv6)」;macOS 可以在终端执行
networksetup -setv6off Wi-Fi,恢复用networksetup -setv6automatic Wi-Fi。重新测试原来的问题
关掉之后问题消失,基本可以确定是 IPv6 引起的,再按下面的方法选一种长期方案。
按现象处理
现象开了 TUN,IP 检测仍显示国内 IPv6 地址
检查TUN 是否接管了 IPv6 路由
在 mihomo 中,TUN 的 inet6-address 只有在顶层 ipv6 为 true 时才会生效,而且内核启动时如果检测不到其他网卡有 IPv6,会自动禁用这项功能。没接管时 IPv6 流量会直接走物理网卡。不需要 IPv6 的话,干脆让内核和 DNS 都不处理 IPv6(见下文配置),或在系统层面关闭。
现象部分网站第一次打开要等很久,刷新后又正常
检查内核是否在处理节点不支持的 IPv6 连接
DNS 返回了 IPv6 地址,内核尝试经节点连接却失败,回退到 IPv4 才成功。把 DNS 的 ipv6 设为 false,让 AAAA 查询返回空结果,应用就只会使用 IPv4 地址。
现象AI 工具或流媒体在一些设备上提示地区不可用
检查是否有 IPv6 流量直连暴露了真实地区
出口 IPv4 在美国、IPv6 却在国内,平台很容易判定地区异常。先关闭 IPv6 验证,再参考 AI 工具地区不可用排查和 Netflix 一直转圈怎么办。
现象系统代理模式下,检测网站仍能看到本机 IPv6
检查是否为浏览器 WebRTC 或不走系统代理的软件
WebRTC 可能绕过代理暴露本机地址。Firefox 可以在 about:config 里把 media.peerconnection.enabled 设为 false;Chrome 系浏览器一般借助扩展限制 WebRTC。不读系统代理的软件则需要改用 TUN 模式,原理见开启代理后没有网络怎么办。
现象国内网站走了代理,或者该代理的走了直连
检查分流规则能否匹配 IPv6 地址
如果使用的 IP 规则集只覆盖 IPv4 网段,目标解析成 IPv6 后可能匹配到错误的规则。更新规则集,或者干脆让 DNS 只返回 IPv4 地址,规则判断会稳定得多。
长期方案:要么全关,要么全开
方案一:让代理不处理 IPv6(推荐大多数人)
mihomo 系客户端(如 Clash Verge Rev)可以在配置或覆写里这样写:
ipv6: false
dns:
ipv6: false
按官方文档,顶层 ipv6 控制内核是否接受 IPv6 流量,默认值为 true;DNS 里的 ipv6 为 false 时,AAAA 查询会得到空结果。图形客户端设置里的 IPv6 开关一般对应顶层选项,改完记得重启内核。v2rayN 较新版本的设置中也加入了启用 IPv6 的选项,具体位置随版本变化,以界面为准。
如果仍有漏网流量,可以在路由器上关闭 IPv6 下发,全家设备一次解决。
方案二:完整支持 IPv6
前提是机场节点明确支持 IPv6 出口。然后顶层 ipv6、DNS 的 ipv6 都设为 true,TUN 配好 IPv6 地址,四处缺一不可。只开一半,就会回到上面「漏过去」或「卡一下」的状态。
快速自查清单
| 检查项 | 正常表现 |
|---|---|
| IPv6 检测 | 不显示国内运营商 IPv6,或与节点地区一致 |
| 临时关闭系统 IPv6 | 问题不再复现 |
| 顶层 ipv6 与 DNS ipv6 | 两者取值一致 |
| 节点 IPv6 支持 | 开启 IPv6 前已确认 |
| 浏览器 WebRTC | 不暴露本机地址 |
| 路由器 IPv6 | 与所选方案一致 |
常见问题
关闭 IPv6 会影响正常上网吗?
对绝大多数日常使用没有影响,国内外主流网站都同时提供 IPv4 访问。少数只支持 IPv6 的服务,或依赖 IPv6 的 P2P 下载、远程访问会受影响,有这类需求的再考虑完整开启方案。
为什么只有部分网站绕过代理?
只有提供 IPv6 地址的网站才会走到 IPv6 这条路上,比如很多大型网站和视频平台;只有 IPv4 的网站则正常走代理。所以表现为「有的网站绕过,有的正常」。
用系统代理模式也会受 IPv6 影响吗?
影响较小。浏览器把域名交给本地代理,由代理去连接,本机的 IPv6 通常用不上。但不读系统代理的软件、浏览器的 WebRTC 仍可能暴露本机 IPv6 地址。