K-阿拉斯托
首页项目归档照片墙音乐灵境说说杂谈友链关于
封面

我和 GPT 折腾半天的网络问题,被 Codex 半小时解决了

2026-10-14 23:30:00
心情:释然
# Codex# FlClash# Windows# TLS# WebSocket# 网络排障

原本只是想让 AI 帮我写点代码,结果一个晚上都在帮 AI 修网络。更离谱的是,最后把问题修好的,还是 Codex 自己。

事情发生在 2026 年 10 月 14 日。

那天我遇到一个很烦人的问题:Codex 动不动就重连,偶尔干脆罢工。 明明 FlClash 开着,其他国外网站也能访问,偏偏 ChatGPT 和 Codex 不太听话。

我找 GPT 一起排查。我们从 VPN 线路聊到校园网,从代理规则折腾到 Windows 沙盒,甚至一度觉得问题已经摸到系统底层了。后来我让 Codex CLI 自己检查一下。她花了大约半小时,把真正影响主链路的地方找了出来,还写了一份事故复盘。

这篇不是标准答案式的教程。我想把怎么走弯路、怎么推翻猜测、最后又是怎么验证修复都记下来,给未来可能再踩坑的自己留个底。

先说明一点:严格说,Codex 背后也是 GPT 模型。这里说的「GPT」是网页里的聊天助手,Codex 是命令行里能自己动手的 agent——同一条血脉,两种用法。所以这次真正比的不是两个模型谁更强,而是「只动嘴」和「能动手」的差别。

01 / 一切从校园网开始

最开始,我怀疑 VPN 不稳定。

我的环境大概是这样:

项目 当时的情况
系统 Windows 11
网络 校园网;手机热点用于对照测试
代理客户端 FlClash,规则模式,监听 127.0.0.1:7890
Codex CLI 0.162.1
Codex Desktop 26.1007.9446.0
FlClash TUN 未开启

最奇怪的现象是:同一台电脑、同一个代理节点,连手机热点能用,连校园网就出问题。

更奇怪的是,校园网下开着代理,X 等网站都能打开。也就是说,既不是校园网彻底断网,也不能简单说“代理节点死了”。

我们先做了一个非常朴素的测试:把 FlClash 从规则模式切到全局模式。

结果,ChatGPT 网页立刻恢复了,Codex 的响应似乎也顺畅了不少。

这一刻我差点以为破案了。


02 / 第一次修好:原来网页分流没配全

接着我们把 FlClash 升级,并检查了规则覆写。

当时的表现很有代表性:在规则模式下,ChatGPT 页面可以打开,自己发出去的消息也看得见,但 GPT 的回复显示“无法加载此回复”;一切回全局模式,回复又正常了。

这提醒我们:一个网页能打开,不代表它依赖的所有请求都走通了。

于是,我们把 OpenAI 相关域名补进了 DOMAIN-SUFFIX 分流规则,让它们走选定的代理组,而不是错误地直连。排查时涉及的域名包括:

chatgpt.com
openai.com
oaistatic.com
oaiusercontent.com
oaistatsig.com

这一步之后,ChatGPT 网页在 FlClash 规则模式下也能正常显示回复了。

这里有个小坑:当时订阅本身带有名为“ChatGPT”的策略组,但新增规则实际指向的是“节点选择”。策略组叫什么,与某条规则实际把流量送到哪里,是两回事。 排障时要看生效的规则和实际出站,而不能只看组名。


网页修好了,我本来以为 Codex 也会一起恢复。

可惜,事情并没有这么简单。

03 / 越查越深:TLS、Schannel,还有一个 Bad access

Codex 的网络诊断依然可能报 TLS 握手或证书校验失败;WebSocket 也曾经超时,只能退回 HTTPS 连接。

为了弄清楚代理究竟有没有工作,我们从普通 PowerShell 测了这条命令:

curl.exe -I -v --max-time 20 --proxy http://127.0.0.1:7890 https://chatgpt.com/

有一次测试里,FlClash 正常接收了 CONNECT,TLS 也成功建立,最后返回 HTTP 403,并带有 Cf-Mitigated: challenge。

这个 403 不等于 TLS 失败。 它至少说明请求已经走过代理和 TLS,到了服务端的安全验证环节。对于命令行 curl,收到 Cloudflare 挑战并不奇怪。

但另外一些测试又出现了 Windows Schannel 错误:

SEC_E_NO_CREDENTIALS (0x8009030e)

随后我们在 Codex 沙盒里测试同一个本地代理地址,却得到:

connect to 127.0.0.1 port 7890 ... failed: Bad access
curl: (7) Failed to connect

于是,我们一度把注意力全放在 Windows 沙盒的网络限制上,还测试过另一个沙盒实现 MXC。它能正常启动,但那轮独立测试同样无法访问本机代理端口。

现在回头看,这些测试并没有白做,但我们犯了一个重要的判断错误:

沙盒里运行的 curl 连不上 127.0.0.1,不等于 Codex 主进程访问模型服务也必然失败。

这两条网络路径不能混为一谈。我们看见一个真实错误,却太快把它当成了整场事故的根因。

04 / 转折:让 Codex 自己查自己

折腾到这里,我干脆让 Codex CLI 自己检查网络。

结果,她没继续追着沙盒跑,而是先把直连、代理、TLS 实现、证书信任和进程环境变量拆开,一项项做对照。

她的初始诊断里有几行非常关键:

proxy env vars: none
respect system proxy: disabled
network.provider_reachability: fail
network.websocket_reachability: warning
invalid peer certificate: UnknownIssuer

这意味着:Windows 系统代理虽然已经指向 FlClash,Codex 的某些进程却未必会自动继承它;即使连上了代理,Codex 使用的 TLS 证书信任路径也可能不认当前证书链。

她又用 Python 的 OpenSSL 路径做对照测试。结果,经过相同的 FlClash 代理,访问 chatgpt.com 和 example.com 时,TLS 1.3 连接与证书校验均可成功。

这个对照很重要:它说明不能简单把锅甩给代理节点或校园网。至少在这些测试条件下,代理链路是可以正常建立 TLS 连接的;故障更集中在 Codex 的代理继承与 CA 信任方式。

说真的,看到这里,我和 GPT 之前围着 Bad access 抓耳挠腮的画面,突然就有点好笑了。

05 / 真正的修复:代理变量 + Windows CA 证书包

最后的修复并没有像我一开始担心的那样,关闭防火墙、禁用 TLS 校验,或把 Windows 沙盒直接拆掉。

她主要做了两件事。

第一件:让 Codex 明确知道代理在哪里。

为当前 Windows 用户持久化了这些代理环境变量:

HTTP_PROXY=http://127.0.0.1:7890
HTTPS_PROXY=http://127.0.0.1:7890
ALL_PROXY=http://127.0.0.1:7890
NO_PROXY=localhost,127.0.0.1

第二件:让 Codex 使用一份可读取的 CA 信任包。

她从现有 Windows ROOT 和 CA 证书存储中导出证书,整理成 PEM 文件,再通过 CODEX_CA_CERTIFICATE 告诉 Codex 使用它。

CODEX_CA_CERTIFICATE=<本机 Windows CA PEM 文件路径>

需要特别说明:这里是导出本机已有证书供 Codex 使用,不是给 Windows 导入一张来历不明的新根证书,更不是关闭证书验证。

再次执行 codex doctor --json 后,结果发生了变化:

network.provider_reachability: ok
ChatGPT inference URL: reachable (HTTP 405)
desktop assets CDN: reachable (HTTP 200)

network.websocket_reachability: ok
handshake result: HTTP 101 Switching Protocols

其中 HTTP 405 是探测方法不被接口接受,但说明已到达服务端;HTTP 101 则表示 WebSocket 升级握手成功。

后来检查 Codex Desktop 的真实日志,还看到重启后 130 次模型请求返回 HTTP 200。这比“诊断绿了”更有说服力:确实有真实任务请求成功。

那一刻,才算真正摸到了问题的主体。

06 / 修好了还不算:我们又给她出了一份审查清单

既然她写了事故复盘,我和 GPT 又把报告过了一遍,还整理了一份“最终复核意见”给她。

这次复核不再追求所有指标都变绿,而是追问:

  • WebSocket 握手成功,能否代表长任务不会中途断流?
  • 当初沙盒内的 Bad access 是否依旧存在,会不会影响 Python、npm、Git 等工具?
  • Windows 完整重启后,代理变量和 CA 文件还能否生效?
  • CA 包里到底信任了哪些证书?
  • 用户级代理变量会不会误伤别的开发工具?

她还真的逐项检查了,而且没有硬把结果写成“全部完美”。

复核报告里有几处特别值得记住:

项目 最终复核的发现
核心模型通信 Provider、HTTPS、WebSocket 握手与真实模型请求已恢复
本地数据库 外部只读完整性检查正常;先前有沙盒环境下的检查误报
沙盒代理访问 当前受限环境未再复现旧 Bad access,但不能据此保证所有沙盒命令都正常
CA 包 共 82 个证书块、81 个不同指纹,其中 10 个已过期,包含一些本机软件相关证书
Git 默认 Schannel 仍有异常;指定 OpenSSL 与 CA 包后可以连通
全局代理变量 FlClash 关闭后可能影响命令行工具;校园网内网地址也可能被误送去代理

这里我尤其佩服她的一点:承认问题还存在边界,比强行宣告完美更可靠。

比如 CA 包目前能用,但它并不是理想的最小信任集合;比如 Git 仍有自己的 Schannel 兼容问题;比如 WebSocket 握手成功,也不意味着可以证明“连续运行一小时零断流”。

最后,我又补做了 Windows 整机重启验证,也顺利通过。至于长时间任务的持续稳定性,我更愿意留给后续真实使用继续观察,而不是在文章里提前写成已完成的测试。

07 / 这次我真正记住的几件事

第一,别把“网站能打开”当成“所有请求都正常”。

ChatGPT 页面能加载,回复却加载不出来,就是最直观的例子。看实际连接与分流,比一句“VPN 没问题”靠谱得多。

第二,先区分路径,再谈根因。

普通 PowerShell、Codex 沙盒命令、Codex CLI 诊断和 Codex Desktop 主进程,不一定走同一套网络配置。某个环境里的 Bad access 很重要,但不能跨环境直接下结论。

第三,别用降低安全性来换一次表面的成功。

网络异常时,关闭 TLS 验证、禁用防护、直接移除沙盒限制,可能会让错误消失,却把真正的问题藏起来。这次修复保留了 TLS 校验和必要的沙盒边界。

第四,“修好”需要可验证的证据。

握手状态码、真实请求日志、重启后的持久性,甚至修复留下的副作用,都比一句“现在好像挺快的”更有价值。

第五,AI 也会在排障中走弯路。

GPT 陪我做了不少有效的对照,也曾在沙盒方向上过度投入;Codex 自己排查时,找到了更关键的代理与证书问题。两者并不是谁永远正确,而是不同的思路放在一起,最后有了更清楚的答案。

尾声

这次折腾,从“是不是该换个 VPN”开始,到最后留下了两份相当完整的技术报告。

回头看,我甚至有点庆幸一开始没直接重装系统,也没胡乱去改 Windows 的证书安全设置。我们绕过不少弯路,但每一步至少让问题的轮廓更清晰了一点。

现在,校园网 + FlClash 规则模式可以正常使用 ChatGPT;Codex 的主要通信链路恢复了,Windows 重启验证也已经通过。剩下的长时间稳定性和少数工具兼容问题,留作后续维护。

我终于可以把时间花回真正想做的事情上,而不是继续给开发工具修网络。

那天晚上,我本来只是想让 AI 帮我写代码。

结果最后,AI 帮我修好了让它自己无法工作的网络。


记录依据:2026-10-14 的实际排查过程,以及《Codex 网络事故复盘》《Codex 网络事故最终复核报告》。文中的证书与代理配置仅用于说明本次故障,不建议不加检查地直接照搬到其他电脑。

评论区加载中…

其他杂谈

月读空间:一个个人网站,如何长成一座「数字空间」2026-10-10病名爱|《爱之巢》Demo杂谈2026-09-28
© 2026 Alastor陇ICP备2026008744号-1甘公网安备62060202000509号