OpenAI Codex CLI国内怎么用?Clash访问配置指南
OpenAI Codex CLI适合在终端中辅助编程,但网络连接会直接影响登录和命令执行。本文用新手能看懂的方式说明如何通过Clash完成基础代理、分流与故障排查。
Codex CLI 与 Clash 的连接关系
OpenAI Codex CLI 是运行在终端中的编程辅助工具,常见操作包括登录账号、读取项目文件、发送模型请求、接收流式输出,以及根据授权执行命令。它不像浏览器那样一定会自动继承所有图形化代理设置,因此“浏览器可以打开,终端却登录失败”并不矛盾。真正需要确认的是:终端进程是否拿到了代理环境变量,Clash 是否允许对应的连接进入,以及登录回调或 API 请求是否被错误地分到了直连策略。
Clash 在这里主要负责三件事。第一,提供一个本机代理入口,通常是 127.0.0.1:7890 的 mixed-port,同时兼容 HTTP 代理和 SOCKS5 代理。第二,按照域名、进程或规则集把 Codex CLI 的登录与模型请求送进指定策略组。第三,在需要时通过 TUN 模式接管那些不读取系统代理的命令行连接。只要这三个环节中的任意一个没有接上,就可能出现超时、连接被重置、登录页面打不开或请求卡在等待状态。
先分清“客户端能用”和“命令行能用”
浏览器测试成功,只能说明浏览器当前使用的代理有效,不能证明 Codex CLI 已经使用同一出口。文章中的端口以 7890 为示例,请以 Clash 客户端设置页显示的 mixed-port 或 HTTP 端口为准。若端口实际是 7897、7898 等,后续命令必须同步替换。
开始前建议使用基于 mihomo 内核的客户端,例如 Clash Verge Rev、Mihomo Party 或其他仍在维护的 Clash 客户端。原版 Clash 对 TUN、规则集和较新的配置字段支持有限,遇到命令行应用时排查成本更高。节点订阅导入后,先在 Clash 中确认至少有一个可用节点,再进行 Codex CLI 的网络配置。
Clash 基础设置:端口、模式与节点
打开 Clash 的设置或配置页面,先确认本机代理入口。推荐使用 mixed-port,因为它能让同一个端口同时接受 HTTP 和 SOCKS5 连接,减少终端工具之间的格式差异。典型配置如下:
mixed-port: 7890
allow-lan: false
mode: rule
mixed-port 是终端连接 Clash 时要使用的端口;allow-lan: false 表示只允许本机访问,适合个人电脑,可以避免局域网内其他设备未经授权使用代理;mode: rule 则让请求按照规则分流。不要为了测试方便长期开启 allow-lan: true,如果确实需要让同一局域网的其他设备接入,应同时设置明确的访问控制并了解暴露端口带来的风险。
第一次排查时可以暂时把模式切换为 Global,选择一个延迟较低且确认可用的节点,然后打开系统代理。Global 的作用是减少规则判断变量,适合验证“Codex CLI 能否通过这个节点建立连接”。如果 Global 可以使用而 Rule 不行,问题通常在规则集、策略组或匹配顺序,不一定是节点本身失效。测试完成后应切回 Rule,不要把所有国内流量长期送进代理。
| 设置项 | 测试阶段建议 | 日常使用建议 | 排查重点 |
|---|---|---|---|
| 代理模式 | Global | Rule | Global 成功、Rule 失败时检查规则 |
| 本机端口 | mixed-port:7890 | 保持固定 | 命令中的端口必须与客户端一致 |
| 节点策略 | 手动选择可用节点 | 使用稳定策略组 | 测速成功不等于目标服务可用 |
| TUN 模式 | 必要时开启 | 命令行不认代理时开启 | 检查权限、路由与 DNS 劫持 |
| 系统代理 | 打开 | 按需打开 | 仅对遵循系统代理的程序有效 |
选择稳定策略组
如果订阅中有“AI”“国外服务”或“自动选择”策略组,可以先手动指定一个节点,避免 url-test 在测试过程中频繁切换出口。Codex CLI 的登录和模型请求可能持续数十秒甚至更久,节点在请求中途切换会表现为流式输出中断、连接重试或上下文请求失败。确认链路稳定后,再考虑使用 url-test、fallback 等自动策略。
规则层面不建议只按进程名处理。Windows 上的进程可能显示为 codex.exe、node.exe 或其他运行时进程,macOS 与 Linux 的进程名也可能不同。更可靠的做法是使用维护中的 AI 服务域名规则集,把登录、API 和模型相关请求统一指向专用策略组,同时保留局域网、国内站点与本地开发服务的直连规则。
终端代理配置:让 Codex CLI 继承 Clash
最直接的方案是为当前终端会话设置代理环境变量。HTTP 请求和 HTTPS 请求通常都可以通过 HTTP_PROXY、HTTPS_PROXY 传递给命令行工具,大小写变量同时设置可以兼容不同运行时的读取习惯。SOCKS5 入口则使用 socks5:// 前缀,但部分 Node.js 工具对 SOCKS5 环境变量的支持不一致,因此优先使用 Clash 的 mixed-port。
Windows PowerShell 设置
$env:HTTP_PROXY="http://127.0.0.1:7890"
$env:HTTPS_PROXY="http://127.0.0.1:7890"
$env:http_proxy="http://127.0.0.1:7890"
$env:https_proxy="http://127.0.0.1:7890"
$env:NO_PROXY="localhost,127.0.0.1,::1"
这些变量只对当前 PowerShell 窗口及其启动的子进程有效,关闭窗口后会消失。确认连接正常后,可以在 PowerShell 配置文件中加入相同设置,但不建议把代理变量写入所有开发环境,否则本地包管理器、公司内网和局域网服务也可能被错误送入代理。需要取消时执行:
Remove-Item Env:HTTP_PROXY,Env:HTTPS_PROXY,Env:http_proxy,Env:https_proxy
macOS 与 Linux 设置
export HTTP_PROXY="http://127.0.0.1:7890"
export HTTPS_PROXY="http://127.0.0.1:7890"
export http_proxy="http://127.0.0.1:7890"
export https_proxy="http://127.0.0.1:7890"
export NO_PROXY="localhost,127.0.0.1,::1"
如果使用 zsh,可以把变量放入 ~/.zshrc;bash 用户通常放入 ~/.bashrc。修改后执行 source ~/.zshrc 或重新打开终端。Linux 上如果 Codex CLI 是由脚本、IDE 任务或 systemd 启动,交互式终端中的环境变量未必会自动传过去,需要在对应启动配置中单独设置。
验证环境变量是否生效
- 在 Clash 的日志页清空旧记录,保持客户端处于 Rule 或 Global 模式,并确认节点策略组已经选中可用节点。
- 在终端执行
echo $HTTPS_PROXY;Windows PowerShell 执行$env:HTTPS_PROXY,确认输出的是当前 mixed-port。 - 使用系统自带的网络测试命令访问一个普通 HTTPS 地址,观察 Clash 日志中是否出现新的连接记录。Windows 可使用
curl.exe,macOS 与 Linux 可使用curl。 - 确认测试命令成功后,再启动 Codex CLI 的登录流程。这样可以把“终端没有代理”和“Codex 本身登录异常”分开判断。
- 登录完成后执行一个只读、范围明确的测试请求,先验证模型响应与流式输出,不要一开始就授权执行修改项目文件的命令。
登录过程中如果浏览器被自动打开,浏览器访问登录页面使用的是浏览器自身代理;终端负责发起本地登录流程和后续 API 请求。若浏览器能完成授权,但终端仍提示超时,重点检查终端环境变量、Clash 日志和本地回调端口。NO_PROXY 中保留 localhost 与 127.0.0.1 很重要,否则本地授权回调可能被错误发送给远程节点。
不要把令牌写进配置文件
代理变量本身不包含账号密码时风险较低,但登录令牌、API 密钥和订阅链接都属于凭据。不要把它们直接写入公开项目的 YAML、Shell 脚本或终端录屏。若服务支持浏览器授权,优先使用官方登录流程;若必须使用环境变量,建议通过系统凭据管理器或仅限当前会话的变量注入。
分流策略与 TUN 模式:命令行不认代理怎么办
设置环境变量后,大多数遵循标准 HTTP 代理的命令行程序都能工作,但并非所有 CLI、Node.js 子进程或本地运行时都会读取这些变量。有些程序使用自己的网络库,有些只支持 SOCKS5,还有些直接建立 TCP 连接并忽略系统代理。此时可以在 Clash 中开启 TUN,让流量经过虚拟网卡进入 mihomo 内核。
TUN 不是“更快的节点”,而是更底层的流量接管方式。启用后,不依赖系统代理的程序也可能被纳入规则处理,但同时会接管更多系统流量,因此规则和 DNS 配置必须更谨慎。Windows 通常需要安装服务模式或授予管理员权限;macOS 可能需要允许网络扩展;Linux 则需要 root 权限或相应 capabilities。不同客户端的开关名称可能是“增强模式”“TUN 模式”或“虚拟网卡”。
tun:
enable: true
stack: mixed
auto-route: true
auto-detect-interface: true
dns-hijack:
- any:53
stack: mixed 通常兼顾 system 与 gvisor 的兼容性;auto-route 让内核自动添加接管路由;auto-detect-interface 用于自动识别当前网络出口;dns-hijack: any:53 则把常见 DNS 查询导入 Clash。若客户端已经通过图形界面生成 TUN 配置,不要直接重复粘贴整段 YAML,先查看当前配置结构,避免同一字段出现两次导致加载失败。
分流规则建议采用“本地优先、目标服务明确代理、最后兜底”的顺序:
DOMAIN-SUFFIX,local,DIRECT、局域网网段与本机回环地址优先直连,保证编辑器、测试服务器和 NAS 不被送入节点。- 把服务商维护的 AI 相关域名规则集放在国内通用直连规则之前,统一交给 AI 策略组,避免登录和 API 请求被误判为直连。
- 国内域名和中国大陆 IP 规则放在 AI 目标之后,其余未匹配流量再交给默认代理组。
MATCH,DIRECT不适合作为需要代理的 Codex 环境的最后规则,否则所有未被列出的服务都会直连。可以使用MATCH,PROXY,再通过前面的局域网规则保护本地资源。
先用日志确认真实匹配结果
不要凭规则文件猜测流量走向。启动 Codex CLI 后,在 Clash 日志中查看目标域名、命中的规则类型和最终策略组。如果请求出现在 DIRECT,说明规则没有覆盖或顺序不正确;如果完全没有日志,说明程序可能没有经过当前 Clash 实例,应检查环境变量、TUN 权限或是否存在第二个代理软件。
登录、请求与流式输出故障排查
网络问题最好按照“代理入口—规则匹配—节点出口—应用行为”的顺序排查,不要一开始就反复更换订阅。下面的现象可以帮助快速定位:
| 现象 | 优先检查位置 | 处理方法 |
|---|---|---|
| 终端提示连接被拒绝 | 端口或 Clash 是否运行 | 确认 mixed-port 数值,检查 127.0.0.1 是否可访问 |
| 浏览器能登录,CLI 超时 | 环境变量 | 重新设置 HTTP_PROXY 与 HTTPS_PROXY,再查看日志 |
| 登录页面成功,回调失败 | NO_PROXY 与本地端口 | 保留 localhost、127.0.0.1、::1,不要代理本地回调 |
| Rule 模式失败,Global 成功 | 规则顺序或策略组 | 检查 AI 规则是否命中 DIRECT 或错误策略 |
| 日志完全没有请求 | TUN、代理变量或第二代理 | 确认程序是否读取变量,必要时开启 TUN 并关闭其他 VPN |
| 请求开始后频繁中断 | 节点稳定性与超时 | 固定节点测试,避免自动切换,检查长连接表现 |
| 国内包管理器也走代理 | 分流范围过大 | 补充国内域名、内网域名和本地网段直连规则 |
处理 DNS 与 IPv6 干扰
Codex CLI 的域名解析如果绕过 Clash,可能得到错误地址或无法连接。开启 TUN 后,建议确认 DNS 模块已启用,并检查 enhanced-mode、dns-hijack 与规则是否互相匹配。使用 fake-ip 时,日志中可能看到 198.18.0.0/16 范围内的地址,这属于 Clash 的虚拟解析结果,不代表节点返回了异常公网地址。
如果启用 TUN 后仍然间歇性失败,可以暂时关闭 IPv6 或确认 IPv6 路由也被 TUN 接管。双栈网络里,应用可能优先选择 AAAA 记录,但本地 IPv6 路由没有经过代理,于是出现“有时成功、有时超时”。排查期间固定使用 IPv4 是缩小变量的办法,确认链路稳定后再恢复 IPv6 并验证实际路由。
避免多代理叠加
系统代理、Clash TUN、浏览器独立代理、其他 VPN 和终端环境变量同时存在时,请求可能经过不同出口,日志也会被拆散。排查时只保留一个 Clash 实例,关闭其他 VPN 与代理扩展,浏览器使用系统代理,终端明确设置 mixed-port。确认成功后,再逐项恢复需要的工具,每恢复一项就观察一次日志,这样才能知道是哪一层造成冲突。
常见问题 FAQ
浏览器正常,为什么 Codex CLI 仍然无法连接?
浏览器可能读取了系统代理,而终端程序没有读取。先在当前终端检查 HTTPS_PROXY 是否指向 Clash 的实际端口,再观察启动 CLI 后是否产生 Clash 日志。若程序明确不支持代理环境变量,开启 TUN 进行对照测试。
HTTP 代理和 SOCKS5 代理应该选哪个?
优先使用 mixed-port 的 HTTP 写法 http://127.0.0.1:7890,兼容性通常更好。只有在工具明确要求 SOCKS5 时才改用 socks5://127.0.0.1:7890,不要把 SOCKS5 地址写进只接受 HTTP 代理的配置项。
为了保证 Codex 可用,是否应该一直使用 Global?
不建议。Global 适合首次验证和临时排障,会把不需要代理的国内、局域网和开发服务也送进节点。确认目标服务可用后切回 Rule,通过专用规则集只代理登录与模型请求,再用日志确认匹配结果。
Clash 或 Codex CLI 更新后配置失效怎么办?
先记录客户端版本、内核名称、代理端口和错误信息,然后重新验证环境变量与规则命中情况。不要直接覆盖整个配置文件,优先检查端口字段、TUN 字段和策略组名称是否发生变化。若只是订阅更新后失效,固定节点测试并重新检查规则集是否仍然指向存在的策略组。