核心速览:何时必须开启 TUN 模式?
在使用各类代理工具时,你一定会遇到这个灵魂拷问:
“我的客户端右下角显示代理已经打开,Chrome 也能秒开 Google,为什么我在终端里执行
git clone还是超时?为什么 Steam 游戏还是连不上海外服务器?”
这一现象背后的核心根源,正是**系统代理(System Proxy)与TUN 模式(Virtual Network Device)**在操作系统底层网络栈中的管辖权差异。
【系统代理方式】 (君子协定)
应用发起请求 ──> 是否主动读取注册表/环境变量?
├─ 是 (Chrome, Edge, Firefox) ──> 发给本地 7890 端口代理 ──> 成功
└─ 否 (CMD, Git, 游戏, Docker, UWP) ──> 直接走物理网卡 ──> 超时撞墙!
【TUN 模式方式】 (强制法律)
应用发起请求 ──(任何程序、任何协议)──> 操作系统三层 IP 协议栈
│
▼ (强制重定向路由)
【Wintun 虚拟网卡】
│
▼
[Mihomo/sing-box 内核分流]
├─ 国内流量 ──> 本地物理网卡 (直连)
└─ 海外流量 ──> 加密隧道 ──> 代理节点
一、系统代理(System Proxy)的底层局限
Windows 的系统代理本质上只是一项系统全局配置建议(储存在注册表 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings 中的 ProxyServer 项)。
1. 软件遵循度的“君子协定”
- 自律型应用:现代 Web 浏览器、Slack、Telegram 会在启动时主动读取此注册表项,并通过本地 SOCKS5 或 HTTP 端口转发连接。
- 特立独行型应用:
- 开发命令行:
cmd.exe、powershell.exe、git、pip、npm、docker默认只读取环境变量(如HTTP_PROXY),根本不看 Windows 注册表。 - 网络游戏与实时通信:绝大多数多人联机游戏采用高并发裸 UDP 协议,完全不走 HTTP/SOCKS 代理层。
- Windows UWP 应用:受 Windows 应用沙箱安全机制限制,默认被系统禁止向
127.0.0.1本地回环地址发起网络连接(Loopback Isolation)。
- 开发命令行:
二、TUN 虚拟网卡:现代接管机制与 Wintun 演进
TUN(Network TUNnel)工作在 OSI 模型的网络层(Layer 3),处理的是原始 IP 数据包。
1. 虚拟驱动的代际演进
- 第一代:TAP-Windows:由 OpenVPN 社区早期开发,模拟的是数据链路层(以太网二层)。由于存在频繁的二层报文解包开销与硬件中断,在高带宽下载时 CPU 占用极高,往往成为千兆宽带的瓶颈。
- 现代代:Wintun 驱动:由 WireGuard 项目团队针对 Windows 平台重构的高性能 Layer 3 虚拟网卡驱动。它精简了所有不必要的协议层转换,采用环形缓冲区(Ring Buffer)实现极高吞吐,单核跑满千兆带宽时 CPU 占用不足 5%。
2. 路由表接管与防环路机制(Anti-Looping)
开启 TUN 模式时,代理内核必须完成两项危险的操作:
- 接管默认网关:在系统路由表中添加一条指向 TUN 网卡的优先级更高的默认路由(如
0.0.0.0/1和128.0.0.0/1)。 - 防死循环规则(关键技术点):
代理客户端自身也需要连接到位于境外的中继服务器(例如连接到
120.x.x.x:443)。 如果这个出站连接也被送进 TUN 网卡,就会引发灾难性的路由环路(Packet Loop)! 现代客户端通过以下机制防范环路:- SO_MARK / Socket 标记:在 Linux 下为代理进程发出的套接字打上特定 FWMark,绕过 TUN 路由表。
- 静态直连路由:在 Windows 下自动向真实物理网卡网关添加一条针对代理服务器真实 IP 的高优先级静态主机路由。
三、实战:Clash Verge Rev 中开启 TUN 模式的标准规范
在 Clash Verge Rev 中配置 TUN 模式,推荐按以下标准化步骤进行:
步骤 1:安装核心服务模式(Service Mode)
由于安装虚拟网卡与修改系统内核路由表需要操作系统管理员权限:
- 打开 Clash Verge Rev,进入 设置 (Settings)。
- 找到 服务模式 (Service Mode),点击右侧的 安装 (Install) 图标。
- 在弹出的 UAC 管理员权限提示中点击“是”。安装完成后,服务模式指示灯会变为绿色激活状态。
步骤 2:开启 TUN 模式开关
- 在设置面板中,找到 TUN 模式 (Tun Mode)。
- 将开关切换为 开启 (ON)。
- 此时打开 Windows 设备管理器,在“网络适配器”中能看到一块名为
Wintun Userspace Tunnel的虚拟网卡已正常工作。
步骤 3:验证终端命令行是否被接管
打开全新的 PowerShell 终端,无需配置任何环境变量,直接运行:
# 测试终端是否已被虚拟网卡接管并走代理出口
curl.exe https://api.myip.com
如果输出的 IP 已经变成了你的海外代理节点 IP,证明全局 TUN 模式已成功接管全系统!
四、常见冲突与排错急救
1. 冲突排查:VMware / VirtualBox / WSL2 导致虚拟网卡冲突
- 现象:开启 TUN 后,WSL2 无法拉取镜像,或 VMware 虚拟机断网。
- 解决:在 Clash Verge Rev 的 TUN 高级配置中,启用
strict-route: true并将 WSL2 虚拟网段(如172.16.0.0/12)加入interface-name豁免列表。
2. 端口 7890 冲突导致内核崩溃
- 排查:TUN 模式虽然在网卡层工作,但内核内部仍需绑定一个本地回环端口进行 DNS 与流量解析。如果端口被其他软件占用,TUN 网卡将无法接收数据。
- 解决:在设置中将“混合端口”修改为非标准端口(如
7895)。
相关技术专题与配置指南
本专题关键技术问答.
[ 01 ]为什么开启了系统代理,CMD、Git 命令行和部分网游依然无法连通?[ + ]
系统代理(System Proxy)本质上只是在操作系统注册表中记录了一个「建议使用的代理服务器地址」。只有主动读取并尊重该注册表项的软件(如 Edge、Chrome 浏览器)才会自觉转发数据;而绝大多数命令行工具(curl、git、ssh)、后台运行库(npm、pip、docker)以及基于私有 UDP 协议的在线游戏,默认完全无视系统代理,直接向本地物理网卡发包。
[ 02 ]开启 TUN 模式为什么能做到真正「全局无死角接管」?[ + ]
TUN 模式会在操作系统内核中安装一块虚拟网络适配器(在 Windows 下通常是高性能的 Wintun 驱动)。代理软件通过修改系统全局路由表,将默认路由的跃点数(Metric)调高,使本机所有发出的三层 IP 数据包(无论来自哪个软件、走什么协议)必须先无条件经过该虚拟网卡,从而实现 100% 强制接管与分流。
[ 03 ]开启 TUN 模式后出现整个电脑无法上网,最常见的原因是什么?[ + ]
最常见的原因是「路由环路(Routing Loop)」或权限不足。代理节点出站连接自身也是一个网络包,如果 TUN 规则没有正确排除代理服务器自身的物理出口 IP,就会导致数据在虚拟网卡和物理网卡之间无限死循环,直到系统网络崩溃。使用现代客户端开启 auto-route 与 strict-route 可彻底防范此问题。