为什么「系统代理通了」≠「Firefox 一定跟」

Mozilla Firefox(Gecko)与 Chromium 系最大的工程差异之一是:网络栈可调项更多暴露给 about:config,且自带的 DoH/TRR(Trusted Recursive Resolver)可以完全不使用操作系统解析器就能把查询发到公共 DoH——在你已经用 Clash 接管UDP/TCP 53 或劫持查询到内核的条件下,Firefox 仍可「另起炉灶」,于是你会看到:TCP CONNECT 已在代理日志里出现,但握手阶段拿到的 IP 或与站点所在地区不一致,以及「只有本站 HTML 进来了,CDN 子域名全红」的假性故障。

与此同时,Firefox 仍可读系统代理(由 Clash/V2Ray 等在 Windows/macOS/Linux 下发的 HTTP(S) 上游),但一旦曾经保存过手动代理端口、或使用过第三方「代理切换」脚本,network.proxy.httpnetwork.proxy.sslnetwork.proxy.share_proxy_settings 这一类键值会抢先于「系统默认值」起作用,体感就是Firefox 单机不服管——这不是 Clash 「没挂上系统」,而是Firefox 自己又画了一条线

第一层:关掉 DoH,让 DNS 回到系统链路

请优先走完这一层再给规则集或节点「背锅」。做法二选一即可完成其中一种,不必两道全上(除非你愿意做对照实验)。

图形界面(推荐先试)

打开「设置 → 隐私与安全 →基于 HTTPS 的 DNS」,将 DNS over HTTPS 选为关闭(措辞随版本小异,核心是不要使用 Mozilla / Cloudflare/下一跳公共解析自带的 TRR)。

about:config 逐项确认

地址栏输入 about:config,接受风险后检索下列键:

和 Clash 内置 DNS 的关系:Firefox 这层解决的是谁在解析主机名;当你在 Clash 里启用了 dns 段、Fake-IP 或 fallback 链式时,需要两边读同一套叙事。总览请参考 nameserver、fallback 与 fake-ip-filter; IPv6/双栈下若仍观察到「绕过代理的解析」,可交叉阅读 IPv6 双栈与直连规则专文

第二层:对齐 network.proxy 与「使用系统代理」

在完成 DoH 收敛后仍只有 Firefox 异常时,多半是代理模式偏好没有落在「操作系统」这一路。

打开「设置 → 常规 →网络设置」,勾选「使用系统代理设置」(新版本文案可能写作「沿用操作系统的代理」这类说法)。这是最接近「跟其他应用一样去问 Clash 写进去的 HTTP 上游」的配置。

若你在 about:config 里维护过高级项,可按下面自检(每次只改一侧:要么完全信任图形界面重置,要么在 about:config 里成组清理):

如果你在多台机器或 profile 间同步了 prefs.js,也容易出现「台式机正常、笔记本 Firefox 跑偏」的假差异——此时不如新建一个干净 Firefox profile只做系统代理勾选做 A/B。

第三层:门户探测与子资源异常

不少公共 Wi‑Fi、校园网或虚拟机桥接网络会触发捕获门户检测。Firefox 的 NC(Network Connectivity) 相关逻辑若判断「需要先登录门户」,会暂时改变对部分请求的放行策略——有时表现为只对明文 HTTP 探测放行,或对 HTTPS/SNI 混合错误,从而让你误以为「HTTPS 没过代理」,其实是链路被门户页劫持

about:config 中与诊断相关的键包括:network.connectivity-service.enablednetwork.captive-portal-service.enabled。在你确认自己已经用合法合规方式连接到受信任网络的前提下,可临时关掉门户检测插件做对照重启,再结合系统侧「是否被要求二次认证门户」一起看。

若症状是局域网地址、路由器面板、打印机在代理开启后打不开,这既可能是 Firefox不使用系统代理对白名单的实现细节,也可能与内核 Fake‑IP/绕过规则有关——后者见 Fake‑IP 与局域网绕过专文。 若 Clash退出后整网不可达,则更可能是操作系统代理残留

→ 对照 退出 Clash 后的系统代理与 TUN 清理

在 Clash 里验证 Gecko 的流量

建议按同一时间窗做两条对比:

  1. 仅开 Firefox新开隐私窗口访问目标站(可先禁用扩展,避免任何扩展再次改写代理)。
  2. 在 Clash 连接界面观察源进程或源标签(若内核/客户端暴露该字段)或远端 SNI/Host是否与浏览器地址栏一致。
  3. 若日志里没有出现对应 Host,却仍能在页面里加载部分内容,十有八九仍是DNS/DoH/旁路 QUIC或未进代理的websocket —— QUIC 相关问题在「纯 Gecko」里相对少见但并非零,可把现象与 TLS、超时报错一起读:timeout 与 TLS 专文

「页面测速站的出口 IP ≠ 你认为的节点出口」有时是浏览器侧 WebRTC、mDNS STUN等与代理无关的渠道;若你已关闭 DoH/对齐系统代理却仍看到泄漏感,请同步阅读WebRTC 与浏览器查验,避免把第二层 IP 视图误判成内核规则失效

当你在 macOS 上同时开过 TUN 与系统 HTTP 写入,若Firefox仍偶发走错接口,可把「Firefox 是否与系统共用同一网络服务顺序」也纳入备忘录,并按 macOS TUN 与代理冲突排查 做一次性排除。

合规与安全:请只在你被授权的网络环境中调试Firefox代理设置;不得在公共或组织禁止的场景下绕过策略。修改 about:config 前先备份 profile,或使用「Firefox Profile Manager」建新配置做对照,避免不可逆的手滑。

结语

FirefoxClash(系统代理模式)并不是天然冲突;真正卡住人的往往是三件小事:DoH/TRR 把 DNS 从系统链路偷走;手写 network.proxy 没回到「系统」这一路;门户检测与子资源异常让你误判成「内核规则错了」。逐项关掉变量、再在连接日志里求一个可被命名的 Host/规则名,比一上来改 YAML 更高效。

相比依赖扩展做二次分流的原生写法,Firefox 给了你更多「能看见的 prefs」——善用它,再配合 Clash 的透明可视性,就能把「半截直连」的问题缩小到一两天内可复述的实测步骤表

立即免费下载 Clash,开启流畅上网新体验:用单一系统代理链路跑通 Gecko,再在本文基础上扩展你自己的书签式排清单。