系统代理不生效怎么办?程序不走代理的排查

先说结论

系统代理只是一个“请各软件自觉照办”的公共设置,不读取它的程序不会走代理。先确认开关和端口,再判断问题程序是否读取系统设置;终端和命令行工具要单独设环境变量,都不奏效再改用 TUN 模式。

你遇到的现象

浏览器能走代理,其他软件不走;或者代理开关自己被关。

打开客户端、系统代理的开关也亮着,浏览器一切正常,可是换到聊天软件、下载器或者终端,却完全像没开代理一样。遇到这种“系统代理不生效”的情形,先别急着怀疑节点,因为问题多数出在“谁在读这个设置”上,而不是节点能不能通。

先看清系统代理到底是什么

系统代理是写在操作系统里的一条公共记录,内容大致是“请把网页请求交给本机某个地址和端口”。客户端开启它,只是把这条记录改了;真正要不要照办,由每个程序自己决定。

这就解释了为什么会出现下面这些分化:

程序类型 是否通常读取系统代理 说明
主流浏览器 通常读取 少数浏览器可单独指定代理,会盖过系统设置
带自有网络模块的客户端软件 不一定 聊天、游戏平台、下载器常自带联网逻辑
命令行工具 多数不读 更常读环境变量,或有自己的配置项
游戏联机、语音等 通常不走 这类流量往往不是网页请求那一种

所以“程序不走代理”不一定是故障,很可能只是这个程序本来就不看系统设置;换句话说,系统代理不生效有时是程序的习惯,不是客户端出了错。想先弄清系统代理和 TUN 的分工,读 Clash 系统代理是什么 会更有底。

第一步:确认开关、端口和客户端是否真的在运行

很多“不生效”其实是代理压根没跑起来。按顺序核对:

  1. 在客户端里确认内核处于运行状态,没有红色报错提示。
  2. 记下客户端的本地代理端口,再打开系统的代理设置页,看里面的地址和端口是否与它一致。
  3. 端口对不上,说明有别的软件改过这项设置,或者你改过端口却没同步。
  4. 系统里的代理开关本身如果是灰色、点不动,多半是被组策略或管理软件锁定,换到下一节再看。

端口方面的问题单独成篇,见 端口被占用怎么办。

系统代理设置不了或被锁定怎么办

“系统代理设置不了”大致有三种情形:

  • 开关点不动:电脑受公司或学校统一管理,这类设置由管理员控制,个人无法绕开,换设备或联系管理员。
  • 点了又自己弹回:客户端写入后,另一个程序又把它改回去,常见于同时装了好几款代理、加速或安全类软件。先只留一个。
  • 客户端提示写入失败:多是权限问题,或系统服务组件异常。可以尝试以管理员身份重启客户端,再观察。

另一种反方向的情形是“系统代理被关闭”:你明明开着,过一会儿它自己没了。除了上面说的被其他软件还原,还要留意客户端在退出时会主动把设置还原,如果它被反复重启,就会看到开关来回闪。

浏览器能走、其他程序不走:三条出路

确认客户端正常、端口一致,浏览器也能用,剩下的就是“有些程序不读系统设置”。有三条出路,按改动从小到大排:

  1. 在这个程序里单独填代理。 不少软件的设置里有网络或代理项,把地址和端口按客户端的本地代理填进去,通常选 HTTP 或 SOCKS5,以客户端实际监听的类型为准。
  2. 给终端设环境变量。 命令行工具常读 HTTP_PROXY、HTTPS_PROXY、ALL_PROXY,把它们指向本地代理端口即可,写在当前窗口里只对该窗口有效。git 等工具另有自己的代理配置项,以各自文档为准。
  3. 改用 TUN 模式。 它在虚拟网卡层接管流量,不依赖程序是否配合,但需要权限,也可能与别的网络软件冲突,详见 Clash TUN 模式是什么。

容易被忽略的几个细节

  • Windows 的商店应用:这类应用有网络隔离机制,访问本机回环地址上的代理时可能受限,需要在系统里对该应用做回环放行,具体操作以微软文档为准。
  • PAC 或自动配置脚本:系统里若启用了“使用设置脚本”,它会盖过手动填写的地址,出现“明明填了却不走”。
  • 浏览器扩展:有些扩展会接管浏览器的代理设置,让系统设置在浏览器里失效,是反向的“系统代理不生效”。
  • 客户端异常退出后的残留:设置还指着已无人监听的端口,表现为所有网站都打不开,到系统代理页手动关闭即可。

怎么确认设置真的生效了

别凭感觉,用对照的办法验证:

要验证的 做法 判断
系统层 打开系统代理设置页,核对地址、端口与开关 与客户端一致说明写入成功
浏览器 访问 IP 与 DNS 检测导航 里的检测页 出口信息变化说明走了代理
问题程序 关掉代理再试一次,对比结果 无变化说明它没走代理
终端 在同一窗口用命令行工具访问检测页 与浏览器结果一致即生效

对照时每次只改一项,改完就复测,这样才能知道是哪一步起作用。

下一步怎么做

先别急着换节点:系统代理不生效的原因绝大多数在本机,几分钟就能分出是设置、端口还是程序习惯的问题。

如果只是个别软件不走代理,优先用“在软件里单独填代理”;终端里的工具用环境变量;多个程序都不读设置,再考虑 TUN 模式。TUN 开不起来的情形在 TUN 模式开启失败怎么办 里有专门排查。整条链路都查过仍不通,就回到 梯子连不上怎么办 按现象重新分层,或者先用 词典里的系统代理词条 补一下概念。

这篇没有覆盖的

  • 本文不涉及具体软件的内部实现,哪个程序是否读取系统代理,要以它自己的文档或实际抓包结果为准。
  • 企业电脑的组策略、统一管理的代理脚本由管理员控制,个人无法在本文范围内修改。
  • 没有任何线路的速度或延迟数据,这里只讨论代理有没有被用上,不讨论用上以后快不快。

系统代理不生效常见问题

浏览器能上网,为什么聊天软件和游戏平台不走代理?

系统代理本质是写在系统里的一条公共设置,由各个程序自己决定要不要读取。浏览器通常会读,而不少聊天软件、游戏平台、下载器带有自己的网络模块,不读也不报错。这类程序要么在软件里单独填代理,要么改用 TUN 模式从网卡层接管流量。

系统代理开关刚打开就又自己关了,是怎么回事?

常见原因有三种:另一个代理或加速类软件抢着改了同一项设置;客户端启动时发现端口被占用,没能真正跑起来;安全软件把代理设置当作可疑改动还原了。先关掉其他网络类软件,再看客户端日志里有没有端口或内核报错。

系统代理已经打开,终端里的命令还是连不上,需要怎么做?

命令行工具多数不读系统代理,而是读 HTTP_PROXY、HTTPS_PROXY、ALL_PROXY 这类环境变量,有些工具如 git 还有自己的代理配置项。把变量指向客户端的本地代理端口即可,写在当前终端会话里只对这个窗口有效,退出就失效。

客户端退出或崩溃之后,所有网站都打不开了,怎么恢复?

这是系统代理设置残留:客户端异常退出时没来得及把它还原,系统仍指向一个已经没有程序监听的本地端口。到系统的代理设置里手动关闭代理开关,或重新打开客户端再正常退出一次,即可恢复。

系统代理和 TUN 模式只能二选一吗?

不必二选一。系统代理适合只想让浏览器等常见软件走代理的场景,改动小、出问题好查;TUN 模式覆盖面更广,但需要权限,也更容易和其他网络软件冲突。可以平时用系统代理,遇到不读设置的程序再临时切换到 TUN。

接着读

文中出现的术语

接下来去哪儿?

找官方入口去网址导航,想核对仓库和版本看GitHub 项目导航;需要现成的机场,机场目录收了 28 家的价格与线路资料,性价比机场、便宜机场、VPN 机场分别有专项页。