连接故障故障排查

Windows 和 WSL 里 Codex 怎么走代理?

Windows 下 Codex 通过 PowerShell 环境变量走代理;WSL 中 127.0.0.1 默认指向 WSL 自身,需要指向宿主机 IP 并在客户端开启允许局域网连接,或使用 TUN 模式。本文给出两种环境的设置方法。

Windows 和 WSL 里 Codex 怎么走代理?的网络技术概念插图
梯子k原创概念插图
本文目录

在 Windows 原生环境运行 Codex,只需要在 PowerShell 中设置 HTTPS_PROXY 指向 Clash Verge Rev 的本地端口。在 WSL 里运行时要多一步:WSL 默认有独立的虚拟网络,其中的 127.0.0.1 指的是 WSL 自己,不是 Windows 宿主机,所以代理地址要改成宿主机 IP,并在客户端开启允许局域网连接。嫌麻烦的话,直接开启 TUN 模式是最省事的方案。

三种方案对比

方案 适用环境 优点 缺点
PowerShell 环境变量 Windows 原生 设置简单 只对当前窗口生效
WSL 指向宿主机 IP WSL 不改系统网络 需开允许局域网连接,IP 可能变化
TUN 模式 Windows 与 WSL 一次设置全部生效 需要管理员权限安装服务

Windows 原生:PowerShell 设置

在 Clash Verge Rev 设置中查看本地混合端口,通常是 7897,以实际显示为准:

$env:HTTPS_PROXY = "http://127.0.0.1:7897"
$env:HTTP_PROXY = "http://127.0.0.1:7897"
$env:NO_PROXY = "localhost,127.0.0.1"
curl.exe -I https://api.openai.com

这些变量只在当前 PowerShell 窗口有效。需要长期生效时,可以写入 PowerShell 配置文件,打开方式是执行 notepad $PROFILE。

WSL:指向宿主机 IP

  1. 在 Clash Verge Rev 中开启允许局域网连接的开关,让代理端口接受来自 WSL 虚拟网卡的连接。
  2. 如果 Windows 防火墙弹出提示,允许 Clash Verge Rev 在专用网络上通信。
  3. 在 WSL 中获取宿主机 IP 并设置代理变量。
HOST_IP=$(ip route show | grep -i default | awk '{ print $3 }')
export HTTPS_PROXY="http://${HOST_IP}:7897"
export HTTP_PROXY="http://${HOST_IP}:7897"
export NO_PROXY="localhost,127.0.0.1"
curl -I https://api.openai.com

可以把这几行写入 WSL 的 shell 配置文件,每次打开终端自动生效。

较新版本的 WSL 支持镜像网络模式,启用后 WSL 与宿主机共享网络,此时通常可以直接使用 127.0.0.1。是否可用取决于 Windows 与 WSL 的版本,以微软官方文档为准。

最省事的方案:TUN 模式

TUN 模式在系统层接管流量,Windows 原生程序与 WSL 的流量都会被 Clash Verge Rev 处理,不需要逐个设置环境变量,也避免了 Codex 子进程漏走代理的问题。开启方法见 Clash Verge TUN 模式,客户端基础配置见 Clash Verge Rev 使用教程。

TUN 开启后如果 WSL 能 ping 通 IP 却无法解析域名,通常是 DNS 配置问题,检查 WSL 的 DNS 是否被正确接管。

如何确认代理真的生效

不管用哪种方案,都建议在运行 Codex 的那个终端里做一次验证,而不是在另一个窗口里测:

  1. 执行 curl 访问 api.openai.com,能返回响应头说明代理可达。
  2. 查看 Clash Verge Rev 的连接列表,确认出现来自 WSL 或 PowerShell 的 OpenAI 连接。
  3. 确认这些连接使用的是美国、日本或新加坡节点,而不是香港节点组。

三项都满足,再启动 Codex。只满足第一项而连接落在香港节点,通常是规则把 OpenAI 域名分到了默认节点组。

登录时的注意事项

在 WSL 中登录 Codex 时,授权页面会在 Windows 浏览器中打开。浏览器与 WSL 终端要走同一个节点,TUN 模式或全局模式能保证这一点。设置完成后仍然报错,按 Codex 无法连接怎么办 继续排查。

总结

  • Windows 原生用 PowerShell 设置 HTTPS_PROXY 即可。
  • WSL 中 127.0.0.1 默认不是宿主机,需要指向宿主机 IP 并开启允许局域网连接。
  • 镜像网络模式下通常可直接用 127.0.0.1,以官方文档为准。
  • TUN 模式一次设置覆盖 Windows 与 WSL,是最省事的方案。

排查顺序速查

从本地到远端依次缩小问题范围,避免同时修改多个配置。
顺序检查对象验证方法
1本地网络关闭代理,确认普通网页是否正常
2订阅与节点核对有效期与配置,单独测试一个节点
3DNS 与路由查看客户端日志,每次只改变一个设置

常见问题

WSL 里设置了 127.0.0.1 为什么连不上?

默认网络模式下,WSL 有自己的虚拟网卡,127.0.0.1 指向的是 WSL 自身而不是 Windows 宿主机,所以访问不到宿主机上的代理端口。需要改成宿主机 IP,或使用镜像网络模式。

开启允许局域网连接安全吗?

开启后同一局域网的设备也能连接你的代理端口。在家庭网络中通常问题不大;在公共网络中建议只在需要时开启,或者改用 TUN 模式。

宿主机 IP 每次重启都会变吗?

默认网络模式下,WSL 看到的宿主机地址可能在重启后变化,所以建议用命令动态获取,而不是写死一个 IP。

用了 TUN 模式还需要设置环境变量吗?

多数情况下不需要。TUN 模式在系统层接管流量,WSL 的流量也会经过宿主机网络被接管。如果 TUN 开启后 WSL 仍然不通,再检查 WSL 的 DNS 设置。

所属专题AI 工具与网络