为什么需要理解两种代理模式?
在使用 Clash 客户端时,你几乎总会看到两个关键开关:系统代理和 TUN 模式。很多新手打开其中一个就能上网,但并不清楚两者究竟有何不同——结果往往是游戏仍然无法连接、命令行工具报超时、或者开启 TUN 后反而出现网络冲突。
这两种模式并非简单的「普通版」与「高级版」关系,而是完全不同的流量拦截机制。理解它们的原理差异,能帮你根据实际场景做出正确选择,避免无效的反复调试。本文将从工作原理、适用场景和配置方法三个维度,全面解析 Clash TUN 模式与系统代理的区别。
什么是系统代理?
系统代理(System Proxy)是操作系统提供的一种标准网络代理机制。当你在 Clash 客户端中开启「系统代理」开关时,客户端会自动修改操作系统的代理设置,将 HTTP 和 HTTPS 流量的出口指向 Clash 监听的本地端口(默认为 7890)。
其工作流程可以概括为以下几步:
- Clash 在本地启动一个 SOCKS5/HTTP 混合端口(如
127.0.0.1:7890) - 客户端将系统代理地址设置为该本地端口
- 支持系统代理的应用(浏览器、部分即时通讯工具等)发起网络请求时,会先查询系统代理设置
- 请求被转发至 Clash 本地端口,由 Clash 根据规则决定直连或走代理节点
系统代理的优点是实现简单、资源占用低、无需特殊权限。在 Windows 上,你可以通过「设置 → 网络和 Internet → 代理」看到 Clash 写入的代理地址;macOS 则在「系统设置 → 网络 → 高级 → 代理」中体现。
curl、git)、许多游戏客户端、UWP 应用以及部分 Electron 应用会忽略系统代理,直接发起 TCP/UDP 连接。
什么是 TUN 模式?
TUN 模式(Network TUNnel)是一种更底层的流量拦截方式。Clash 基于 Mihomo 核心,在操作系统中创建一个虚拟网卡(Virtual Network Interface),通过修改系统路由表,将所有出站 TCP/UDP 流量引导至该虚拟网卡,再由 Clash 核心接管处理。
与系统代理的「应用主动上报」不同,TUN 模式的工作逻辑是「网络层被动拦截」:
- Clash 安装虚拟网卡驱动(Windows 为 Wintun,macOS 为 utun,Linux 为 tun 设备)
- 修改系统路由表,将默认路由或特定路由指向虚拟网卡
- 所有经过虚拟网卡的 IP 包被 Clash 核心读取
- Clash 解析目标地址,匹配规则后决定直连、代理或拒绝
- 处理后的流量从真实网卡发出
由于 TUN 在 IP 层而非应用层工作,它可以捕获几乎所有出站流量,包括不支持代理设置的程序。这也是 TUN 被称为「全局代理」或「真·全局模式」的原因——它不是简单地将所有流量走同一个节点,而是在网络层统一拦截后再按规则分流。
root 或 sudo;macOS 首次使用时需授权 Helper 工具。这是 TUN 模式与系统代理最显著的操作差异之一。
核心差异对比
下表从多个维度对比两种模式,便于快速查阅:
| 对比维度 | 系统代理 | TUN 模式 |
|---|---|---|
| 工作层级 | 应用层(HTTP/HTTPS 代理协议) | 网络层(IP 包拦截) |
| 流量覆盖范围 | 仅支持系统代理的应用 | 几乎全部 TCP/UDP 出站流量 |
| UDP 支持 | 有限(取决于应用实现) | 完整支持 UDP 转发 |
| 系统权限 | 普通用户权限即可 | 需管理员 / root / sudo |
| 资源占用 | 低 | 略高(虚拟网卡 + 包处理) |
| 配置复杂度 | 一键开关,几乎零配置 | 需安装驱动、授权权限 |
| 典型适用场景 | 日常浏览器上网、轻量使用 | 游戏、命令行、全局应用代理 |
| 与规则分流关系 | 支持(Clash 规则照常生效) | 支持(拦截后仍按规则分流) |
需要特别强调的是:两种模式都支持 Clash 的规则分流。开启 TUN 并不意味着所有流量都走代理节点——国内网站仍然可以按规则直连,广告域名仍可被拦截。TUN 解决的是「哪些应用的流量能被 Clash 看到」,而非「所有流量都走境外节点」。
系统代理:适用场景
在以下场景中,优先使用系统代理通常是更合理的选择:
- 以浏览器为主的使用习惯:Chrome、Firefox、Edge 等主流浏览器均原生支持系统代理,开启后即可正常访问境外网站
- 不需要代理命令行或特殊应用:如果你从不使用终端工具,也不玩需要代理的网络游戏,系统代理已足够
- 无法获取管理员权限:公司电脑、学校机房等受限环境可能禁止安装驱动或提权,系统代理是唯一可行方案
- 追求最低资源占用:老旧设备或同时运行大量程序时,避免 TUN 带来的额外 CPU 和内存开销
- 临时快速测试:验证订阅是否正常、节点是否可用时,系统代理开关最快捷
对于绝大多数「打开浏览器看看 YouTube、查资料」的轻度用户,系统代理配合规则分流模式就能提供稳定、够用的体验,无需额外折腾 TUN。
TUN 模式:适用场景
当你遇到系统代理「覆盖不到」的应用时,就应该考虑开启 TUN 模式:
- 命令行工具:
curl、wget、git clone、npm install、pip install等默认不读取系统代理 - 网络游戏:许多游戏客户端使用自定义网络栈,忽略系统代理设置,只有 TUN 能在 IP 层拦截游戏流量
- 开发调试:Docker 容器内网络、本地后端服务调用境外 API、IDE 插件更新等场景
- 即时通讯与协作工具:Slack、Discord、Telegram 桌面版等部分版本对系统代理支持不完整
- 需要 UDP 转发的服务:语音通话、部分视频流、QUIC 协议等依赖 UDP,TUN 能完整转发
- 防止 DNS 泄露:TUN 配合 DNS 劫持(dns-hijack)可接管系统 DNS 查询,降低泄露风险
如果你曾遇到「浏览器能访问 Google,但 CMD 里 ping 不通」或「游戏更新卡在下载界面」的情况,几乎可以肯定需要切换到 TUN 模式。
可以同时开启吗?
不建议同时开启系统代理和 TUN 模式。虽然 Clash 核心具备处理两种模式并存的能力,但在实际使用中,部分应用的流量可能被重复代理或路由冲突,表现为连接超时、速度骤降或间歇性断网。
推荐的使用策略是:
- 二选一:日常只用系统代理,需要全局覆盖时切换为 TUN(关闭系统代理)
- TUN 优先:如果你已经以管理员身份运行并开启了 TUN,系统代理开关保持关闭即可
- 规则分流始终有效:无论哪种模式,确保代理模式为「规则」而非「全局」,避免国内流量也走境外节点
Windows 平台:TUN 模式配置
Windows 上推荐使用 Clash Verge Rev,其对 TUN 模式的支持最为成熟。完整安装步骤可参考本站 Windows 安装教程,此处聚焦 TUN 专项配置。
开启步骤
-
以管理员身份运行
右键桌面快捷方式 →「以管理员身份运行」。也可在快捷方式属性 → 兼容性中勾选「以管理员身份运行此程序」,实现每次自动提权。 -
确认订阅已激活
在「配置」页面选中你的机场订阅,并在「代理」页面选择好节点或策略组。 -
开启 TUN 模式
进入「设置」→ 找到「TUN 模式」或「Clash 内核」相关选项 → 打开 TUN 开关。首次开启时系统会提示安装 Wintun 虚拟网卡驱动,点击「是」允许安装。 -
关闭系统代理
主界面顶部的「系统代理」开关应处于关闭状态。TUN 已接管流量,无需系统代理重复工作。 -
验证生效
打开命令提示符,执行curl https://www.google.com或ping 8.8.8.8。若能正常响应,说明 TUN 模式已成功拦截命令行流量。
Windows 常见问题
- Wintun 安装失败:确认以管理员身份运行;检查 Windows 更新是否完整;尝试在设备管理器中手动卸载旧的 Wintun 适配器后重新安装
- 防火墙拦截:在 Windows Defender 防火墙中允许 Mihomo 核心通过专用和公用网络
- 与其他 VPN 冲突:若同时运行其他 VPN 软件,可能抢占虚拟网卡或路由,请先关闭其他 VPN
macOS 平台:TUN 模式配置
macOS 用户常用的 Clash 客户端包括 ClashX Meta 和 Clash Verge Rev(跨平台版)。两者均基于 Mihomo 核心,TUN 实现原理一致。
ClashX Meta 开启 TUN
-
点击菜单栏 ClashX Meta 图标 →「配置」→「实验性功能」或「增强模式」,找到 增强模式(TUN) 选项。
-
首次开启时,macOS 会弹出授权对话框,要求安装 Helper 工具并输入系统密码。这是创建 utun 虚拟网卡所必需的,点击「允许」完成授权。
-
授权成功后,菜单栏图标旁会出现 TUN 运行指示。关闭「设置为系统代理」选项,避免与 TUN 重复。
Clash Verge Rev(macOS 版)
操作逻辑与 Windows 版相同:进入「设置」→ 开启 TUN 模式 → 按提示完成 Helper 授权。macOS 上使用 utun 设备而非 Wintun,无需单独下载驱动。
Linux 平台:TUN 模式配置
Linux 上运行 Mihomo 核心时,TUN 模式需要 /dev/net/tun 设备可用,且进程需以 root 权限运行(或通过 cap_net_admin capability 授权)。
配置步骤
-
确认 tun 模块已加载
执行ls /dev/net/tun,若文件存在则设备就绪。若不存在,执行sudo modprobe tun加载内核模块。 -
在 config.yaml 中启用 TUN
见下文 YAML 配置示例,将tun.enable设为true。 -
以 root 运行核心
使用sudo ./mihomo -d /path/to/config启动,或通过 systemd 服务以 root 身份运行。生产环境推荐 systemd 方式,便于开机自启和日志管理。 -
图形客户端用户
若使用 Clash Verge Rev 等 Linux GUI 客户端,在设置中开启 TUN 模式即可,客户端会自动处理权限请求(可能弹出 polkit 授权对话框)。
Linux 桌面用户也可参考本站 使用教程 中的 TUN 模式章节,了解 systemd 服务配置细节。
config.yaml 中的 TUN 配置详解
除了 GUI 开关,你也可以直接在 Clash 配置文件(config.yaml)中精细控制 TUN 行为。以下为 Mihomo 核心的推荐配置片段:
tun:
enable: true
stack: system # system | gVisor | mixed
auto-route: true
auto-detect-interface: true
dns-hijack:
- any:53
dns:
enable: true
enhanced-mode: fake-ip
nameserver:
- https://dns.alidns.com/dns-query
- https://1.1.1.1/dns-query
各字段含义说明:
enable:是否启用 TUN 模式,GUI 开关本质上就是修改此值stack:协议栈实现方式。system使用操作系统原生栈,兼容性最好;gVisor使用用户态网络栈,在某些环境下更稳定;mixed为混合模式auto-route:自动配置路由表,将流量引导至 TUN 设备,一般保持trueauto-detect-interface:自动检测出口网卡,多网卡环境(如有线 + Wi-Fi)建议开启dns-hijack:劫持 DNS 查询至 Clash 内置 DNS 模块,配合fake-ip模式可有效防止 DNS 泄露
修改 config.yaml 后需重新加载配置。GUI 客户端通常提供「重载配置」按钮;命令行模式下发送 SIGHUP 信号或重启进程即可生效。
TUN 模式下的 DNS 处理
开启 TUN 后,DNS 解析行为会发生变化。Clash 会通过 dns-hijack 拦截发往 53 端口的 DNS 查询,并使用配置文件中的 dns 段进行解析。
推荐使用 enhanced-mode: fake-ip:Clash 为每个域名分配一个虚假 IP 地址,待实际连接时再解析真实地址。这能加速规则匹配并减少 DNS 泄露。若某些应用与 fake-ip 不兼容(如局域网设备发现),可改用 redir-host 模式。
你可以在 dnsleaktest.com 等网站测试 DNS 是否泄露。TUN + dns-hijack + fake-ip 的组合通常能确保 DNS 查询也经由 Clash 处理。
常见问题与解决方法
浏览器能访问外网,命令行不行
这是典型的「只用了系统代理、未开 TUN」现象。浏览器会读取系统代理设置,而命令行工具默认直连。解决方法:以管理员身份运行 Clash,开启 TUN 模式并关闭系统代理。
开启 TUN 后整体变慢
可能原因包括:虚拟网卡驱动与系统不兼容(尝试切换 stack 为 gVisor);规则将国内流量错误地走代理(确认代理模式为「规则」);节点质量差(执行延迟测速换节点)。
TUN 与系统代理同时开导致断网
关闭系统代理,仅保留 TUN。若仍异常,尝试重启 Clash 客户端或重启网络适配器。
游戏仍无法连接
确认 TUN 已真正运行(检查虚拟网卡是否存在);确认节点支持 UDP 转发;部分游戏的反作弊系统可能检测虚拟网卡,需查阅游戏社区是否有特殊配置方案。
提示权限不足无法创建 TUN
Windows 请右键「以管理员身份运行」;Linux 使用 sudo 或配置 systemd 服务;macOS 重新授权 Helper 工具并输入系统密码。
快速决策指南
如果你仍不确定该选哪种模式,可以按以下流程判断:
- 你主要用浏览器上网,且不需要代理其他应用 → 系统代理
- 你需要代理命令行、游戏、或某类不读系统代理的应用 → TUN 模式
- 你无法获取管理员权限 → 只能用系统代理
- 你担心 DNS 泄露或需要完整 UDP 支持 → 优先TUN 模式
- 两种都能满足需求 → 优先系统代理(更轻量),需要时再切 TUN
无论选择哪种模式,请始终使用「规则」代理模式,让 Clash 智能分流国内外流量,而非简单粗暴地全局走代理。
为什么 Clash 是代理模式的最佳实践?
市面上不乏「一键 VPN」类工具,它们往往采用全局隧道方式,所有流量强制走同一出口,无法精细控制哪些网站直连、哪些走代理。部分浏览器插件 proxy 只能覆盖网页标签页,对系统级应用完全无效;老牌 Clash for Windows 虽曾支持 TUN,但项目已停更,对新系统和新协议的支持逐渐落后。
Clash 基于 Mihomo 核心,在 TUN 与系统代理之间提供了清晰的双模式切换,且两种模式下规则分流始终生效——国内网站直连、境外走节点、广告拦截,互不干扰。配合 Clash Verge Rev、ClashX Meta、FlClash 等持续维护的客户端,Windows、macOS、Linux、Android 均可获得统一的配置体验与订阅兼容。如果你需要在不同场景间灵活切换轻量浏览与全局覆盖,Clash 的规则引擎 + 双模式架构,比单纯的 VPN 或浏览器插件更可控、更省资源。