TUN 虚拟网卡与系统代理:接管位置不同,能管的东西也不同
最后更新: 2026-08-21 | 适用: Windows / macOS / Linux
「我明明开了代理,为什么这个程序还是直连?」——这是本站遇到最多的问题之一, 答案几乎总是同一个:你开的是系统代理,而那个程序不理会系统代理。
一、两者接管的位置不同
| 系统代理 | TUN 模式 | |
|---|---|---|
| 接管位置 | 应用层(程序主动读取代理设置) | 网络层(虚拟网卡接管路由) |
| 覆盖范围 | 只覆盖愿意遵守的程序 | 几乎全部流量,含 UDP 与 ICMP |
| 权限要求 | 普通用户权限 | 管理员 / 系统授权 |
| 出问题时 | 关掉即恢复 | 异常退出可能残留路由,需手动清理 |
关键区别在于:系统代理是一项「建议」,程序可以不读它。 操作系统提供一个代理设置项,遵守与否取决于程序自己。而 TUN 创建的是一块虚拟网卡, 流量在离开本机之前就被接管,程序无从绕过。
二、哪些程序常常绕过系统代理
- 命令行工具——很多只读
http_proxy之类的环境变量,不读系统设置。 - 游戏客户端——大量使用 UDP,而系统代理通常只处理 TCP。
- 带自有网络栈的应用——部分桌面客户端自行管理连接,不查询系统配置。
判断方法很直接:开着系统代理时该程序连不上或走了本地线路,切到 TUN 后正常,就是这个原因。
三、怎么选
日常浏览器为主 → 系统代理够用。 它权限要求低、异常时影响面小,出问题关掉就恢复。
需要覆盖游戏、命令行或 UDP 流量 → 用 TUN。 代价是更高的权限要求,以及客户端异常退出时可能留下路由残留—— 表现为客户端已关但网络仍不正常,需要手动清理虚拟网卡或重启网络服务。
四、开了 TUN 之后仍要配规则分流
TUN 解决的是「谁被接管」,不解决「接管之后走哪条线」。 它默认把流量交给客户端,客户端再按规则判断走代理还是直连。 所以 TUN 不等于全局代理——规则模式下国内域名照样直连。
如果开了 TUN 之后国内网站也变慢了,检查的是分流规则,不是 TUN 本身。
常见问题
为什么有些程序不走系统代理?
系统代理是一项「建议」,程序可以选择不读它。命令行工具、游戏客户端、部分带自有网络栈的应用都常常绕过。TUN 模式在更底层接管,不依赖程序配合。
TUN 模式需要管理员权限吗?
需要。创建虚拟网卡属于系统级操作,Windows 上通常还要安装网卡驱动,macOS 与 Linux 需要授权。这是它比系统代理覆盖更广的代价。
两个一起开会冲突吗?
多数客户端允许同时开启,流量会先被 TUN 接管。但排查问题时建议一次只开一个,否则很难判断某条流量究竟走了哪条路径。
本文依据各客户端公开文档与操作系统网络文档整理,不含实测数据。 具体权限要求与驱动依赖以你所用客户端的官方说明为准。