TUN 模式原理与开启方法:接管全局流量的正确姿势

解释 TUN 虚拟网卡与系统代理的区别,说明哪些程序必须依赖 TUN 模式才能走代理,以及在各平台开启 TUN 时的权限与 DNS 注意事项。

01

系统代理与 TUN 模式的边界

SECTION / PROXY VS TUN

系统代理(System Proxy)是操作系统层面的一项设置,本质是往系统或应用运行环境写入一组代理地址(HTTP_PROXY / HTTPS_PROXY 等环境变量,或 Windows 的 WinINet/WinHTTP 配置项、macOS 的网络偏好设置)。程序在发起网络请求时,如果读取了这组配置并主动把流量投递到代理端口,才算“走了代理”。这是一种**协商式**转发:代理生效与否,取决于目标程序是否配合。

TUN 模式则完全不同。Clash Meta(mihomo)开启 TUN 后,会在系统里创建一张虚拟网卡(Windows 上依赖 Wintun 驱动,macOS/Linux 上对应 utun/tun0 设备),并把系统默认路由指向这张虚拟网卡。此后所有经过网络层的 IP 数据包——无论来自哪个进程、是否知道代理的存在——都会先被虚拟网卡截获,再交给 Clash 内核按规则处理。这是**网络层的强制接管**,不依赖任何程序的主动配合。

一句话总结区别:系统代理管的是“愿不愿意走”,TUN 模式管的是“走不走都得经过我”。

NOTE / 说明

TUN 模式不是替代系统代理的“加强版”,而是另一套转发路径。多数客户端两者可以共存,但同时开启时需要留意路由表是否出现互相覆盖的情况,建议二选一使用,减少排查成本。

02

哪些流量必须依赖 TUN 才能被代理

SECTION / WHO NEEDS TUN

下列几类场景下,系统代理无法生效,只有 TUN 模式能覆盖:

如果你发现某个应用“开了代理却依然直连”,大概率就属于以上几类,开启 TUN 模式是最直接的解决办法。

03

各平台开启方法与权限要求

SECTION / PLATFORM SETUP

TUN 模式因为需要创建虚拟网卡、修改系统路由表,在三大平台上都要求更高的权限,细节各不相同。

Windows 上创建虚拟网卡依赖 Wintun 驱动,主流客户端(Clash Verge、Clash for Windows 衍生版)会在安装或首次启用 TUN 时自动安装该驱动。启用步骤:

  1. 以管理员身份运行客户端(右键“以管理员身份运行”,或在设置中开启“开机以管理员权限启动”)。
  2. 在设置面板中找到 TUN 模式开关并启用,首次启用系统会弹出驱动安装或网络适配器授权提示,点击允许。
  3. 若系统防火墙拦截了虚拟网卡的出站规则,需要在 Windows Defender 防火墙中手动放行该驱动对应的网络类别(通常首次弹窗时选择“专用网络”即可)。

不以管理员权限运行是 Windows 上 TUN 模式无法开启的最常见原因,表现为开关打开后又自动弹回。

CAUTION / 注意

TUN 模式赋予客户端接管全局路由的能力,请只从官方渠道获取客户端并核对下载来源,不要为来源不明的程序授予管理员权限或 CAP_NET_ADMIN

04

DNS 处理:fake-ip、劫持与路由环路

SECTION / DNS BEHAVIOR

开启 TUN 模式后,DNS 查询同样会被虚拟网卡拦截,这也是 TUN 模式下最容易出问题的环节。配置文件中通常需要显式声明 DNS 劫持与解析策略:

tun:
  enable: true
  stack: system
  dns-hijack:
    - "any:53"
  auto-route: true
  auto-detect-interface: true
dns:
  enable: true
  fake-ip-range: 198.18.0.1/16
  nameserver:
    - 223.5.5.5
    - 1.1.1.1

dns-hijack 表示把所有对外的 53 端口 DNS 请求强制拦截并交给 Clash 内核处理,避免绕过规则直连境外或被污染的 DNS 服务器。fake-ip 模式则给每个域名分配一个位于私有网段内的假 IP,应用侧看到的是这个假 IP,真正的连接建立时才由内核换成实际出口,好处是能按域名匹配规则,而不必等待真实解析结果。

常见问题排查方向:

05

验证 TUN 模式是否已生效

SECTION / VERIFICATION

开启 TUN 模式后,建议按以下顺序验证,而不是仅凭客户端开关状态判断:

  1. 检查虚拟网卡是否存在。 Windows 下打开“网络连接”查看是否新增名为类似“Mihomo”“Clash”字样的适配器;macOS/Linux 下执行 ifconfigip addr 查看是否出现 utun / tun0 设备。
  2. 检查默认路由。Windows 用 route print,macOS/Linux 用 netstat -rnip route,确认默认路由已指向虚拟网卡而非物理网卡。
  3. 用不遵循系统代理的工具做测试。例如在终端里执行 curl 而不带任何代理参数,或直接用命令行 Ping 一个被规则判定为“需要代理”的域名,观察是否命中预期出口。
  4. 查看客户端的连接日志。多数客户端在“连接”或“日志”面板里会标注每条连接的入站类型,TUN 模式下的连接通常标记为 TUN 而非 HTTP/SOCKS,可用来确认具体是哪条链路生效。

如果以上检查全部通过,但某个具体应用仍未走代理,大概率是该应用在系统层面绑定了固定网络接口或使用了自定义 DNS,需要单独排查该程序的网络设置,而非继续调整 Clash 配置。

CTA-01

需要一份支持 TUN 模式的客户端?

Clash Verge、mihomo 内核均支持 TUN 模式开关,配合本文的权限与 DNS 说明即可完成配置。若尚未安装客户端,可从下载页获取对应平台的安装包;若想先了解基础安装流程,可查看教程页。

获取客户端DL·711