什么是 TUN 模式?与系统代理有何不同
Clash 提供两种工作模式将流量接入代理:系统代理和 TUN 模式。理解它们的区别,是正确使用 Clash 的关键。
| 对比维度 | 系统代理(HTTP/SOCKS5) | TUN 模式(虚拟网卡) |
|---|---|---|
| 工作层级 | 应用层(L7) | 网络层(L3) |
| 拦截方式 | 应用主动设置代理地址 | 操作系统内核级流量劫持 |
| 覆盖范围 | 仅支持代理协议的应用 | 所有 TCP/UDP 流量,无需应用配合 |
| UDP 支持 | 有限,依赖应用实现 | 完整 UDP 支持 |
| 需要权限 | 普通用户权限 | 管理员 / root 权限 |
系统代理本质上是在操作系统层面设置一个 HTTP/SOCKS5 代理地址(如 127.0.0.1:7890)。浏览器等支持代理协议的应用会将请求发到这个地址,由 Clash 转发。但游戏客户端、命令行工具、某些 Electron 应用往往不读取系统代理设置,流量依然直连。
TUN 模式通过在操作系统中创建一块虚拟网卡(Mihomo TUN),在驱动层拦截所有流出的网络数据包,无论应用程序是否支持代理协议,流量都会被强制捕获并由 Clash 的规则引擎处理。这才是真正意义上的"全局透明代理"。
何时需要开启 TUN 模式
以下场景强烈建议开启 TUN 模式:
- 游戏加速:Steam、Epic Games、战网等游戏客户端通常不走系统代理,开启 TUN 后可直接代理游戏流量
- 命令行工具:
git clone、npm install、pip install、docker pull等默认不走系统代理,需要 TUN 或手动设置环境变量 - UDP 协议应用:视频通话(Zoom、Teams)、语音(Discord)、DNS 查询等依赖 UDP,系统代理对 UDP 支持有限
- 非标准代理应用:部分开发工具、学术软件、VPN 客户端不遵循系统代理设置
- iOS/macOS 全局代理:配合 Stash/Surge,TUN 可接管系统全部流量,包括系统更新
Windows 平台开启 TUN 模式(Clash Verge Rev)
前置条件
TUN 模式需要以管理员身份运行 Clash Verge Rev。右键任务栏图标 → "以管理员身份重启",或在开始菜单中右键应用图标 → "以管理员身份运行"。
首次启动 TUN 时,程序会自动安装 wintun.dll 驱动(Windows TUN 虚拟网卡驱动)。此过程需要联网下载约 1 MB 的驱动文件,安装完成后无需重复操作。
开启步骤
- 确认 Clash Verge Rev 以管理员身份运行(标题栏或任务栏图标应显示盾牌标志)
- 点击左侧导航的"设置"
- 找到"系统设置"区域,开启"TUN 模式"开关
- 若弹出驱动安装提示,点击"确认"并等待安装完成
- 开启后,任务管理器的网络适配器列表中会出现"Mihomo"虚拟网卡
macOS 平台开启 TUN 模式(Clash Verge Rev)
开启步骤
- 在 Clash Verge Rev 的"设置"页面,找到"TUN 模式"并开启
- 系统会弹出安全提示,前往"系统偏好设置 → 隐私与安全性"
- 在页面底部找到"已阻止使用系统扩展"的提示,点击"允许"
- 输入 macOS 用户密码完成授权,重新回到 Clash Verge Rev 开启 TUN 开关
macOS Sequoia(15)及以上版本还需在"系统设置 → VPN 与过滤器"中手动允许 Mihomo 的网络扩展。
Android 平台 TUN 模式(ClashMeta for Android)
Android 版 CMFA 的 TUN 模式基于系统的 VpnService API 实现,无需 root 权限。启动代理时系统弹出的 VPN 权限请求即为 TUN 模式的授权。
- 启动 CMFA,确保配置文件已激活
- 点击主界面的启动按钮,首次启动会弹出 VPN 权限请求
- 点击"确定",Android 状态栏出现钥匙图标即表示 TUN 已启用
- 在"设置 → 覆写配置"中可调整 TUN 的工作模式(Mixed / TUN only / System Proxy only)
Android 的 TUN 默认接管所有 APP 的流量,无需额外配置。可在应用列表中排除特定 APP(如银行 APP),避免触发风控。
TUN 模式 YAML 配置详解
通过在配置文件中添加 tun 字段,可以对 TUN 模式进行精细控制:
tun:
enable: true
stack: mixed # mixed(推荐)/ system / gvisor
auto-route: true # 自动添加路由规则,让流量进入 TUN
auto-detect-interface: true # 自动检测出口网卡,多网卡环境下必开
dns-hijack:
- any:53 # 劫持所有 DNS 请求(含 UDP 53 端口)
strict-route: false # true 时丢弃非 TUN 流量,安全性更高但会影响局域网
mtu: 9000 # 最大传输单元,9000 可减少分包,提升吞吐
# DNS 配置需配合 TUN 使用
dns:
enable: true
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
nameserver:
- 223.5.5.5
- 119.29.29.29
fallback:
- tls://8.8.8.8:853
- tls://1.1.1.1:853
fallback-filter:
geoip: true
geoip-code: CN
stack 参数选择
| stack 值 | 说明 | 推荐场景 |
|---|---|---|
mixed | TCP 用系统栈,UDP 用 gVisor,兼容性最佳 | 默认推荐,大多数场景 |
system | 全部使用系统网络栈,性能最高 | Linux / macOS 高性能场景 |
gvisor | 用户态虚拟网络栈,隔离性好 | 兼容性问题时尝试 |
TUN 模式常见问题排查
开启后无法上网
- 确认以管理员权限运行(Windows)或已授权网络扩展(macOS)
- 检查配置文件中是否包含
GEOIP,CN,DIRECT规则,避免国内流量循环 - 查看 Clash 日志,确认 TUN 接口已成功创建(日志中出现 "inbound started" for tun)
- 临时关闭杀毒软件,部分安全软件会拦截虚拟网卡驱动
游戏还是直连
确认以下配置均已完成:
- TUN 开关已打开,且
auto-route: true - 代理模式为"规则"或"全局",不是"直连"
- 配置文件中游戏服务器域名/IP 对应的规则指向代理策略而非 DIRECT
- 在 Clash 日志中搜索游戏进程名,确认流量确实经过了 Clash
DNS 循环 / 解析失败
TUN 开启后,dns-hijack: any:53 会捕获所有 DNS 请求交由 Clash 处理。若 Clash 的 DNS 配置本身有问题(如 nameserver 无法访问),会导致 DNS 解析失败。
排查步骤:临时将 DNS nameserver 改为 223.5.5.5(阿里 DNS),确认基础连通性后再调整。
开启 TUN 后速度变慢
TUN 模式因需要在内核层处理数据包,有约 5–15% 的额外 CPU 开销。如遇明显速度下降:
- 将
stack从gvisor改为mixed或system - 确认
auto-route: true已开启(避免路由表冲突) - 检查是否有其他 VPN 软件同时运行,造成双重代理
总结:TUN 模式使用要点
- TUN 模式在驱动层拦截所有流量,系统代理只覆盖支持代理协议的应用
- 游戏、命令行工具、UDP 应用场景下,TUN 是唯一可靠的解决方案
- Windows 需管理员权限 + wintun 驱动;macOS 需授权网络扩展;Android 基于 VpnService 无需 root
- YAML 配置中
stack: mixed+auto-route: true+dns-hijack: any:53是最佳实践组合 - 配置文件必须包含国内直连规则(
GEOIP,CN,DIRECT),否则国内流量也会走代理造成速度损失
延伸阅读
- 规则分流配置说明:深入理解 DOMAIN / IP-CIDR / GEOIP 等规则类型
- DNS 防污染设置:配合 TUN 模式彻底解决 DNS 泄露问题
- Clash 完整安装配置教程:从零开始的新手入门指南