Skip to content
Go back

Win11 下 Clash Verge 开启 TUN 后没有下行速度的排查记录

Edit page

这次遇到的问题是:Windows 11 电脑使用 Clash Verge 时,开启 TUN 虚拟网卡模式后网络无法正常访问。比较奇怪的是,重启电脑之前 TUN 模式还是正常的,但电脑重启后就无法使用了。

一开始我以为是 Clash Verge 没有管理员权限,或者 TUN 虚拟网卡没有正常创建。 但实际测试后发现,即使右键选择“以管理员身份运行” Clash Verge,TUN 模式依然没有下行速度。

Clash Verge Rev 文档里提到,服务模式的用途是让用户可以用非管理员身份启动 TUN 模式;Windows FAQ 也提到,TUN 模式网络异常可能和多个网卡、网段规则冲突有关。因此这次问题不能简单归因于“没给管理员权限”,更像是 Windows 网络环境里某个状态在重启后异常了。

一、现象

这次现象比较集中:

  1. Windows 11 重启前,Clash Verge 的 TUN 虚拟网卡模式可以正常使用。
  2. 重启电脑后,再开启 TUN 模式,Clash Verge 显示有上行流量,但几乎没有下行速度。
  3. 关闭 TUN、切换系统代理时,问题表现不同,因此基本可以判断节点本身不是主要原因。
  4. Clash Verge 日志里出现类似错误:
dns failed: couldn't find ip
  1. 重新关闭、开启 DNS 覆写后,问题没有解决。
  2. 清理 Windows DNS 缓存后,问题也没有解决:
ipconfig /flushdns
  1. 最后执行下面的命令并重启电脑后,TUN 模式恢复正常:
netsh winsock reset

二、先看 TUN 链路里有哪些环节

TUN 模式和普通系统代理不一样。系统代理更像是操作系统或应用之间约定的一组代理配置,应用愿不愿意使用,取决于应用本身。TUN 则会创建虚拟网卡,通过系统路由把流量导入代理内核,因此它更接近一条系统网络链路。

Clash Verge Rev 的名词解释中也把两者区分得很清楚:系统代理依赖应用读取代理配置,而 TUN 模式会通过虚拟网卡和路由把网络请求重定向到本地代理程序。

所以 TUN 出问题时,排查范围至少包括:

  • Clash Verge / Clash Verge Rev 本身
  • mihomo 内核配置
  • TUN 虚拟网卡
  • 系统路由
  • DNS 劫持
  • Fake-IP 映射
  • Windows 网络栈
  • 防火墙、VPN、虚拟网卡、网络过滤软件

这也是为什么“系统代理可用”不能直接证明“TUN 一定可用”。它们走的链路不一样。

三、为什么一开始怀疑 Fake-IP

日志里的关键线索是:

dns failed: couldn't find ip

从这个报错看,很容易先怀疑 Fake-IP 映射异常。

mihomo 的 DNS 文档中说明,DNS 的 enhanced-mode 可以使用 fake-ipredir-host,示例里的 fake-ip-range198.18.0.1/16,并且文档还说明 TUN 的默认 IPv4 地址也会参考这个范围。

典型配置类似这样:

dns:
  enable: true
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16

Fake-IP 的核心逻辑是:应用查询域名时,mihomo 不一定返回真实 IP,而是返回一个保留网段里的“假 IP”。后续应用连接这个假 IP 时,mihomo 再根据内部映射表找到原始域名,继续做规则匹配和转发。

如果应用拿到了 Fake-IP,但 mihomo 内部找不到这个 Fake-IP 对应的域名,就可能出现类似 couldn't find ip 的错误。

因此前期排查方向主要集中在这几类:

  • DNS 覆写是否真的生效
  • Fake-IP 映射表是否异常
  • TUN 的 DNS 劫持是否生效
  • Windows 重启后是否有旧的网络缓存或网络钩子残留
  • 是否有其他 VPN、虚拟网卡、Docker、WSL、Hyper-V、杀毒软件影响网络栈

四、TUN 配置本身也值得检查

mihomo 的 TUN 文档里有几个关键字段:

tun:
  enable: true
  auto-route: true
  auto-detect-interface: true
  dns-hijack:
    - any:53
    - tcp://any:53

其中:

  • auto-route 会自动设置全局路由,把全局流量路由进 TUN 网卡。
  • auto-detect-interface 会自动选择流量出口接口。
  • dns-hijack 会把匹配到的 DNS 连接导入 mihomo 内部 DNS 模块。

如果这些环节中有一个被 Windows 网络栈、虚拟网卡顺序、防火墙或其他网络过滤层影响,就可能出现 TUN 模式下“有上行、没下行”的现象。

Clash Verge Rev 的 Windows FAQ 也提到,打开 TUN 模式后网络异常,可能是系统里有多个网卡,或者网段和配置规则冲突。这个提示很关键:TUN 问题不一定是 Clash 配置文件写错,也可能是系统网络环境在干扰。

五、排查过程

1. 管理员运行 Clash Verge

第一步是右键 Clash Verge,选择“以管理员身份运行”,然后重新开启 TUN 模式。

结果:无效。

这说明问题不是简单的权限不足。日常使用也不建议长期用管理员权限运行 Clash Verge 主程序,更推荐普通权限运行界面,配合 Service Mode 处理 TUN 需要的高权限操作。

2. 重新开关 DNS 覆写

因为日志里出现了:

dns failed: couldn't find ip

所以尝试重新关闭、开启 Clash Verge 的 DNS 覆写。

结果:无效。

这说明问题不只是 DNS 覆写开关状态异常。

3. 清理 Windows DNS 缓存

接着执行:

ipconfig /flushdns

结果:无效。

这一步只能清理 Windows 系统侧的 DNS 缓存,不一定能清掉 mihomo 内部的 Fake-IP 映射、DNS 缓存,也清不到浏览器或其他应用已经持有的连接状态。

mihomo API 文档里有专门的缓存接口,例如:

  • POST /cache/fakeip/flush:清除 fakeip 缓存
  • POST /cache/dns/flush:清除 dns 缓存

这也说明 Windows 的 ipconfig /flushdns 和 mihomo 内部缓存不是一回事。

4. 执行 Winsock 重置

最后使用管理员 PowerShell 执行:

netsh winsock reset

然后重启电脑。

结果:TUN 模式恢复正常,下行速度恢复。

Microsoft Learn 对 netsh 的说明是,它是 Windows 上用于配置、管理、监控网络组件的命令行工具,并且 netsh 包含 winsock 子上下文。Windows Sockets 2 文档则说明,Winsock 是 Windows 网络能力的重要接口层,位于应用 API 和协议栈之间。

所以这次更合理的判断是:问题很可能出在 Windows 网络栈 / Winsock 相关状态,而不是 Clash Verge 配置文件本身损坏。

六、最终解决方法

这次真正有效的方法是:

  1. 以管理员身份打开 PowerShell 或命令提示符。
  2. 执行:
netsh winsock reset
  1. 重启电脑。
  2. 重新打开 Clash Verge。
  3. 开启 TUN 虚拟网卡模式。

如果想顺手做一次更完整的网络清理,也可以按下面顺序执行:

ipconfig /flushdns
netsh winsock reset
netsh int ip reset

然后重启电脑。

不过在我的这次场景里,真正起作用的是:

netsh winsock reset

七、为什么这个方法可能有效

这次问题的关键点是:TUN 模式不是普通的系统代理,它会涉及虚拟网卡、路由、DNS 劫持、Fake-IP、Windows 网络栈和防火墙过滤。

当 Windows 网络栈中的 Winsock 相关状态、网络过滤层、代理/VPN 残留状态异常时,就可能变成下面这条链路:

Application
  -> TUN interface
  -> DNS / Fake-IP / route handling
  -> mihomo forwarding
  -> remote server
  -> response path

其中任意一段状态异常,都可能导致应用已经发出了请求,Clash Verge 也统计到了上行,但响应无法按预期回来,于是表现为“有上行、几乎没有下行”。

执行 netsh winsock reset 后,相当于把 Winsock 相关状态恢复到更干净的起点。对这次场景来说,它清掉了重启后残留或损坏的系统网络状态,所以 TUN 模式重新恢复正常。

这不是说所有 TUN 问题都应该直接重置 Winsock,而是说:当管理员运行、DNS 覆写、ipconfig /flushdns 都无效,并且日志反复出现 dns failed: couldn't find ip 时,Winsock 重置值得纳入排查顺序。

八、后续建议

第一,不要同时开启多个 TUN / VPN 类软件。例如 Clash Verge TUN、v2rayN TUN、sing-box TUN、WireGuard、Tailscale、ZeroTier、AdGuard VPN、 Proxifier 等最好不要同时运行。

第二,Clash Verge 日常不建议一直用管理员权限运行。更推荐普通权限运行 Clash Verge 主程序,然后使用 Service Mode 处理 TUN 所需的高权限操作。

第三,如果再次出现类似问题,可以按下面顺序排查:

ipconfig /flushdns
net stop hns
net start hns
netsh winsock reset

其中 net stop hnsnet start hns 是重启 Windows 的 Host Network Service。Clash Verge Rev 的 Windows FAQ 中提到,遇到某些 socket 权限相关问题时,可以重启 HNS 服务。

第四,如果日志仍然大量出现 dns failed: couldn't find ip,可以继续检查 mihomo 的 DNS 和 TUN 配置:

tun:
  enable: true
  auto-route: true
  auto-detect-interface: true
  dns-hijack:
    - any:53
    - tcp://any:53

dns:
  enable: true
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16

如果怀疑 Fake-IP 映射异常,也可以尝试开启 Fake-IP 映射持久化:

profile:
  store-selected: true
  store-fake-ip: true

mihomo 全局配置文档说明,store-fake-ip 用于保存 Fake-IP 映射表,下次同一域名再次连接时继续使用原有映射地址。

九、结论

这次 Win11 + Clash Verge TUN 模式没有下行速度的问题,最终不是通过重装 Clash Verge、重新开关 DNS 覆写、管理员运行程序解决的,而是通过:

netsh winsock reset

并重启电脑解决。

我的结论是:这类问题不一定是 Clash Verge 或节点本身的问题,也可能是 Windows 网络栈、Winsock、VPN/代理残留、虚拟网卡或网络过滤层异常导致的。尤其是当日志里出现 dns failed: couldn't find ip,并且 TUN 模式有上行但没有下行时,可以把 Winsock 重置作为一个重要排查方向。

参考资料


Edit page