搜索 K
Appearance
适用路径:
docs/help/faq/connect-fail/fix-switchyomega-conflict-with-system-proxy.md最后更新:2026-01 · 适用于 Chromium 120+ / Firefox 121+ / Windows 11 24H2 / macOS 15
如果你现在的状态是「客户端开着、节点是绿的、但 Chrome 就是打不开网页,还弹 ERR_PROXY_CONNECTION_FAILED」,那 90% 的概率不是机场的问题,而是浏览器扩展层和系统代理层在抢同一个控制权。
三句话结论:
ERR_PROXY_CONNECTION_FAILED 是「连不上代理端口」,ERR_TUNNEL_CONNECTION_FAILED 是「连上了但被拒绝」,ERR_CONNECTION_RESET 是「中途被切断」。三者根因完全不同,用错了排查方向会白折腾两小时。要看懂这场「打架」,得先搞清楚浏览器到底听谁的话。
第一层:操作系统代理(System Proxy / WinINET / CFNetwork)。 Windows 上,系统代理最终落到注册表 HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings 下的 ProxyEnable / ProxyServer / AutoConfigURL 三个键值;macOS 上则由 SystemConfiguration 框架托管,可以用 scutil --proxy 读出。这一层的特点是:它是全局的,任何尊重系统设置的软件都会读它。Clash、sing-box、v2rayN 这类客户端的「系统代理」开关,改的就是这里。
第二层:PAC 脚本(Proxy Auto-Config)。 PAC 本质上是一段 JavaScript,浏览器每次请求 URL 前会调用 FindProxyForURL(url, host),返回值形如 PROXY 127.0.0.1:7890; DIRECT。它的优势是分流逻辑写死在脚本里,劣势是调试极其痛苦——脚本报错时浏览器只会静默回退,你根本看不到异常。很多「国内能开、国外打不开」的诡异现象,源头就是一段写错分支的 PAC。
第三层:浏览器扩展代理 API。 Chromium 系提供 chrome.proxy API,Firefox 提供 browser.proxy API。SwitchyOmega 就是这一类。关键点在于:扩展设置的是「按 Profile 生效的浏览器级别代理」,它的优先级高于系统代理,并且在扩展启用的那一刻就会覆盖掉系统设置。
这就是冲突的物理根源:客户端的「系统代理」写入第一层,SwitchyOmega 写入第三层,第三层覆盖第一层。你以为它们是串联(系统代理 → 插件分流 → 出网),实际上它们是并联抢方向盘。
举个最常见的翻车现场:客户端监听 127.0.0.1:7890,SwitchyOmega 情景模式里也填了 127.0.0.1:7890,看起来一致对吧?但如果你后来在客户端里把 HTTP 端口改成 7897、或者把入站协议从 HTTP 换成 SOCKS5,插件里那个陈旧的 7890 就成了一个没有任何进程监听的死端口。浏览器把每个请求都发给它,系统 5 秒内返回 RST,于是满屏 ERR_PROXY_CONNECTION_FAILED。
按现场复现率排序,冲突基本逃不出这四类:
形态 A:插件情景模式指向死端口。 症状是全部网站打不开,报错稳定为 ERR_PROXY_CONNECTION_FAILED。判定特征:curl --noproxy 直连正常,带 -x 走代理也正常,但浏览器就是不行——因为浏览器走的端口和 curl 走的不一样。
形态 B:插件设为「直接连接」,把系统代理架空。 症状是国内网站飞快,境外网站转圈到超时。很多用户在这个阶段会误判为「机场跑路了」,其实只是插件把 Chrome 的流量整体标记成了 DIRECT,压根没进代理。
形态 C:插件 + 客户端 TUN 模式双接管,形成回环。 TUN 模式在网络层劫持了全部 IP 包,此时浏览器再去连 127.0.0.1:7890,这个连接本身又会被 TUN 抓走,某些配置下会形成代理链回环,表现为首包极慢、大文件下载卡死在 0%、TLS 握手反复重试。
形态 D:多个扩展抢权。 SwitchyOmega + 另一个「网络加速」类插件 + 企业 VPN 扩展同时存在。Chromium 只认最后写入 chrome.proxy 的那个,具体是哪个取决于加载顺序,于是表现为开了关、关了开,行为随机。
症状矩阵速查:
| 现象 | 高概率形态 | 30 秒验证动作 |
|---|---|---|
全部站点 ERR_PROXY_CONNECTION_FAILED | A | 客户端改端口后没同步插件 |
| 国内秒开、境外超时 | B | 看插件图标是否显示「直接连接」 |
| 大文件卡 0%、握手反复 | C | 关闭 TUN 或关闭插件,二选一 |
| 行为随机、刷新就好 | D | 禁用其余代理类扩展 |
| 只有 Firefox 异常 | Firefox 独立代理栈 | 检查 about:preferences 网络设置 |
下表把四种主流接管方式拉到同一维度对比,直接决定你该选哪条路。
| 量化指标 | SwitchyOmega-系统代理 | SwitchyOmega-情景模式 | 客户端系统代理(全局) | 客户端 TUN 模式 |
|---|---|---|---|---|
| 生效范围 | 单浏览器 Profile | 单浏览器 Profile | 全系统尊重系统代理的应用 | 全系统(含 UDP) |
| 生效层级 | 应用层(chrome.proxy) | 应用层(chrome.proxy) | 应用层(WinINET / CFNetwork) | 网络层(虚拟网卡) |
| UDP / QUIC 支持 | 继承下层 | 不支持 | 不支持 | 完整支持 |
| DNS 解析归属 | 由下层决定 | 由插件指定或系统 | 由客户端 fake-ip / 直连决定 | 客户端全接管 |
| 与系统代理冲突 | 低(本质是透传) | 极高(直接覆盖) | 与插件互斥 | 与系统代理互斥 |
| 端口/协议依赖 | 无 | 强依赖,易失配 | 强依赖 | 无 |
| 切换响应 | 无感 | < 100ms | 1–3 秒 | 3–8 秒重建网卡 |
| 多浏览器隔离 | 不隔离 | 不隔离 | 不隔离 | 不隔离 |
| 典型故障码 | 继承下层 | ERR_PROXY_CONNECTION_FAILED | 同上 | 回环超时 / 无报错卡顿 |
| 排障难度 | ★☆☆☆☆ | ★★★★☆ | ★★☆☆☆ | ★★★☆☆ |
这张表的结论非常明确:
场景一:纯网页轻用户(Chrome / Edge 主用,无游戏需求) 结论:不装 SwitchyOmega。客户端开系统代理,浏览器扩展区保持干净。这一类用户 80% 的断网投诉,卸载插件后当场恢复。相关阅读:/scenario/。
场景二:开发 / 运维(需要精准控制哪些流量走代理) 结论:SwitchyOmega 情景模式 + 客户端关闭系统代理,只保留混合端口监听。情景模式里把 localhost、127.0.0.1、*.internal、RFC1918 网段全部加入忽略列表——否则 localhost:3000 之类的本地调试会被送进代理解析,日志里会出现大量无谓的 DNS 查询。
场景三:多浏览器并行(Chrome 工作、Firefox 个人) 结论:两套方案必须指向同一个端口,且都不使用「系统代理」模式以免互相覆盖。Firefox 有独立于系统的代理栈,about:preferences 里的手动代理配置优先级极高,是最容易被忽略的一环。
场景四:跨境直播 / 大文件传输 / 视频会议 结论:TUN 模式才是正解,同时确保 QUIC 不被阻断。此时任何浏览器扩展代理都是负收益,全部清退。链路侧建议选 IEPL 专线类产品,公网中转在晚高峰的丢包抖动足以毁掉音视频质量,可参考 /reviews/ 的实测数据。
7890)。chrome://extensions,禁用或卸载 SwitchyOmega。HTTP,服务器 127.0.0.1,端口 7890;然后关闭客户端的系统代理开关。chrome://net-internals/#proxy 可以查看当前生效的代理配置来源,会明确标注是 SYSTEM 还是 EXTENSION——这是最快的确权手段。深度避坑:Windows 上部分安全软件、抓包工具(Fiddler / Charles)也会写系统代理。如果你装了这些,退出时它们未必会清理注册表,结果是系统代理被永久钉死在一个不存在的端口上。用 netsh winhttp reset proxy 无法清理 WinINET 层,必须手动改注册表或用系统设置的「手动代理」开关关掉。
scutil --proxy 一眼看清系统当前接管状态。networksetup -setwebproxystate Wi-Fi off 与 networksetup -setsocksfirewallproxystate Wi-Fi off 强制清空。Firefox 的代理栈独立,about:config 中 network.proxy.type 的取值需要记牢:0 = 直连,1 = 手动,2 = PAC,4 = 自动检测,5 = 使用系统代理。推荐直接设为 5,让 Firefox 跟随系统,避免和客户端的系统代理打架。
移动端没有浏览器扩展这一层,冲突多来自「VPN 应用 + 代理应用」双开。Android 同一时刻只允许一个 VpnService 生效,后启动的会顶掉前者但界面仍显示已连接——这是最典型的假连接。iOS 同理,设置 → 通用 → VPN 与设��管理 里若出现两个配置描述文件,务必删掉不用的那个。
这一节是全文最值钱的部分,请直接复制执行。
第一步:确认端口到底有没有人在听。
# Windows
netstat -ano | findstr ":7890"
# macOS / Linux
lsof -nP -iTCP:7890 -sTCP:LISTEN
ss -ltnp | grep 7890没有输出 = 没有进程监听 = 插件填的是死端口。这就是形态 A 的铁证。
第二步:确认代理本身能不能出网(绕过浏览器)。
# 走代理
curl -v -x http://127.0.0.1:7890 https://www.gstatic.com/generate_204 --max-time 8
# 不走代理
curl -v --noproxy '*' https://www.gstatic.com/generate_204 --max-time 8判断逻辑:走代理 OK + 不走代理失败,说明代理链路健康,问题在浏览器层(插件冲突);两个都失败,说明是本机网络或客户端故障;走代理失败 + 网络层正常,说明节点侧有问题。想看更细的时间分解,把 curl 换成 curl -w "@-" -o /dev/null -s 的自定义格式,分别观察 time_connect(TCP 握手)与 time_appconnect(TLS 握手)。
第三步:确认系统代理状态。
# Windows
netsh winhttp show proxy
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v AutoConfigURL
# macOS
scutil --proxy
networksetup -getwebproxy Wi-Fi如果 AutoConfigURL 还留着一个你早就忘了的 PAC 地址,那基本可以收网了。
第四步:TCP 层连通性。
tcping -n 5 127.0.0.1 7890tcping 能区分「端口没开」和「端口开了但不响应」,比 ping(ICMP 常被禁)靠谱得多。
第五步:端到端路径质量。
mtr -rwzc 20 1.1.1.1关注三项:丢包率、第 3 跳之后的抖动、最后一跳延迟。如果国内段就出现持续丢包,那是本地 ISP 出口问题;如果跨境段出现周期性 30%+ 丢包,大概率是公网中转线路在晚高峰被 QoS 限速——这种情况下再怎么调插件也是徒劳,该换的是线路,参见 /tech/ 里对 IEPL 与中转线路的机理分析。
错误码判定表:
| 报错码 | 语义 | 根因定位 | 处置动作 |
|---|---|---|---|
ERR_PROXY_CONNECTION_FAILED | 连不上代理端口 | 端口无人监听 / 插件端口陈旧 | 查 netstat,对齐端口 |
ERR_TUNNEL_CONNECTION_FAILED | TCP 通了,CONNECT 被拒 | 节点失效 / 认证失败 / 协议错配 | 换节点,核对 HTTP 与 SOCKS5 |
ERR_CONNECTION_RESET | 握手后遭遇 RST | 节点被阻断 / SNI 触发 QoS | 换端口、开 TLS Reality |
ERR_NAME_NOT_RESOLVED | 域名未解析 | DNS 泄漏 / 插件 DNS 指向失效 | 检查 fake-ip 与 DoH 配置 |
ERR_CONNECTION_TIMED_OUT | 超时无响应 | 回环 / 节点不可达 | 排查 TUN 与系统代理互斥 |
ERR_EMPTY_RESPONSE | 有连接无数据 | 上游返回空 / 中间件拦截 | 对比 curl 输出定位 |
排障之外,你还得能识别那些把故障甩锅给你的服务商。以下矩阵按常见度排序:
| 宣传话术 | 真相 | 验证方法 |
|---|---|---|
| 「100% 原生 IP 全解锁」 | 多为 DNS 层面伪解锁,播放 5 分钟后降码率 | 连续播放一小时,看是否触发地区校验 |
| 「CN2 GIA 全程直连」 | 实测可能是普通 BGP 中转,晚高峰延迟翻倍 | mtr 看跨境跳数与时延稳定性 |
| 「无限流量不限速」 | 通常存在隐藏的日流量阈值 | 连续跑满 20GB,观察次日限速 |
| 「超低价年付 9.9」 | 资金盘概率极高,用新用户钱付旧用户带宽 | 查运营时长、支付通道是否频繁更换 |
| 「TLS 1.3 军用级加密」 | 加密强度不是瓶颈,线路质量才是 | 关注延迟与丢包,而非加密套件 |
跑路预警信号(出现两项以上建议立刻减少预付):客服响应从小时级退化到天级;支付方式突然从正规通道改为个人收款码;上线大规模「终身套餐」「买二送三」;官网域名到期时间临近且未续费;TG 群被设为禁言。
资金维权应急:优先用可争议的支付方式(信用卡、PayPal),保留订阅页截图、支付流水号、客服对话记录。多数跑路发生在大型促销后的 15–45 天窗口内,尽量选择月付或季付,把风险敞口控制在单次付款额度内。
Q1:我已经把 SwitchyOmega 禁用了,还是打不开网页? 禁用不等于解除接管。部分版本在下线时会保留最后一次写入的代理配置。进入 chrome://settings/system 确认「打开您计算机的代理设置」未被勾选且系统代理已关闭,或直接删除该扩展后重启浏览器。
Q2:curl 走代理是通的,为什么浏览器不行? 说明代理链路健康,问题在浏览器层。检查 chrome://net-internals/#proxy,看当前是 SYSTEM 还是 EXTENSION 在生效。九成情况是扩展在覆盖。
Q3:Edge 能开、Chrome 不能开,两者不是同一内核吗? 内核相同,但扩展清单和 Profile 数据独立。很可能只有 Chrome 里装了 SwitchyOmega,或者 Edge 的配置早已被清理过。
Q4:切到 TUN 模式后,网页反而更卡了? 典型的双接管回环。TUN 已接管网络层,此时插件再指向 127.0.0.1 会形成环路。解决办法:TUN 模式下必须禁用全部浏览器代理扩展。
Q5:PAC 模式和情景模式我该选哪个? 普通用户选情景模式,可视化、可回滚。只有需要按域名做复杂正则分流、且团队统一分发时才考虑 PAC——但请务必记住 PAC 出错时浏览器不会报错,只会静默直连。
Q6:卸载插件后系统代理被改乱了怎么恢复? Windows 用 netsh winhttp reset proxy 清 WinHTTP 层,再手动关闭系统设置里的代理开关;macOS 用 networksetup -setwebproxystate Wi-Fi off 与 -setsocksfirewallproxystate Wi-Fi off 双清。清理后重启浏览器。
Q7:怎么从根上避免这类冲突? 建立一条铁律:同一时刻只允许一层接管代理。系统代理、TUN、浏览器扩展开关,三者中永远保持恰好一个为开。把它写进你的设备交接文档里。