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 端口为准。若端口实际是 78977898 等,后续命令必须同步替换。

开始前建议使用基于 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,不要把所有国内流量长期送进代理。

设置项测试阶段建议日常使用建议排查重点
代理模式GlobalRuleGlobal 成功、Rule 失败时检查规则
本机端口mixed-port:7890保持固定命令中的端口必须与客户端一致
节点策略手动选择可用节点使用稳定策略组测速成功不等于目标服务可用
TUN 模式必要时开启命令行不认代理时开启检查权限、路由与 DNS 劫持
系统代理打开按需打开仅对遵循系统代理的程序有效

选择稳定策略组

如果订阅中有“AI”“国外服务”或“自动选择”策略组,可以先手动指定一个节点,避免 url-test 在测试过程中频繁切换出口。Codex CLI 的登录和模型请求可能持续数十秒甚至更久,节点在请求中途切换会表现为流式输出中断、连接重试或上下文请求失败。确认链路稳定后,再考虑使用 url-test、fallback 等自动策略。

规则层面不建议只按进程名处理。Windows 上的进程可能显示为 codex.exenode.exe 或其他运行时进程,macOS 与 Linux 的进程名也可能不同。更可靠的做法是使用维护中的 AI 服务域名规则集,把登录、API 和模型相关请求统一指向专用策略组,同时保留局域网、国内站点与本地开发服务的直连规则。

终端代理配置:让 Codex CLI 继承 Clash

最直接的方案是为当前终端会话设置代理环境变量。HTTP 请求和 HTTPS 请求通常都可以通过 HTTP_PROXYHTTPS_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 启动,交互式终端中的环境变量未必会自动传过去,需要在对应启动配置中单独设置。

验证环境变量是否生效

  1. 在 Clash 的日志页清空旧记录,保持客户端处于 Rule 或 Global 模式,并确认节点策略组已经选中可用节点。
  2. 在终端执行 echo $HTTPS_PROXY;Windows PowerShell 执行 $env:HTTPS_PROXY,确认输出的是当前 mixed-port。
  3. 使用系统自带的网络测试命令访问一个普通 HTTPS 地址,观察 Clash 日志中是否出现新的连接记录。Windows 可使用 curl.exe,macOS 与 Linux 可使用 curl
  4. 确认测试命令成功后,再启动 Codex CLI 的登录流程。这样可以把“终端没有代理”和“Codex 本身登录异常”分开判断。
  5. 登录完成后执行一个只读、范围明确的测试请求,先验证模型响应与流式输出,不要一开始就授权执行修改项目文件的命令。

登录过程中如果浏览器被自动打开,浏览器访问登录页面使用的是浏览器自身代理;终端负责发起本地登录流程和后续 API 请求。若浏览器能完成授权,但终端仍提示超时,重点检查终端环境变量、Clash 日志和本地回调端口。NO_PROXY 中保留 localhost127.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-modedns-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 字段和策略组名称是否发生变化。若只是订阅更新后失效,固定节点测试并重新检查规则集是否仍然指向存在的策略组。

准备好 Clash 环境

先在下载中心获取适合当前系统的客户端,导入订阅并确认节点可用,再按照本文设置终端代理与分流规则。

下载Clash