什么是 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 clonenpm installpip installdocker pull 等默认不走系统代理,需要 TUN 或手动设置环境变量
  • UDP 协议应用:视频通话(Zoom、Teams)、语音(Discord)、DNS 查询等依赖 UDP,系统代理对 UDP 支持有限
  • 非标准代理应用:部分开发工具、学术软件、VPN 客户端不遵循系统代理设置
  • iOS/macOS 全局代理:配合 Stash/Surge,TUN 可接管系统全部流量,包括系统更新
💡
日常浏览不需要 TUN:如果只是用浏览器翻墙,系统代理模式完全够用,且资源占用更低。TUN 模式主要为需要全流量代理的高级场景设计。

Windows 平台开启 TUN 模式(Clash Verge Rev)

前置条件

TUN 模式需要以管理员身份运行 Clash Verge Rev。右键任务栏图标 → "以管理员身份重启",或在开始菜单中右键应用图标 → "以管理员身份运行"。

首次启动 TUN 时,程序会自动安装 wintun.dll 驱动(Windows TUN 虚拟网卡驱动)。此过程需要联网下载约 1 MB 的驱动文件,安装完成后无需重复操作。

开启步骤

  1. 确认 Clash Verge Rev 以管理员身份运行(标题栏或任务栏图标应显示盾牌标志)
  2. 点击左侧导航的"设置"
  3. 找到"系统设置"区域,开启"TUN 模式"开关
  4. 若弹出驱动安装提示,点击"确认"并等待安装完成
  5. 开启后,任务管理器的网络适配器列表中会出现"Mihomo"虚拟网卡
⚠️
与 Hyper-V / WSL2 的兼容性:开启 TUN 模式后,Hyper-V 或 WSL2 中的虚拟机可能无法访问外网,因为 TUN 会拦截所有出站流量。解决方案:在 TUN 配置中排除虚拟机所在网段(如 172.16.0.0/12),或临时切换回系统代理模式。

macOS 平台开启 TUN 模式(Clash Verge Rev)

开启步骤

  1. 在 Clash Verge Rev 的"设置"页面,找到"TUN 模式"并开启
  2. 系统会弹出安全提示,前往"系统偏好设置 → 隐私与安全性"
  3. 在页面底部找到"已阻止使用系统扩展"的提示,点击"允许"
  4. 输入 macOS 用户密码完成授权,重新回到 Clash Verge Rev 开启 TUN 开关

macOS Sequoia(15)及以上版本还需在"系统设置 → VPN 与过滤器"中手动允许 Mihomo 的网络扩展。

ℹ️
macOS 的 TUN 模式基于 Network Extension 框架实现,每次 macOS 大版本升级后可能需要重新授权系统扩展。

Android 平台 TUN 模式(ClashMeta for Android)

Android 版 CMFA 的 TUN 模式基于系统的 VpnService API 实现,无需 root 权限。启动代理时系统弹出的 VPN 权限请求即为 TUN 模式的授权。

  1. 启动 CMFA,确保配置文件已激活
  2. 点击主界面的启动按钮,首次启动会弹出 VPN 权限请求
  3. 点击"确定",Android 状态栏出现钥匙图标即表示 TUN 已启用
  4. 在"设置 → 覆写配置"中可调整 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 值说明推荐场景
mixedTCP 用系统栈,UDP 用 gVisor,兼容性最佳默认推荐,大多数场景
system全部使用系统网络栈,性能最高Linux / macOS 高性能场景
gvisor用户态虚拟网络栈,隔离性好兼容性问题时尝试

TUN 模式常见问题排查

开启后无法上网

  1. 确认以管理员权限运行(Windows)或已授权网络扩展(macOS)
  2. 检查配置文件中是否包含 GEOIP,CN,DIRECT 规则,避免国内流量循环
  3. 查看 Clash 日志,确认 TUN 接口已成功创建(日志中出现 "inbound started" for tun)
  4. 临时关闭杀毒软件,部分安全软件会拦截虚拟网卡驱动

游戏还是直连

确认以下配置均已完成:

  • 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 开销。如遇明显速度下降:

  • stackgvisor 改为 mixedsystem
  • 确认 auto-route: true 已开启(避免路由表冲突)
  • 检查是否有其他 VPN 软件同时运行,造成双重代理
下载 Clash 客户端,立即体验 TUN 全局代理

总结:TUN 模式使用要点

  • TUN 模式在驱动层拦截所有流量,系统代理只覆盖支持代理协议的应用
  • 游戏、命令行工具、UDP 应用场景下,TUN 是唯一可靠的解决方案
  • Windows 需管理员权限 + wintun 驱动;macOS 需授权网络扩展;Android 基于 VpnService 无需 root
  • YAML 配置中 stack: mixed + auto-route: true + dns-hijack: any:53 是最佳实践组合
  • 配置文件必须包含国内直连规则(GEOIP,CN,DIRECT),否则国内流量也会走代理造成速度损失

延伸阅读