什么是 TUN 模式:从应用代理到系统代理

在传统代理模式下,我们通常依赖浏览器设置(HTTP/SOCKS5)或系统环境变量来让应用走代理。然而,许多应用(如各类终端工具、游戏客户端、后台服务)并不遵循系统代理设置。这导致了"网页能开,终端报错"的尴尬局面。

TUN 模式(TUN Device Mode)是解决这一痛点的终极方案。它不依赖于应用层的代理协议,而是直接在操作系统内核层创建一个虚拟网卡(TUN 接口)。一旦开启,所有流经操作系统的网络包都会通过这块虚拟网卡。Clash 会接管这块网卡收到的三层(IP 层)数据包,根据规则进行转发。

透明代理:用户无需在任何应用中做设置,应用甚至意识不到代理的存在,网络流量在底层被悄无声息地转发,这就是所谓的"透明"。

技术原理:虚拟网卡与三层流量接管

要理解 TUN 模式,我们需要从操作系统的网络协议栈说起。

当一个应用尝试访问互联网时,它会构造一个数据包交给内核。在没有 TUN 模式时,内核查路由表,将包发往真实的物理网卡(如 Wi-Fi 或以太网)。

开启 TUN 模式后,Clash 会执行以下操作:

  1. 创建虚拟设备:在系统内核申请一个 TUN 字符设备,并分配一个 IP 范围。
  2. 修改路由表:将系统默认路由(0.0.0.0/0)指向这个虚拟设备。
  3. 数据包捕获:内核将原本要发往物理网卡的包,重定向到虚拟网卡。Clash 作为一个用户态程序,通过文件描述符读取这些原始 IP 数据包。
  4. 协议栈重组:Clash 内部实现了一个轻量级的 TCP/IP 协议栈,将捕获的原始包还原为连接,再通过规则分流发送到对应的节点。

系统代理 vs. TUN 模式:深度对比

维度 系统代理 (HTTP/SOCKS5) TUN 模式 (三层接管)
接管范围 仅限遵循设置的应用 全系统所有流量
UDP 支持 较差 (常需特殊支持) 原生完整支持
DNS 劫持 依赖浏览器 DOH 或设置 强制接管所有 DNS 请求
资源开销 极低 中等 (涉及内核态拷贝)
配置难度 简单 需管理员权限

实战配置:开启极致透明代理体验

在 Clash.Meta (mihomo) 内核中,TUN 模式的功能得到了极大的增强。以下是一份推荐的最佳实践配置,旨在实现高性能与防泄漏:

config.yaml - TUN 模式核心配置
tun:
  enable: true
  stack: mixed          # 网络栈选择,推荐 mixed
  auto-route: true      # 自动设置系统路由,接管全流量
  auto-detect-interface: true # 自动检测物理出口网卡,防止环路
  dns-hijack:
    - 'any:53'          # 劫持所有发往 53 端口的 DNS 请求
  strict-route: true    # 严格路由模式,防止流量绕过 TUN
  device: Meta          # 定义虚拟网卡名称
  mtu: 1500             # 保持默认或根据网络环境微调

网络栈选择:System、gVisor 与 Mixed

stack 字段决定了 Clash 如何处理捕获到的 IP 包,这是影响性能和稳定性的关键:

避坑指南:DNS 泄漏与绕过问题

即便开启了 TUN,如果配置不当,依然可能发生 DNS 泄漏(即 DNS 请求直接发给了本地运营商,导致访问记录被记录或劫持)。

核心原则:开启 TUN 模式时,必须同时正确配置 Clash 内部的 DNS 模块。

为了确保 DNS 不泄漏,建议开启 fake-ip 模式:

搭配 TUN 的 DNS 配置
dns:
  enable: true
  enhanced-mode: fake-ip
  nameserver:
    - 'https://doh.pub/dns-query'
    - 'https://dns.alidns.com/dns-query'
  fallback:
    - 'tls://8.8.8.8:853'
    - 'tls://1.1.1.1:853'

fake-ip 模式下,当应用请求 DNS 时,Clash 立即返回一个虚拟 IP(如 198.18.x.x)。应用发起连接到这个虚拟 IP,流量到达 TUN 网卡后,Clash 再根据内部缓存的真实域名进行分流转发。这完美避免了应用在系统层面进行真实的解析尝试。

性能优化建议

对于追求极致速度的用户(如 4K 视频、千兆宽带用户),可以考虑以下调整:

  1. 开启 TCP 并发tcp-concurrent: true 可以加快连接建立速度。
  2. 调整 MTU:如果在某些网络环境下出现"网页加载半截"或"连接被重置",尝试将 mtu 降低至 1400 或 1350。
  3. 使用高级内核:确保使用基于最新 mihomo 内核的客户端,如 Clash V.CORE,其内核优化了 TUN 读写性能,大幅降低了用户态切换带来的延迟。

总的来说,TUN 模式是目前现代网络环境下实现真正透明代理的最优解。虽然它需要管理员权限且配置稍显复杂,但一旦部署成功,它所带来的"无感上网"体验是传统应用代理无法比拟的。

如果你正在寻找一个能完美驾驭 TUN 模式,同时又不希望手动去维护复杂的 YAML 配置文件的工具,那么 Clash V.CORE 绝对值得一试。它将这些复杂的底层技术封装在优雅的 UI 之后,让你一键开启全系统级的高性能透明代理。

立即体验 Clash V.CORE,开启透明代理新纪元