系统代理不生效怎么办?程序不走代理的排查
系统代理只是一个“请各软件自觉照办”的公共设置,不读取它的程序不会走代理。先确认开关和端口,再判断问题程序是否读取系统设置;终端和命令行工具要单独设环境变量,都不奏效再改用 TUN 模式。
你遇到的现象
浏览器能走代理,其他软件不走;或者代理开关自己被关。
打开客户端、系统代理的开关也亮着,浏览器一切正常,可是换到聊天软件、下载器或者终端,却完全像没开代理一样。遇到这种“系统代理不生效”的情形,先别急着怀疑节点,因为问题多数出在“谁在读这个设置”上,而不是节点能不能通。
先看清系统代理到底是什么
系统代理是写在操作系统里的一条公共记录,内容大致是“请把网页请求交给本机某个地址和端口”。客户端开启它,只是把这条记录改了;真正要不要照办,由每个程序自己决定。
这就解释了为什么会出现下面这些分化:
| 程序类型 | 是否通常读取系统代理 | 说明 |
|---|---|---|
| 主流浏览器 | 通常读取 | 少数浏览器可单独指定代理,会盖过系统设置 |
| 带自有网络模块的客户端软件 | 不一定 | 聊天、游戏平台、下载器常自带联网逻辑 |
| 命令行工具 | 多数不读 | 更常读环境变量,或有自己的配置项 |
| 游戏联机、语音等 | 通常不走 | 这类流量往往不是网页请求那一种 |
所以“程序不走代理”不一定是故障,很可能只是这个程序本来就不看系统设置;换句话说,系统代理不生效有时是程序的习惯,不是客户端出了错。想先弄清系统代理和 TUN 的分工,读 Clash 系统代理是什么 会更有底。
第一步:确认开关、端口和客户端是否真的在运行
很多“不生效”其实是代理压根没跑起来。按顺序核对:
- 在客户端里确认内核处于运行状态,没有红色报错提示。
- 记下客户端的本地代理端口,再打开系统的代理设置页,看里面的地址和端口是否与它一致。
- 端口对不上,说明有别的软件改过这项设置,或者你改过端口却没同步。
- 系统里的代理开关本身如果是灰色、点不动,多半是被组策略或管理软件锁定,换到下一节再看。
端口方面的问题单独成篇,见 端口被占用怎么办。
系统代理设置不了或被锁定怎么办
“系统代理设置不了”大致有三种情形:
- 开关点不动:电脑受公司或学校统一管理,这类设置由管理员控制,个人无法绕开,换设备或联系管理员。
- 点了又自己弹回:客户端写入后,另一个程序又把它改回去,常见于同时装了好几款代理、加速或安全类软件。先只留一个。
- 客户端提示写入失败:多是权限问题,或系统服务组件异常。可以尝试以管理员身份重启客户端,再观察。
另一种反方向的情形是“系统代理被关闭”:你明明开着,过一会儿它自己没了。除了上面说的被其他软件还原,还要留意客户端在退出时会主动把设置还原,如果它被反复重启,就会看到开关来回闪。
浏览器能走、其他程序不走:三条出路
确认客户端正常、端口一致,浏览器也能用,剩下的就是“有些程序不读系统设置”。有三条出路,按改动从小到大排:
- 在这个程序里单独填代理。 不少软件的设置里有网络或代理项,把地址和端口按客户端的本地代理填进去,通常选 HTTP 或 SOCKS5,以客户端实际监听的类型为准。
- 给终端设环境变量。 命令行工具常读 HTTP_PROXY、HTTPS_PROXY、ALL_PROXY,把它们指向本地代理端口即可,写在当前窗口里只对该窗口有效。git 等工具另有自己的代理配置项,以各自文档为准。
- 改用 TUN 模式。 它在虚拟网卡层接管流量,不依赖程序是否配合,但需要权限,也可能与别的网络软件冲突,详见 Clash TUN 模式是什么。
容易被忽略的几个细节
- Windows 的商店应用:这类应用有网络隔离机制,访问本机回环地址上的代理时可能受限,需要在系统里对该应用做回环放行,具体操作以微软文档为准。
- PAC 或自动配置脚本:系统里若启用了“使用设置脚本”,它会盖过手动填写的地址,出现“明明填了却不走”。
- 浏览器扩展:有些扩展会接管浏览器的代理设置,让系统设置在浏览器里失效,是反向的“系统代理不生效”。
- 客户端异常退出后的残留:设置还指着已无人监听的端口,表现为所有网站都打不开,到系统代理页手动关闭即可。
怎么确认设置真的生效了
别凭感觉,用对照的办法验证:
| 要验证的 | 做法 | 判断 |
|---|---|---|
| 系统层 | 打开系统代理设置页,核对地址、端口与开关 | 与客户端一致说明写入成功 |
| 浏览器 | 访问 IP 与 DNS 检测导航 里的检测页 | 出口信息变化说明走了代理 |
| 问题程序 | 关掉代理再试一次,对比结果 | 无变化说明它没走代理 |
| 终端 | 在同一窗口用命令行工具访问检测页 | 与浏览器结果一致即生效 |
对照时每次只改一项,改完就复测,这样才能知道是哪一步起作用。
下一步怎么做
先别急着换节点:系统代理不生效的原因绝大多数在本机,几分钟就能分出是设置、端口还是程序习惯的问题。
如果只是个别软件不走代理,优先用“在软件里单独填代理”;终端里的工具用环境变量;多个程序都不读设置,再考虑 TUN 模式。TUN 开不起来的情形在 TUN 模式开启失败怎么办 里有专门排查。整条链路都查过仍不通,就回到 梯子连不上怎么办 按现象重新分层,或者先用 词典里的系统代理词条 补一下概念。
这篇没有覆盖的
- 本文不涉及具体软件的内部实现,哪个程序是否读取系统代理,要以它自己的文档或实际抓包结果为准。
- 企业电脑的组策略、统一管理的代理脚本由管理员控制,个人无法在本文范围内修改。
- 没有任何线路的速度或延迟数据,这里只讨论代理有没有被用上,不讨论用上以后快不快。
系统代理不生效常见问题
浏览器能上网,为什么聊天软件和游戏平台不走代理?
系统代理本质是写在系统里的一条公共设置,由各个程序自己决定要不要读取。浏览器通常会读,而不少聊天软件、游戏平台、下载器带有自己的网络模块,不读也不报错。这类程序要么在软件里单独填代理,要么改用 TUN 模式从网卡层接管流量。
系统代理开关刚打开就又自己关了,是怎么回事?
常见原因有三种:另一个代理或加速类软件抢着改了同一项设置;客户端启动时发现端口被占用,没能真正跑起来;安全软件把代理设置当作可疑改动还原了。先关掉其他网络类软件,再看客户端日志里有没有端口或内核报错。
系统代理已经打开,终端里的命令还是连不上,需要怎么做?
命令行工具多数不读系统代理,而是读 HTTP_PROXY、HTTPS_PROXY、ALL_PROXY 这类环境变量,有些工具如 git 还有自己的代理配置项。把变量指向客户端的本地代理端口即可,写在当前终端会话里只对这个窗口有效,退出就失效。
客户端退出或崩溃之后,所有网站都打不开了,怎么恢复?
这是系统代理设置残留:客户端异常退出时没来得及把它还原,系统仍指向一个已经没有程序监听的本地端口。到系统的代理设置里手动关闭代理开关,或重新打开客户端再正常退出一次,即可恢复。
系统代理和 TUN 模式只能二选一吗?
不必二选一。系统代理适合只想让浏览器等常见软件走代理的场景,改动小、出问题好查;TUN 模式覆盖面更广,但需要权限,也更容易和其他网络软件冲突。可以平时用系统代理,遇到不读设置的程序再临时切换到 TUN。
接着读
- 教程 · Clash 系统代理是什么?和 TUN 模式的区别与选择
- 教程 · Clash TUN 模式是什么?开启方法、权限与常见问题
- 排查 · TUN 模式开启失败怎么办?权限与冲突排查
- 排查 · 端口被占用怎么办?客户端提示端口冲突的处理
- 排查 · 梯子连不上怎么办?按现象分步排查
- 术语 · 系统代理是什么意思