Clash TUN 模式是什么?mihomo 的 tun 配置项、协议栈与常见问题
TUN 模式是 Clash 系内核接管流量的一种方式:内核在系统里创建一张虚拟网卡,再通过路由把流量导进这张网卡。和“系统代理”不同,它不依赖程序自己去读代理设置,所以命令行工具、游戏等不走系统代理的程序也会经过 Clash 的规则。
本文讲的是 mihomo 内核(原 Clash.Meta,Clash Verge Rev、Clash Meta for Android 等客户端用的都是它)配置文件里的 tun 部分。客户端界面上的开关最终也是改这些配置项。客户端里怎么开(比如 Clash Verge Rev 需要先装服务模式),见本站的 Clash Verge Rev 教程。
最小配置#
tun:
enable: true
stack: mips
auto-route: true
auto-detect-interface: true
dns-hijack:
- any:53
- tcp://any:53
enable:启用 TUN。stack:协议栈,见下一节。auto-route:自动设置全局路由,把流量导入 TUN 网卡。auto-detect-interface:自动选择流量的出口网卡。官方文档建议:如果设备同时连着多个出口网卡,最好手动指定。dns-hijack:把匹配到的 DNS 连接导入内核的 DNS 模块。不写协议时默认是 UDP,所以上面同时写了tcp://any:53。
mihomo 源码里的默认值是:enable 为 false,auto-route 和 auto-detect-interface 为 true,dns-hijack 为 0.0.0.0:53。也就是说只写 enable: true 也能工作,但把这几项显式写出来更容易排查。
四种协议栈怎么选#
stack 可选 system、gvisor、mixed、mips。官方文档对它们的说明是:
| 协议栈 | 官方说明 |
|---|---|
system |
使用系统协议栈,体验更稳定、全面,资源占用比其他协议栈低 |
gvisor |
在用户空间实现网络协议栈,安全性和隔离性更高,特定情况下网络处理性能更好 |
mixed |
TCP 用 system,UDP 用 gvisor,体验可能相对更好 |
mips |
mihomo 自研的 IP 协议栈 |
截至 2026 年 10 月的官方文档和源码,默认值是 mips,文档的建议是“如无使用问题,建议使用 mips 栈”。遇到某个协议栈不正常时,换一个试试是最直接的排查办法。
防火墙会挡住 system 和 mixed。 官方文档写明,开了防火墙就无法使用 system 和 mixed,需要放行内核:
- Windows:设置 → Windows 安全中心 → 允许应用通过防火墙 → 选中内核。
- macOS:一般不用配置;如果开防火墙后不能用,到“系统设置 → 网络 → 防火墙 → 选项”里添加 mihomo。
- Linux:一般不用配置;如果不能用,可以放行 TUN 网卡的出站流量,例如网卡名为 Mihomo 时执行
sudo iptables -A OUTPUT -o Mihomo -j ACCEPT。
DNS 劫持的限制#
TUN 模式下,规则要按域名分流,内核就得拿到程序发出的 DNS 请求,这就是 dns-hijack 的作用。官方文档列出了两个自动劫持不到的情况:
- macOS 和 Windows 上,发往局域网地址的 DNS 请求无法自动劫持。比如系统 DNS 设成了路由器
192.168.1.1,这部分请求不会被接管。 - Android 上如果开启了“私人 DNS”,就无法自动劫持 DNS 请求。
DNS 模块本身怎么配(fake-ip 还是 redir-host),见本站的 Clash DNS 配置。
其他常用配置项#
| 配置项 | 作用(据官方文档) |
|---|---|
strict-route |
启用 auto-route 时执行严格路由。Linux 上会把所有连接导入 TUN,防止地址泄漏,也能让 DNS 劫持在 Android 上生效;Windows 上会添加防火墙规则,防止多网卡 DNS 解析造成的 DNS 泄露。可能导致 VirtualBox 等程序在某些情况下不正常 |
route-exclude-address |
启用 auto-route 时排除指定网段,例如 192.168.0.0/16 |
device |
指定 TUN 网卡名称。macOS 只能用 utun 开头的名称 |
mtu |
最大传输单元,一般默认即可 |
auto-redirect |
仅 Linux,自动配置 iptables/nftables 重定向 TCP 连接,需要先开 auto-route |
include-package / exclude-package |
仅 Android,只让指定应用走 TUN,或排除指定应用 |
include-uid / exclude-uid |
仅 Linux,按用户 ID 选择要不要经过 TUN |
旧写法 inet4-route-address、inet6-route-address 等官方已标为“即将废弃”,新配置请用 route-address 和 route-exclude-address。
TUN 和系统代理要同时开吗#
两者是两种接管方式。系统代理只对读取系统代理设置的程序有效;TUN 通过路由接管所有流量。开了 TUN 以后,系统代理不是必需的。客户端里怎么组合,以所用客户端的文档为准。
常见问题
- Clash 的 TUN 模式是什么?
- 内核创建一张虚拟网卡,通过路由把系统流量导进来,所以不读系统代理设置的程序(命令行、游戏等)也会经过 Clash 的规则。
- TUN 的 stack 选哪个?
- 可选 system、gvisor、mixed、mips。截至 2026 年 10 月的官方文档和源码默认是 mips,文档建议没有问题就用 mips;某个协议栈不正常时换一个试试。
- 开了防火墙 TUN 不能用怎么办?
- 官方文档写明开防火墙时无法使用 system 和 mixed 协议栈。Windows 要在“允许应用通过防火墙”里选中内核,macOS 和 Linux 一般不用配置。