什么是 TUN 模式:从应用代理到系统代理
在传统代理模式下,我们通常依赖浏览器设置(HTTP/SOCKS5)或系统环境变量来让应用走代理。然而,许多应用(如各类终端工具、游戏客户端、后台服务)并不遵循系统代理设置。这导致了"网页能开,终端报错"的尴尬局面。
TUN 模式(TUN Device Mode)是解决这一痛点的终极方案。它不依赖于应用层的代理协议,而是直接在操作系统内核层创建一个虚拟网卡(TUN 接口)。一旦开启,所有流经操作系统的网络包都会通过这块虚拟网卡。Clash 会接管这块网卡收到的三层(IP 层)数据包,根据规则进行转发。
技术原理:虚拟网卡与三层流量接管
要理解 TUN 模式,我们需要从操作系统的网络协议栈说起。
当一个应用尝试访问互联网时,它会构造一个数据包交给内核。在没有 TUN 模式时,内核查路由表,将包发往真实的物理网卡(如 Wi-Fi 或以太网)。
开启 TUN 模式后,Clash 会执行以下操作:
- 创建虚拟设备:在系统内核申请一个 TUN 字符设备,并分配一个 IP 范围。
- 修改路由表:将系统默认路由(0.0.0.0/0)指向这个虚拟设备。
- 数据包捕获:内核将原本要发往物理网卡的包,重定向到虚拟网卡。Clash 作为一个用户态程序,通过文件描述符读取这些原始 IP 数据包。
- 协议栈重组: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 包,这是影响性能和稳定性的关键:
- System:使用操作系统自身的网络协议栈。兼容性最好,但在处理大量短连接时开销较大,且某些系统下 UDP 性能欠佳。
- gVisor:使用来自 Google 的用户态协议栈。它在用户态完成协议解析,安全性极高,且完全掌控连接状态,但 CPU 消耗略高于 System。
- Mixed:这是目前最推荐的选择。它将 TCP 交给性能稳定的内核处理(或类似高效方案),而将 UDP 交给 gVisor 或专用模块处理,兼顾了吞吐量与游戏低延迟。
避坑指南:DNS 泄漏与绕过问题
即便开启了 TUN,如果配置不当,依然可能发生 DNS 泄漏(即 DNS 请求直接发给了本地运营商,导致访问记录被记录或劫持)。
为了确保 DNS 不泄漏,建议开启 fake-ip 模式:
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 视频、千兆宽带用户),可以考虑以下调整:
- 开启 TCP 并发:
tcp-concurrent: true可以加快连接建立速度。 - 调整 MTU:如果在某些网络环境下出现"网页加载半截"或"连接被重置",尝试将
mtu降低至 1400 或 1350。 - 使用高级内核:确保使用基于最新 mihomo 内核的客户端,如 Clash V.CORE,其内核优化了 TUN 读写性能,大幅降低了用户态切换带来的延迟。
总的来说,TUN 模式是目前现代网络环境下实现真正透明代理的最优解。虽然它需要管理员权限且配置稍显复杂,但一旦部署成功,它所带来的"无感上网"体验是传统应用代理无法比拟的。
如果你正在寻找一个能完美驾驭 TUN 模式,同时又不希望手动去维护复杂的 YAML 配置文件的工具,那么 Clash V.CORE 绝对值得一试。它将这些复杂的底层技术封装在优雅的 UI 之后,让你一键开启全系统级的高性能透明代理。