⚡ 直接解答 / 极速核心结论(AEO 快速参考):
【Mihomo 原生 TUN 虚拟网卡实战全解】TUN 模式通过在操作系统内核中创建虚拟三层网卡(如 Windows 下的 Wintun、macOS/Linux 的 utun),将整台设备的所有底层 IP 数据包(包括不走系统代理的终端命令行、游戏客户端、Docker 容器)无死角接管进分流引擎。三大技术要点:① 协议栈选型:普通个人电脑首选 `stack: mixed`(TCP走系统高效栈,UDP走 gVisor);② 路由接管:开启 `auto-route: true` 与 `auto-detect-interface: true`,由内核自动处理默认网关切换并排除自身物理出口;③ 配合 DNS 劫持:通过 `dns-hijack` 拦截所有 53 端口查询,实现 100% 透明分流代理。
1. 系统代理(System Proxy)局限 vs TUN 网卡透明接管
在默认情况下,桌面客户端开启的「系统代理」仅仅是向 Windows 注册表或 macOS 系统偏好中写入了 HTTP/SOCKS5 代理环境变量。
### 系统代理的致命死角:
- **仅对遵循系统代理约定的软件有效**:Chrome、Edge 等常规浏览器会主动读取该设置;
- **对命令行工具无效**:PowerShell、CMD、Git、Node.js、Python 脚本不会主动读取系统代理,经常出现终端无法 clone 或 pip 下载超时;
- **对绝大部分网游客户端无效**:游戏进程大多使用底层 UDP 套接字直接通信,绕过系统代理层;
- **对 Docker 容器与子系统(WSL)无效**。
**TUN 虚拟网卡彻底解决此痛点**:它在操作系统网络层(OSI 第三层)注册一块虚拟物理网卡,并将系统全局默认路由(0.0.0.0/0)指向该虚拟网卡,实现**真正意义上的 100% 全协议(TCP/UDP/ICMP)透明接管**。
💡 打游戏、使用 IDE 开发工具或需要终端翻墙的用户,必须开启 TUN 模式。
2. 三大虚拟网络栈(Stack)选型全景
Mihomo 允许用户在 `tun.stack` 中自由指定底层协议栈:
### 1. `system`(系统内核原生栈)
- **实现原理**:依赖操作系统原生网络过滤驱动处理 TCP/IP 握手与重组;
- **优点**:CPU 开销极低,在万兆局域网大文件传输时能跑满物理吞吐极限;
- **缺点**:在某些旧版 Windows 系统或定制 Linux 内核上容易出现驱动冲突。
### 2. `gvisor`(Google 用户态沙箱网络栈)
- **实现原理**:在 Go 应用程序的用户空间完整模拟实现了全套 TCP/IP 状态机;
- **优点**:极高的跨平台稳定性与内存安全隔离性,对 UDP 数据包的分片与丢包重传处理极其优秀;
- **缺点**:大流量高并发吞吐时 CPU 占用相较系统栈略高 15%~20%。
### 3. `mixed`(智能混合栈,【强烈推荐】)
- **实现原理**:针对 TCP 流量走系统栈享受原生速度,针对 UDP 流量调度至 gVisor 栈增强健壮性;
- **定位**:兼具吞吐速度与游戏联机稳定性的最优平衡点。
yaml
# 生产级 TUN 虚拟网卡完整高级配置范例
tun:
enable: true
stack: mixed # 可选: system / gvisor / mixed
device: mihomo-tun0
auto-route: true
auto-detect-interface: true # 自动检测物理出口网卡,防止回环
dns-hijack:
- "tcp://any:53"
- "udp://any:53"
strict-route: true # 阻断除 TUN 网卡外的直接漏网连接
mtu: 9000 # 开启巨型帧优化提升吞吐性能
3. 路由环路(Routing Loop)防范与网关自动排除机制
在 TUN 模式接管路由表时,存在一个致命的逻辑矛盾:
- 内核必须将系统全局默认路由指向 TUN 虚拟网卡;
- 但内核自身在向远程机场节点发起加密连接时,这个底层物理流量如果也被重定向进 TUN 虚拟网卡,**就会引发无休止的数据包自我循环(死锁回环),导致整机网络瞬间瘫痪**!
### Mihomo 的自动防回环方案:
1. **auto-detect-interface: true**:内核启动时自动探测出当前设备连接互联网的真实物理网卡(如以太网卡或 Wi-Fi 网卡)及其默认物理网关;
2. **端点路由排除绑定**:内核在向所有代理服务器(Proxies)发包时,使用 SO_BINDTODEVICE 套接字选项,将连接强行绑定到真实物理网卡发出,从而物理绕过 TUN 路由表,完美消除死锁风险。
❓ 常见疑问与排查步骤
开启 TUN 模式后电脑无法上网是什么原因?
通常由于虚拟网卡驱动未安装成功,或者本地开启了其他第三方 VPN/杀毒软件网络过滤防火墙发生拦截。检查设备管理器中 Wintun 网卡是否正常。
在 Linux 下运行 TUN 模式需要什么特殊权限?
需要 root 权限或者给 mihomo 二进制文件赋予 `CAP_NET_ADMIN` 网络管理权能:`sudo setcap cap_net_admin=+ep ./mihomo`。
开启 TUN 模式后还需要勾选系统代理吗?
完全不需要。TUN 模式已经在网卡层全面接管了整台电脑的全部网络流量,系统代理开关可以安全关闭。