上周帮一个朋友远程排查网络问题,他一开始特别笃定地说客户端已经显示连接成功,网速看着也没问题,可打开一个测 IP 的网站,页面弹出来的还是本地运营商分配的那个地址,连城市信息都没变过。这种客户端明明连上了、页面却像没开代理一样的情况,我自己也遇到过好几次,后来发现根子几乎都不在代理软件本身,而是链路中间有个环节压根没被接管到。这篇把当时一步步排查、最后定位到问题出在哪个环节的过程记录下来。

整体的排查顺序我画成了一张流程图,大致是按由外到内的顺序一层层排除,后面几段分别展开说每一步具体怎么查。

系统代理不生效排查流程图
系统代理不生效排查流程图

先搞清楚「系统代理」这四个字到底代理了什么

很多人打开代理客户端,看到状态变成已连接,就默认全局都生效了。但不少客户端默认给你打开的其实只是「系统代理」这一种模式:Windows下对应的是网络和Internet设置里的代理开关,本质是把一个代理服务器地址写进了系统的网络配置;macOS则是在网络设置的代理选项卡里做类似的事。这项设置只对愿意主动读取并遵守它的程序有效——浏览器和大部分桌面软件走的是系统自带的网络库,通常会读取这份配置;但命令行工具、部分游戏、后台常驻服务,甚至一些自己实现网络请求逻辑的App,根本不会检查这一项,依旧按原线路直连出去。搞清楚这层区别,才能理解为什么客户端显示已连接和某个具体软件到底有没有走代理,其实是两件不完全相关的事。

先用最笨的办法圈定范围

在细查每个环节之前,我一般会先做个简单对比:用系统自带的浏览器测一次测IP页面,再打开命令行单独测一次同一个地址,把两次结果记下来。如果两边结果不一样,说明问题大概率出在应用层,也就是某个具体程序没读系统代理;如果两边结果一样、都没生效,那就要往更底层去查,比如代理客户端本身的工作模式。

浏览器很可能压根没理会系统代理

最容易被忽略的一点是,主流浏览器基本都有自己独立的一套网络设置,不一定跟系统代理保持同步。以Firefox为例,它的网络设置里默认选的确实是「使用系统代理设置」,但很多人为了配合某个代理软件用SOCKS5协议,或者照着某篇教程操作过,把这一项手动改成了「手动配置代理」,直接填了一个本地端口。后来如果换了代理软件、端口变了,或者干脆切回了系统代理模式,Firefox里那个手动配置却没人记得回去改,于是它就一直连着一个过时甚至失效的地址,跟系统代理这边开不开、怎么开完全没关系。Chrome、Edge这类Chromium内核的浏览器默认会读取系统代理,但如果装过代理切换类的扩展,同样可能被扩展接管了优先级,盖过系统那一层设置。

逐个浏览器点检查

  • Firefox:地址栏输入 about:preferences#general,拉到最下面的网络设置,确认选中的是「使用系统代理设置」,而不是手动配置或不使用代理
  • Chrome/Edge:地址栏输入 chrome://settings/system 或 edge://settings/system,点开电脑的代理设置,确认跳转出来的就是系统这一套,没有被扩展插了一脚
  • 把所有代理相关的浏览器扩展先禁用掉,换一个干净的无痕窗口重新测一次,排除扩展干扰这一个变量

协议没被整体接管:HTTP和HTTPS是两回事

配置系统代理的时候,不少人只在HTTP那一栏填了地址,HTTPS那一栏留了空,或者用脚本往系统里写代理配置时漏掉了某个协议字段。现在绝大多数网站默认走的是HTTPS,如果这部分没被接管,浏览器实际连接的还是原线路;反而少数还留着HTTP入口的老网站,或者内部测试页面,测出来是走了代理的,于是就出现了部分网站正常、部分异常这种让人摸不着头脑的现象。SOCKS代理也是类似的道理,如果软件只处理了HTTP和HTTPS,却没配置SOCKS,某些走SOCKS连接的程序照样会绕开代理直连出去。

分别测两种协议

建议准备一个支持HTTP、一个支持HTTPS的测速或测IP页面各测一遍,对比两边返回的地址是否一致。如果只有其中一种协议显示走了代理、另一种还是原IP,基本就能确认是协议接管不全,回头去系统代理的高级设置里把每个协议字段都单独填一遍就能解决。

代理客户端到底是「系统代理模式」还是「TUN全局模式」

这是最容易被忽略、但影响面也最大的一层。市面上的代理客户端基本都提供两种工作方式:一种就是前面说的系统代理模式,只是替你改了系统那几个代理开关,本质上依赖每个程序愿不愿意主动读取;另一种是TUN模式,也叫全局模式或者虚拟网卡模式,客户端会在系统里建一张虚拟网卡,在网络层把这台设备绝大多数流量直接接管,不用管应用层认不认这个代理设置。以我自己在用的通博VPN为例,客户端设置里就有单独的模式选项,系统代理和TUN是两个开关,平时图方便一直开着系统代理模式,结果一些不读取系统代理设置的软件全都被漏掉了,切到TUN模式之后才算是真正兔住了底。包括通博VPN在内,现在不少客户端都把这个模式开关放在了主界面显眼的位置,而不是藏在二级设置里,也是为了减少这种设置了却没生效的情况。TUN模式因为要建虚拟网卡,一般需要管理员权限,占用的资源也比系统代理模式稍高,但如果前面几步都查过依然没解决,基本就该换成这个模式了。

把这四个环节整理成一张表,方便下次直接对照着查:

可能原因排查方法解决方向
浏览器有独立网络设置,没跟系统代理走打开浏览器自带的网络设置,确认选的是跟随系统还是手动配置或不使用代理改回跟随系统代理,或者单独给浏览器配一份准确的手动代理
某些App有自己的直连白名单或独立网络逻辑换一个域名单独测,或者用命令行工具单独测同一个地址去软件自身设置里找有没有绕过列表,把误加的条目移出
系统代理只接管了HTTP,没接管HTTPS,或者反过来分别打开支持HTTP和支持HTTPS的测速页面对比结果系统代理的高级设置里把每个协议字段都单独填一遍
代理客户端是系统代理模式,不是TUN全局模式去客户端设置里确认当前用的模式,看看有没有虚拟网卡在运行切换成TUN或全局模式,或者给单个软件配置走代理的进程规则

回头看这次排查,前后花了差不多二十分钟,但如果一开始就按浏览器设置、协议接管、代理模式这个顺序过一遍,大概五分钟就能锁定问题出在哪。系统代理这四个字听着简单,背后其实叠着好几层各自独立的开关,任何一层没对上,表现出来都是同一句话:客户端显示连上了,页面却还是老样子。下次再碰到类似情况,不妨先别急着重装或者反复重启,把这几个环节按顺序过一遍,应该能省掉不少来回折腾的时间。