跳到主要内容

Clash TUN 模式下微信收发图片变慢:一次 IPv6 排查记录

· 阅读需 4 分钟
1adybug
子虚伊人

最近我在 Clash Verge / Mihomo 中开启了 TUN 模式后,发现微信收发图片明显变慢。一开始我怀疑是微信图片流量被代理服务器接管了,导致绕路。

但排查日志后发现,真正的问题并不是“微信走了代理”,而是 Clash 中开启 IPv6 后,让微信尝试了一条当前网络环境不可达的 IPv6 路径。

现象

开启 Clash TUN 模式后:

  • 微信文字消息基本正常
  • 接收和发送图片明显变慢
  • 关闭 Clash 中的 IPv6 后,微信图片恢复正常

排查过程

先查看 Clash / Mihomo 的规则和连接日志。

配置中微信相关进程已经被明确设置为直连:

- PROCESS-NAME,Weixin.exe,DIRECT
- PROCESS-NAME,WeixinUpdate.exe,DIRECT
- PROCESS-NAME,WeChatAppEx.exe,DIRECT
- PROCESS-NAME,WeixinExt.exe,DIRECT

随后在微信接收一张图片时,对比 Mihomo 日志,发现新增记录类似这样:

[TCP] dial DIRECT (match ProcessName/Weixin.exe)
Weixin.exe --> [240e:xxxx:xxxx::xxxx]:443
error: connect failed: dial tcp [240e:xxxx:xxxx::xxxx]:443:
A socket operation was attempted to an unreachable network.

关键信息有三个:

DIRECT
ProcessName/Weixin.exe
IPv6 unreachable network

也就是说,微信并没有走代理,而是命中了 DIRECT 规则。但它尝试访问腾讯/微信的 IPv6 地址时,当前网络环境下这条 IPv6 路径不可达,于是发生反复重试,最终造成图片收发很慢。

真正原因

问题不是:

  • 微信图片走了代理
  • 代理服务器太慢
  • 微信服务器慢

更准确的原因是:

Clash / Mihomo 中开启 IPv6 后,微信拿到了 IPv6 目标地址,并尝试直连;但当前 TUN / 网络环境无法真正访问这些 IPv6 地址,于是连接失败、重试、回落,造成明显延迟。

这是一种“看起来支持 IPv6,但实际路径不可达”的情况。

解决方式

在 Clash / Mihomo 中关闭 IPv6:

ipv6: false

dns:
ipv6: false

然后重启 Clash 内核。

注意,这里说的是关闭 Clash / Mihomo 内部的 IPv6 支持,不是去 Windows 网卡里全局禁用 IPv6。

关闭 Clash IPv6 会有什么影响?

关闭后,Clash 通常不再处理 IPv6 目标地址,也不会主动返回 IPv6 DNS 结果。大多数应用会回落到 IPv4。

影响一般是:

  • IPv4 代理规则仍然正常工作
  • 大多数网站和 App 不受影响
  • 少数 IPv6-only 服务可能无法访问
  • 如果某些服务 IPv6 路径原本更优,可能失去这部分优势
  • 但在当前网络 IPv6 不通的情况下,关闭反而更稳定

代理本身是否支持 IPv6?

不能只看代理节点入口 IP 来判断。

即使代理服务器入口是 IPv4,比如:

104.xxx.xxx.xxx:4431

它也可能支持代理 IPv6 目标地址。是否支持取决于:

  • 节点服务器是否有 IPv6 出站能力
  • 代理协议和服务端配置是否支持
  • Clash/Mihomo 是否开启 IPv6 处理

在这次问题里,微信本身命中的是 DIRECT,所以重点并不是“节点是否支持 IPv6”,而是“微信直连 IPv6 不可达”。

总结

这次微信图片慢的核心链路是:

Clash 开启 IPv6

微信拿到 IPv6 地址

微信按规则 DIRECT 直连

当前网络/TUN 环境 IPv6 不可达

连接失败、重试、回落

收发图片变慢

关闭 Clash 中的 IPv6 后,微信更早走 IPv4,绕过不可达的 IPv6 路径,问题解决。

如果你也遇到 Clash TUN 模式下微信、QQ、国内 App 图片或资源加载很慢,可以优先检查 Mihomo 日志中是否存在类似:

DIRECT
IPv6
unreachable network

如果有,那么关闭 Clash / Mihomo 的 IPv6 很可能就是最直接的解决办法。