进阶配置

TUN 模式详解:实现真正的全局透明代理

系统代理是 Clash 最基础的接管方式,通过设置操作系统 HTTP/SOCKS5 代理参数将支持代理的应用流量转入 Clash 处理。但系统代理存在本质局限——游戏客户端、命令行工具等直接建立网络连接的程序不受其控制。Clash 官方推出的 TUN 模式通过虚拟网卡在网络层接管全部系统流量,是实现真正全局透明代理的官方解决方案。

TUN 模式的工作原理

TUN(Network Tunnel)是操作系统提供的一种虚拟网络接口机制,工作在 OSI 模型的第三层(网络层)。Clash 开启 TUN 模式后,会在系统中创建一块名为 utun(macOS)或 Meta(Windows/Linux)的虚拟网卡,并修改系统路由表,将所有出站 IP 流量导入这块虚拟网卡。

流量进入虚拟网卡后,Clash 在用户空间对其进行解析,识别出目标地址,再根据规则配置决定是走代理还是直连,最后通过实际的物理网卡发出。整个过程对应用程序完全透明,应用程序无需做任何配置。

与 TAP 模式(工作在第二层,以太网帧级别)相比,TUN 模式无需处理 ARP、以太网头等二层细节,性能更高,也更容易实现跨平台兼容。

如何开启 TUN 模式

开启 TUN 模式有两种方式。图形化客户端通常在设置页面提供 TUN 开关,以 Clash for Windows 为例,需要先在「常规」设置中安装「Service Mode」(服务模式),安装完成后再开启「TUN Mode」开关。服务模式的安装需要管理员权限,目的是让 Clash 以系统服务的身份运行,从而获得修改路由表的权限。

另一种方式是在配置文件中直接声明 TUN 配置:

tun:
  enable: true
  stack: mixed
  dns-hijack:
    - any:53
  auto-route: true
  auto-detect-interface: true
开启 TUN 模式需要管理员(root)权限。macOS 用户首次使用还需在「系统设置 → 隐私与安全性」中允许安装网络扩展。

三种 TUN 栈模式的选择

Mihomo 内核提供三种 TUN 协议栈实现,各有优劣:

  • system:直接调用操作系统原生的 TCP/IP 栈。性能最高,CPU 和内存开销最小,但在少数系统配置下可能出现兼容性问题。
  • gvisor:使用 Google gVisor 项目中的用户空间 TCP/IP 协议栈实现。与操作系统内核完全隔离,兼容性最好,适合排查问题或在特殊环境下使用,但性能略低于 system 模式。
  • mixed:TCP 连接使用 system 栈,UDP 连接使用 gVisor 栈。综合了两者的优点——TCP 性能接近原生,UDP 兼容性好。这是目前最推荐的选择,绝大多数场景下表现最佳。

DNS 劫持与防泄漏

dns-hijack: [any:53] 这个配置至关重要。它的作用是将所有发往任意 IP 地址的 53 端口 DNS 请求,都强制重定向到 Clash 内置的 DNS 模块处理。

为什么必须劫持 DNS?因为在 TUN 模式下,如果某些应用直接向 8.8.8.8:53 发送 DNS 请求(绕过系统 DNS 设置),这个请求会直接走物理网卡出去,不经过 Clash 的规则判断。这不仅可能导致 DNS 泄漏(暴露你的真实访问记录),还会造成某些域名无法正确路由到代理节点。开启 DNS 劫持后,所有 DNS 请求都由 Clash 统一处理,配合 Fake-IP 模式可以实现最优的 DNS 防污染效果。

验证与排查

开启 TUN 模式后,可以通过以下方法验证是否正常工作:在终端运行 curl -I https://www.google.com,如果能收到正常的 HTTP 响应头,说明命令行工具的流量已经走代理了。你也可以在 Clash 的「连接」页面实时查看所有经过 TUN 接管的连接,包括之前系统代理无法覆盖的程序。

如果开启后网络完全断开,最常见的原因是 auto-detect-interface 未能正确识别出口网卡。可以手动指定:

tun:
  enable: true
  stack: mixed
  auto-route: true
  interface-name: en0   # macOS 物理网卡名,Windows 通常是 以太网 或 WLAN
Clash
准备好使用 Clash 了吗?
免费下载,支持 Windows、macOS、Linux、Android 全平台。
立即下载
文章导航
相关文章
Clash
立即下载 Clash
全平台客户端,免费使用
前往下载页