搜索 K
Appearance
如果你只想要结论,直接看这三条:
curl、git、npm、Docker、Steam、绝大多数网络游戏默认不读。这就是"系统代理只管浏览器"这句民间说法的真实来源。0.0.0.0/1 与 128.0.0.0/1(或等价策略路由),把默认出口整体搬走。所有走 IP 栈的进程都逃不掉,包括 UDP、包括游戏、包括命令行工具。代价是需要管理员权限、驱动(Windows 上是 wintun.dll)、以及一定的 CPU 开销。dev tap、部分二层组网与老式游戏加速器里还能见到。一句话选型:日常刷网页 → 系统代理;要跑命令行、Docker、游戏、BT → TUN;要二层桥接 → TAP。
要理解三者差异,得先看清楚"代理"这件事在网络栈里插在哪。
系统代理属于"应用层约定"。它压根没碰内核。Windows 写在注册表 HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings,由 WinINET / WinHTTP 读取;macOS 写进 SystemConfiguration,由 CFNetwork 读取;Linux 桌面由 gsettings(GNOME)或 kwriteconfig(KDE)管理,命令行生态则普遍约定 http_proxy / https_proxy / all_proxy 环境变量。这套机制没有任何强制力——应用可以选择不听。Firefox 默认就读自己的独立配置,curl 只认环境变量不认 macOS 的系统代理,Java 走 -Dhttp.proxyHost,Python requests 走 HTTP_PROXY。这就是为什么你开了系统代理,git clone 依然超时。
TUN 属于"网络层劫持"。用户态程序通过 /dev/net/tun(Linux/macOS)或 Wintun 驱动(Windows)拿到一块虚拟网卡的文件描述符,从里面读出来的是原始 IP 包。程序把它解析成五元组,交给 sing-box / Xray / mihomo 的规则引擎,决定是直连、走代理还是拒绝,然后再把回包写回网卡。因为改的是路由表,内核对应用完全透明——没有应用能察觉自己被接管了。这就是"虚拟网卡接管全部网络"的技术含义。
TAP 走的是二层。它搬的是以太网帧,带 MAC 头,因此能承载 ARP、DHCP、广播、非 IP 协议。功能更强,代价是必须实现完整的二层语义,性能开销更大、驱动签名更麻烦(Windows 上要装 TAP-Windows6),且容易被某些安全软件判定为异常网卡。除非你在做二层组网或复刻老式加速器架构,否则没有理由选它。
顺带说一句传输层。无论你选哪种接管方式,最终流量都要落到节点侧的 IEPL/IPLC 专线或公网中转上。节点侧的拥塞控制算法(BBRv3 相比 CUBIC 在高丢包链路上吞吐可提升 30%~200%)与 QoS 策略,才是决定你体感的上限。接管方式只是决定了"哪些流量能进管道",管道本身的质量由线路决定。
很多人以为 TUN 一定比系统代理慢,这是误解。准确说法是:TUN 的转发路径更长,但换来的是全协议覆盖;系统代理路径更短,但覆盖面残缺。
在 sing-box 里,TUN 还有 stack 参数可选:system 走内核 TCP/IP 栈,能复用 TSO/GSO/GRO 卸载,吞吐最高;gvisor 走用户态协议栈,兼容性最好、隔离性最强,但吞吐通常低 10%~25%;mixed 则是折中方案。实测在千兆环境下,system 栈跑满 900Mbps+ 是常态,gvisor 大约 700~800Mbps。
另一个高频坑是 DNS。TUN 模式下如果没配 hijack-dns 或 fake-ip,应用的 DNS 查询可能绕过规则直接发往本地 ISP 的解析器,导致两个后果:一是 CDN 调度失准、绕远路;二是 DNS 泄漏。正确做法是用 fake-ip 模式 + 远端解析,让域名在节点侧完成解析。
| 对比维度 | 系统代理 | TUN 模式 | TAP 模式 |
|---|---|---|---|
| 工作层次 | 应用层(配置约定) | 网络层 L3 | 数据链路层 L2 |
| 内核依赖 | 无 | /dev/net/tun / Wintun | TAP-Windows6 / tun/tap |
| 管理员权限 | 不需要 | 需要 | 需要 |
| TCP 覆盖 | 仅主动读取配置的应用 | 全系统 100% | 全系统 100% |
| UDP 支持 | 通常不支持 | 支持(含 QUIC/游戏) | 支持 |
| 命令行工具覆盖 | 需手动配环境变量 | 自动覆盖 | 自动覆盖 |
| 典型吞吐(千兆链路) | 取决于应用 | 900Mbps+(system 栈) | 600~800Mbps |
| CPU 开销 | 可忽略 | 中等(5%~15%) | 较高 |
| DNS 处理 | 依赖应用自身 | 可劫持,防泄漏 | 可劫持 |
| 与 VPN 共存 | 冲突少 | 需调整路由优先级 | 易冲突 |
| 适用场景 | 浏览器、流媒体 | 游戏、Docker、全场景 | 二层组网 |
| 2026 年主流度 | 高 | 极高 | 低(边缘保留) |
轻度网页用户:每天就是 Chrome 刷 YouTube、Reddit、查论文。系统代理足够,开销最低,切换最灵活。这类用户对"命令行软件走代理"没有刚需。
开发者:一旦你开始 npm install、git clone、docker pull、pip install、连远程 ssh,系统代理立刻暴露短板。TUN 模式一开,全部自动生效,不用再给每个工具单独 export https_proxy=...。这是 TUN 最不可替代的价值。
游戏玩家:游戏用 UDP,系统代理根本不支持。游戏 TUN 模式配置是硬需求。但要注意两点:一是必须确认你的客户端规则没有把游戏 UDP 走 REJECT;二是 TUN 的额外抖动(通常 1~5ms)对竞技类 FPS 有感知,建议游戏只走策略路由白名单而非全局。
流媒体党:系统代理通常够用,因为浏览器和主流客户端都读系统代理。但如果你用 Netflix 的 Windows 桌面 App,它走的是 UWP 沙箱,可能不继承桌面代理,这时 TUN 更省心。
移动端 / 路由器:Android 上大部分客户端用 VpnService(本质就是类 TUN 的 fd 接管),iOS 只能走 NEPacketTunnelProvider,两者都不存在"系统代理"这个选项。这也是为什么手机上的代理体验往往比 PC 上"更完整"。
Windows。客户端开启 TUN 时,务必确认 Wintun 驱动已正确安装(设备管理器里能看到 "Wintun Userspace Tunnel")。常见冲突源:Hyper-V 与 WSL2 会创建虚拟交换机,可能抢占路由优先级;解决办法是在客户端里把 TUN 网卡跃点数手动设为 1。另外 Windows 的 WinHTTP 代理与 WinINET 代理是两套,netsh winhttp set proxy 只影响系统服务,不影响浏览器,别搞混。
macOS。macOS 的 utun 设备是系统自带的,不需要额外驱动,相对省心。但要留意 macOS 15 之后对网络扩展的审批更严,授权后如果 TUN 不生效,去"系统设置 → 网络"里看是否多出一块网卡。scutil --proxy 可以打印当前系统代理状态,是排查的第一条命令。
Linux。内核需要 CONFIG_TUN=y 或加载 tun 模块(modprobe tun)。桌面环境里系统代理和 TUN 同时开会打架,建议二选一。命令行用户如果不想开 TUN,至少配好 ~/.bashrc 里的 export all_proxy=socks5h://127.0.0.1:7890——注意是 socks5h 而不是 socks5,多一个 h 表示 DNS 也交给代理解析,能规避大量 CDN 绕路问题。
Android / iOS。都是 VPN 框架接管,没有系统代理选项。Android 上注意"分应用代理"白名单,别把系统时钟、推送服务排除掉,否则通知会延迟。
通用避坑:① TUN 与某些杀毒软件的网络防护模块冲突,表现为规律性断流;② 同时开两个客户端的 TUN 会导致路由表混战,电脑直接断网,修复方法是 route delete 0.0.0.0 或重启网络栈;③ 开启 TUN 后如果 Ping 不通内网设备,检查是否把私有网段路由也劫持了,正确做法是给 192.168.0.0/16、10.0.0.0/8 加直连规则。
遇到"开了代理但某个软件不走"或"通了但很慢",按下面这套命令链路走一遍,基本能定位到层。
第一步:确认代理端口活着
ss -tunlp | grep 7890 # Linux 看监听
lsof -iTCP:7890 -sTCP:LISTEN # macOS 看监听
netstat -ano | findstr 7890 # Windows 看监听第二步:验证代理本身可用
curl -x http://127.0.0.1:7890 -I https://www.gstatic.com/generate_204
curl --socks5-hostname 127.0.0.1:7890 -s -o /dev/null -w "%{http_code} %{time_total}s\n" https://www.google.com返回 204 且 time_total 在 0.3s 以内,说明本地代理链路健康。若超时,问题在客户端或节点,不在接管方式。
第三步:确认路由是否真被接管
ip route show # Linux,找 tun0 与 0.0.0.0/1
netstat -rn # macOS
route print # WindowsTUN 生效时应当能看到 0.0.0.0/1 和 128.0.0.0/1 指向虚拟网卡。看不到就是没接管成功。
第四步:验证 DNS 是否泄漏
dig @127.0.0.1 example.com +short
nslookup example.com 127.0.0.1若返回真实 IP 且解析结果与节点侧预期不符,说明 fake-ip 或 DNS 劫持没生效。
第五步:逐跳定位链路质量
mtr -rwzc 100 1.1.1.1 # Linux/macOS,100 包统计
tracert -d 1.1.1.1 # Windows
tcping 1.1.1.1 443 # 第三方工具,看 TCP 握手延迟判定表:
| 现象 | 关键命令输出 | 结论与处置 |
|---|---|---|
浏览器能上,curl 超时 | env | grep -i proxy 为空 | 系统代理不覆盖命令行,改开 TUN 或设 all_proxy |
| TUN 开了但游戏延迟没变化 | netstat -rn 无非默认路由 | TUN 未真正接管,检查管理员权限/驱动 |
| 网页能开、视频卡顿 | mtr 显示第 3 跳起丢包 > 5% | 本地网络或入口节点问题,换节点 |
| DNS 解析到国内 IP | dig 返回非预期结果 | DNS 泄漏,启用 fake-ip + 远端解析 |
| 延迟正常但下载慢 | iperf3 -c 吞吐明显低于预期 | 节点带宽超售或拥塞控制未优化 |
| 只有某个 App 不走 | 客户端分流日志显示 direct | 规则误匹配,调整分流规则集 |
| 宣传话术 | 真实含义 | 识别方法 |
|---|---|---|
| "原生 IP,解锁全网流媒体" | 可能是 DNS 劫持伪解锁 | 用 dig 查解析结果,再看实际播放码率 |
| "无限流量不限速" | 大概率超售��晚高峰暴跌 | 高峰期用 iperf3 连测 3 次取均值 |
| "TUN 模式全平台支持" | 只有部分客户端实现了 TUN | 实测 netstat -rn 是否出现虚拟路由 |
| "0 倍率永久使用" | 通常是低优先级通道 | 看高峰期延迟抖动是否可接受 |
| "一线 IPLC 专线" | 可能只是入口一段用了专线 | 用 mtr 看全程跳数与中途 AS 号 |
| "支持 UDP 游戏加速" | 系统代理根本不支持 UDP | 必须开启 TUN,否则 UDP 直接绕过 |
核心判断逻辑只有一条:凡是不能用命令验证的宣传,都当作未证实。上面那套 mtr + iperf3 + dig 的组合,能拆穿 90% 的营销话术。
Q1:开了 TUN 之后网速反而变慢了怎么办? 先看吞吐而非延迟。如果 iperf3 结果比系统代理低 20% 以上,多半是 stack 用了 gvisor,切换到 system 栈通常能恢复。若仍慢,检查是不是启用了全局流量嗅探或复杂规则集。
Q2:TUN 和系统代理可以同时开吗? 技术上可以,但不推荐。两者同时生效时,读取系统代理的应用会走代理链,其余走 TUN,容易出现 DNS 双解析和规则冲突。建议二选一。
Q3:为什么我开了系统代理,Python 脚本还是连不上?requests 读的是 HTTP_PROXY / HTTPS_PROXY 环境变量,不读 Windows 注册表也不读 macOS 系统设置。要么手动 export,要么开 TUN。注意 socks5h 与 socks5 的区别。
Q4:手机上有"系统代理"吗? 没有。Android 客户端基于 VpnService,iOS 基于 NEPacketTunnelProvider,两者本质上都是 TUN 类接管。所以手机端的代理覆盖天然比 PC 更完整。
Q5:TUN 模式会不会影响局域网访问 NAS 或打印机? 默认会。解决方案是给私有网段加直连规则:192.168.0.0/16、10.0.0.0/8、172.16.0.0/12 全部走 direct。大部分成熟客户端已内置该规则,老客户端需要手动补。
Q6:为什么 TUN 需要管理员权限,而系统代理不需要? 因为创建虚拟网卡和修改路由表都属于内核级操作,操作系统默认不允许普通用户执行。系统代理只是写用户级配置,权限要求自然低。
Q7:TAP 还有使用的必要吗? 在标准代理场景下没有。只有需要二层桥接(例如把远程设备接入本地局域网、跑非 IP 协议)时才需要。现代客户端大多已移除 TAP 支持,遇到"必须用 TAP"的教程,先确认它是不是三年前的老文。
结语:TUN、TAP 与系统代理不是三代技术,而是三种解决不同问题的形态。系统代理胜在零成本、零权限、易切换;TUN 胜在覆盖全、协议全、自动化;TAP 只剩极窄的二层场景。真正决定体验的,从来不是你选了哪种接管方式,而是管道背后的线路质量与拥塞控制水平。接管方式决定"能不能进管道",线路决定"进去之后跑多快"。
标签:TUN模式 系统代理 虚拟网卡 命令行代理 游戏加速 网络排障 2026技术指南