系统代理是什么意思?
一句话结论
系统代理是写在操作系统网络配置里的一个代理地址与端口,各个应用读到之后自行决定是否把请求交给代理软件。
客户端开启“系统代理”,本质是改了系统的代理设置。浏览器等多数软件会遵守,但命令行、游戏、部分桌面程序不一定,这也是“开了没反应”的常见原因。
打开代理客户端,界面上总有一个“系统代理”开关。它容易被当作“开了就全局科学上网”,其实它做的事情要朴素得多。
它是什么
操作系统提供一个公共登记处,里面可以填写“代理服务器地址与端口”,常见的有 HTTP 代理和 SOCKS 代理两种写法。客户端启动后会在本机监听一个端口,打开系统代理,就是把这个地址端口写进系统登记处。
之后,凡是愿意读取这份登记的程序,会自觉把请求发给这个本机端口,由客户端转给节点。注意关键词是“愿意”:这是一种约定,系统并不会强制所有程序服从。
谁会遵守,谁不会
| 类型 | 通常表现 |
|---|---|
| 主流浏览器 | 一般读取系统设置,可能另有自己的代理选项 |
| 命令行工具 | 常需要手动设置环境变量,不一定读系统设置 |
| 自带网络栈的桌面程序 | 有的无视系统代理 |
| 游戏与部分更新程序 | 多半不走系统代理 |
| 非 TCP 流量(UDP 等) | 系统代理主要面向 HTTP/SOCKS,覆盖有限 |
所以有人开着系统代理,浏览器能上,某个应用却连不上,这并不矛盾。想让更多流量被接管,需要看TUN 模式,它工作在更底层,两者的取舍可以读Clash 系统代理与 TUN 的区别。
常见误解
“开关打开就一定生效。” 开关只是改设置。客户端异常退出时,设置有可能残留,表现为关了客户端后整台电脑都上不了网。
“有了系统代理,DNS 也被代理了。” 不一定。域名解析走哪里取决于具体实现,解析可能泄露在本地网络,参见 DNS 泄露。
“系统代理和分流是一回事。” 不是。系统代理决定流量进不进客户端,分流决定进来之后走哪条出口。
怎么确认状态
- 打开系统自带的网络设置,找到代理一栏,看地址端口是否与客户端显示的一致。
- 关闭客户端后再看一次,确认设置已被还原;没有还原就手动关闭开关。
- 换用另一个应用测试,区分是应用不遵守,还是节点本身有问题。
- 对照系统代理无效排查按症状逐项检查。
下一步
确认是开关层面的问题,读系统代理无效怎么办;想了解更彻底的接管方式,读 TUN 模式。