TUN 模式断网?三步排查 DNS 劫持冲突

🔴 现象:TUN 开启后,网络彻底瘫痪

你按照教程在 Clash Verge Rev 中启用了 TUN 模式,期待获得全局代理的无缝体验。然而,开关打开后,浏览器无法加载任何网页,终端 ping 也超时,甚至连原本正常的本地网络访问都消失了。关闭 TUN 后一切恢复如初。这种“开了 TUN 就没网,关了就有网”的问题,在许多用户的初次配置中屡见不鲜。

许多人的第一反应是“节点挂了”或“代理配置错了”,但实际上,只要系统代理正常,节点本身通常是可用的。最常见的故障原因是 DNS 劫持冲突。你的本地 DNS 服务和 TUN 虚拟网卡在争夺 DNS 解析权,导致网络请求在第一步就卡死。

🧬 根因:DNS 劫持冲突是如何发生的?

要理解这个问题,我们需要先了解 TUN 模式的工作原理。启用 TUN 后,Clash Verge Rev 会在系统内核层面植入一张虚拟网卡,并修改路由表,将所有流量导向这张虚拟网卡。其中,DNS 请求(UDP 53端口)也被强制接管,以便实现 DNS 优化 和防污染。

问题在于,操作系统或某些安全软件(如 Windows Defender、火绒、360 等)可能已经将自己的 DNS 服务绑定到了 127.0.0.1:53 或其它地址。当 TUN 模式试图劫持 DNS 请求时,就会产生链路冲突

  • Clash 内核想要将 DNS 包发往远程加密服务器,但本地 DNS 服务已抢先拦截并返回了错误响应(如 127.0.0.1 或内网地址)。
  • 或者,TUN 虚拟网卡捕获了 DNS 包,却被本地防火墙或 DNS 代理再次捕获,形成循环重定向,导致超时。

这种冲突的典型表现是:你可以 ping 通 IP 地址(如 8.8.8.8),但 ping 域名(如 google.com)失败,浏览器显示“DNS_PROBE_FINISHED_NO_INTERNET”或“ERR_NAME_NOT_RESOLVED”。如果你在 Fake‑IP 模式 下,则可能表现为所有连接超时,因为虚拟 IP 无法被解析。

🔍 三步诊断:确认是 DNS 劫持冲突

在进行任何修改之前,先通过以下步骤准确定位问题:

1

检查 IP 连通性

在命令行执行 ping 8.8.8.8。如果能通,说明网络层正常,问题出在 DNS。

2

测试域名解析

nslookup google.comdig google.com。若返回超时或服务器为 127.0.0.1,则 DNS 被劫持。

3

查看 Clash 日志

在 Clash Verge Rev 的“日志”页面搜索“dns”或“timeout”,观察是否有 DNS 相关报错。

一旦确认 DNS 无法正常解析,且 IP 层通信正常,就可以推断为 DNS 劫持冲突。接下来,我们提供三种修复方案,从简单到彻底,你可以根据实际环境选择。

🛠️ 三种修复方案

方案一:关闭本地 DNS 服务 (Windows)

Windows 系统内置的 DNS Client 服务经常是冲突元凶。你可以通过以下命令临时停止并禁用:

# 以管理员身份运行 CMD net stop dnscache sc config dnscache start=disabled

重启 Clash Verge Rev 后,TUN 模式的 DNS 劫持通常能正常工作。如果不想禁用,也可以在 Clash 的 DNS 设置中将 listen 改为 0.0.0.0:5353 等非 53 端口,并配置系统防火墙将 UDP 53 流量转发到该端口(稍复杂,建议优先方案二)。

方案二:切换 TUN 堆栈为 gVisor

在 Clash Verge Rev 的 TUN 设置中,将“堆栈”从 System 切换为 gVisor。gVisor 是一种用户空间网络栈,不依赖操作系统内核的协议栈实现,可以有效避免与本地 DNS 服务的端口冲突。

💡 优势: gVisor 堆栈在受限环境下(如无管理员权限、系统组件缺失)表现更稳定,虽然 CPU 占用略高,但对日常使用几乎无影响。

切换后重启 TUN 模式,大部分 DNS 劫持冲突就会消失。如果仍存在问题,进入方案三。

方案三:修改 Clash DNS 监听与防火墙规则

如果上述方案无效,你可能需要手动指定 DNS 监听地址,并在系统防火墙中放行。在配置文件中添加如下 dns 段:

dns: enable: true listen: 0.0.0.0:7874 # 使用非标准端口 enhanced-mode: fake-ip dns-hijack: - any:53

然后,在 Windows 防火墙中新建入站规则,允许 UDP 端口 7874。同时,确保你的安全软件没有拦截 Clash 的网络访问。如果还是不行,可以参考 常见问题 中的更多排查技巧。

🧘 预防与长效配置建议

为了避免每次开启 TUN 都陷入断网恐慌,你可以采取以下预防措施:

  • 固定使用 gVisor 堆栈:除非有特殊需要,gVisor 是更稳妥的选择。
  • 创建配置文件快照:在 Clash Verge Rev v2.5.2 中,你可以保存一套经过验证的配置快照,出问题时一键回滚。参考 v2.5.2 新特性解读
  • 避免安装多个代理/加速软件:VPN、网游加速器、抓包工具等都可能安装自己的虚拟网卡和 DNS 代理,与 Clash 产生冲突。尽量只保留一个网络接管软件。
  • 定期检查 DNS 服务器状态:使用 nslookup -q=ns google.com 8.8.8.8 等命令验证上游 DNS 可用性。

如果问题依旧,不妨检查一下 配置教程 中的完整参数,确保 tun 字段的 auto-routeauto-detect-interface 设置正确。这些细节往往会影响 TUN 的稳定性。

❓ 常见问题延伸

Q: 关闭本地 DNS 服务会影响其他程序吗?
Windows DNS Client 主要提供缓存功能,关闭后系统会直接向配置的 DNS 服务器查询,速度略降但几乎无感。如果介意,可以在 Clash 中配置 DNS 缓存 代替。

Q: gVisor 堆栈下 UDP 游戏会受影响吗?
不会。gVisor 对 UDP 的支持已经非常成熟,v2.5.2 还对 UDP 转发做了优化,游戏延迟甚至比 system 堆栈更低。

Q: 手机端开启 TUN 也断网怎么办?
Android/iOS 的 VPN 接口机制不同,通常是因为权限不足或 APN 设置错误。请确保 Clash 已获得 VPN 权限,并检查 APN 代理是否关闭。具体可查阅 开启 TUN 模式 一文。

Q: 修复后依然时不时断流?
可能是网络环境波动导致规则失效。尝试在规则中添加一条 DOMAIN-KEYWORD,clash,DIRECT 防止循环,同时检查 Rule Provider 是否更新正常。

📖 继续阅读