两种模式的本质区别
Clash 有两种主要的流量接管方式:系统代理和 TUN 模式。两者的核心区别在于"在哪个层次拦截流量"。
系统代理工作在应用层,依赖操作系统提供的代理配置接口,只有主动"尊重"该配置的程序才会走代理;TUN 模式工作在网络层,在操作系统网络栈的更底层创建虚拟网卡,拦截几乎所有流出的数据包,对应用程序完全透明。这个根本差异决定了它们各自的能力边界。
理解这一点后,选择哪种模式就变得清晰了:轻度使用选系统代理,需要全量接管选 TUN 模式。
系统代理是什么?
系统代理(System Proxy)是操作系统内建的一套代理配置机制。Windows 通过注册表项和「设置 → 网络 → 代理」管理,macOS 通过「系统设置 → 网络 → 代理」管理。当 Clash 开启系统代理后,它会自动将这些设置修改为指向本地监听端口(默认 HTTP 代理端口 7890、SOCKS5 代理端口 7891)。
应用程序在发起网络请求时,如果它读取并遵循系统代理配置,请求就会先发往 Clash,由 Clash 依据规则决定直连还是转发至远端节点。
系统代理能接管哪些流量?
- 主流浏览器(Chrome、Firefox、Safari、Edge、Arc 等),它们默认跟随系统代理设置。
- 大部分支持代理的桌面应用,如 Telegram、Slack、VS Code 的扩展下载、npm/pip 等包管理器(配置后)。
- 命令行工具,在终端中设置
http_proxy=http://127.0.0.1:7890后即可让 curl、wget 等走代理。
系统代理的局限性
- UDP 流量:HTTP/SOCKS5 代理协议本质上是 TCP 的,无法直接代理 UDP 数据包,导致部分游戏、DNS 请求、视频通话等走不了代理。
- Windows UWP 应用:微软商店应用运行在独立的网络沙盒中,无法读取系统代理设置,因此 Edge 的 UWP 模式、Xbox 应用等默认绕开代理。
- 不兼容代理的程序:部分应用出于设计或安全原因,忽略系统代理设置,直接建立连接。
- ICMP 协议:ping 命令使用 ICMP 协议,与 TCP/UDP 无关,系统代理对其无效。
TUN 模式是什么?
TUN(TUNnel)是 Linux、macOS 和 Windows 内核均支持的虚拟网络设备接口。Clash 开启 TUN 模式后,会在系统中创建一块名为 Meta(或 utun)的虚拟网卡,并修改路由表,将默认网关指向该虚拟网卡。
此后,系统所有出站流量都会经过这块虚拟网卡进入 Clash,由 Clash 的规则引擎决定每个数据包的去向——直连、代理或拒绝。由于拦截发生在网络栈的底层,应用程序完全感知不到这个过程,就像在使用普通网络一样。
Mihomo 内核实现的 TUN 模式还内置了 DNS 劫持功能,可以将系统的 DNS 请求也转发给 Clash 内置的 DNS 服务器处理,有效防止 DNS 泄漏(即 DNS 查询绕过代理直接发给运营商 DNS 服务器的问题)。
详细对比
| 特性 | 系统代理 | TUN 模式 |
|---|---|---|
| TCP 流量 | ✓ 支持 | ✓ 支持 |
| UDP 流量 | ✗ 不支持 | ✓ 支持 |
| ICMP (ping) | ✗ 不支持 | ✓ 支持 |
| 游戏流量 | ✗ 通常不支持 | ✓ 支持 |
| Windows UWP 应用 | ✗ 不支持 | ✓ 支持 |
| DNS 泄漏防护 | 部分 | 完整 |
| 需要管理员权限 | 不需要 | 需要 |
| 系统资源占用 | 较低 | 略高 |
| 配置复杂度 | 一键开启 | 需授权,稍复杂 |
如何选择?
推荐使用系统代理的场景
- 日常网页浏览、社交应用、开发工具、下载包管理器依赖等以 TCP 为主的场景。
- 不希望给代理工具授予管理员权限,注重安全边界的用户。
- 对性能敏感,希望减少网络栈额外开销的场景。
- 初学者,希望操作简单快速上手的用户。
推荐使用 TUN 模式的场景
- 需要代理在线游戏流量,特别是使用大量 UDP 包的 FPS、MOBA 类游戏。
- 需要让 Windows 应用商店(UWP)应用走代理,例如 Xbox、Microsoft Store 等。
- 希望命令行工具、Docker 容器等不支持代理配置的程序也能走规则分流。
- 对 DNS 隐私有较高要求,希望彻底避免 DNS 泄漏的用户。
如何开启 TUN 模式?
在 Clash Verge Rev 中开启 TUN 模式的步骤如下:
- 点击左侧菜单中的「设置」图标,进入设置页面。
- 找到「TUN 模式」选项区域,点击开关将其打开。
- 系统弹出 UAC(Windows)或密码验证(macOS/Linux)请求,确认授权。
- 开关变为蓝色高亮,状态显示为「已启用」,即表示 TUN 模式成功运行。
- 此时可在「连接」页面看到包含 UDP 的连接记录,说明 TUN 正在接管全量流量。
常见问题
开启 TUN 后网络反而断了?这通常是因为虚拟网卡路由优先级配置问题,或防病毒软件拦截了 Clash 的驱动安装。尝试以管理员身份重启 Clash,或临时关闭防病毒软件后再开启 TUN。
TUN 模式下某些应用仍然无法走代理?部分应用会将流量直接绑定到物理网卡接口而非默认路由,TUN 对这类流量同样无效。可以查看 Clash 的「连接」页面,确认请求是否有经过处理。