1. 三者协同工作层级的直接结论
DNS 负责“查地址”,应用代理负责“局部指路”,而系统代理与 TUN 虚拟网卡负责“全局交警调度”。三者处于网络协议栈的不同生命周期:当你在浏览器输入网址时,系统必须先通过 DNS 获取服务器 IP,随后根据系统代理或虚拟网卡规则,决定该连接是走本地直连、还是打包交给代理核心转发至 SSOne 远端节点。
如果 DNS 被污染得到错误 IP,或者系统代理端口设置错误导致中间人失联,网络通信都会在不同阶段瞬间中断。因此明确三者的边界,是排查一切复杂网络故障的底层逻辑。
2. DNS 解析流程与本地污染防御机制
DNS 污染是指当本地设备发出未经加密的 UDP 53 端口查询时,中间网络节点抢先应答虚假的解析结果,引导客户端连接不可达的目标 IP。
现代代理架构主要通过两种手段规避 DNS 污染:
- 远端代理 DNS:客户端将域名本身打包到代理协议载荷中,直接发送给 SSOne 节点服务器,由远端在目标本地完成干净的解析,彻底避免本地流量泄露。
- Fake-IP 机制:客户端在本地收到 DNS 请求后,不发起真实查询,而是直接从保留私网网段(如
198.18.0.0/16)派发一个虚拟 IP,并在本地维护映射字典。待 TCP 连接发起时,客户端截获该虚拟 IP 并根据字典还原真实域名由节点发出。此方式消除了网络往返首包延迟。
3. 系统代理与应用内独立代理的边界
很多开发者经常遇到“浏览器能科学浏览,但 Git 命令行或终端 curl 报错连不上”的现象。其根本原因在于:系统代理只是一项系统级广播建议,绝非内核级强制劫持。
Windows 和 macOS 设置中的“代理开关”,仅供遵循操作系统的通用库(如 IE 选项、Chrome、Edge、Safari 等)主动读取。而大量的命令行工具(Git、Pip、Docker、Node.js、SSH)均出于工程独立性,默认完全忽略系统代理设置。
$env:http_proxy="http://127.0.0.1:7890",在 macOS/Linux 终端中执行 export http_proxy=http://127.0.0.1:7890。更彻底的方案是开启客户端的 TUN 全局网卡模式。
4. TUN 虚拟网卡对全流量的接管原理
TUN 虚拟网卡模式(Tun Mode)运行于操作系统第 3 层(网络层)。它在操作系统中注册一张虚拟以太网卡,并将系统所有出站流量路由默认网关重定向到这张虚拟网卡。
无论是浏览器、游戏客户端、后台守护进程还是命令行终端,任何不需要特别配置代理的程序,其数据包都会被 TUN 驱动透明捕获并移送给代理核心处理。这也是跨平台排查排障的首选模式。详细系统要求可参阅 设备与路由器兼容清单。
5. 代理技术实现与应用场景比对表
| 接管模式 | 工作层级 | 接管范围与兼容性 | 优缺点分析 | 典型排障方案 |
|---|---|---|---|---|
| 系统 HTTP/SOCKS 代理 | 第 7 层 (应用层) | 常规浏览器及遵从系统 API 的软件 | 极轻量,但非标准软件及命令行常忽略,易遗留注册表残留。 | 若异常断网,需在系统设置手动关闭“代理服务器”。 |
| TUN 虚拟网卡模式 | 第 3 层 (网络层) | 全局所有 TCP/UDP 流量 (包括终端与游戏) | 穿透力强,但需要系统底层驱动与管理员权限支持。 | 需检查 Wintun 驱动状态,详见 网络中断排查。 |
| 浏览器插件单独代理 | 单个应用沙盒 | 仅限该浏览器标签页,完全不影响系统其他软件 | 安全性极高,不改动系统配置;但无法支持外部客户端与后台服务。 | 检查插件内代理端口与客户端监听端口是否一致。 |
6. 常见问答 (FAQ)
这是因为关机或崩溃时客户端未能正常调用系统 API 清除系统代理开关。请在 Windows 打开“设置” > “网络和 Internet” > “代理”,将“使用代理服务器”关闭,即可立即恢复上网。
在客户端中,建议采用“规则分流”。国内域名由国内公共 DNS(如 223.5.5.5 或 119.29.29.29)解析以获得最佳本地 CDN 速度;国外域名直接交由代理核心的远端 DNS 解析,避免跨国 DNS 污染。