两种模式的本质区别
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 的「連線」頁面,確認请求是否有经过处理。