目标

让 WSL 中的 Codex CLI 和 VS Code 里的 Codex 插件都能正常使用 Windows 上的代理,并且以后不需要每次手动设置代理或重复登录。


一、基本原理

Windows 上的代理软件通常显示类似:

代理地址:127.0.0.1:<代理端口>
HTTP/SOCKS 端口:<代理端口>
局域网代理:开启

在 Windows 本机里,127.0.0.1:<代理端口> 表示 Windows 自己的代理服务。

但在 WSL 里,127.0.0.1 指的是 WSL 自己,不是 Windows。因此 WSL 不能直接使用:

127.0.0.1:<代理端口>

而应该使用 WSL 看到的 Windows 网关地址:

<WSL中看到的Windows网关IP>:<代理端口>

这个网关 IP 可以用下面命令自动获取:

ip route | awk '/default/ {print $3; exit}'

二、先确认 Windows 代理软件设置

在 Windows 代理软件中确认:

HTTP/SOCKS 端口:<代理端口>
局域网代理:已开启

注意:教程中所有 <代理端口> 都要替换成你代理软件里显示的端口号。


三、在 WSL 中测试代理是否可用(前提条件)

打开 WSL 终端,执行:

host_ip=$(ip route | awk '/default/ {print $3; exit}')
echo $host_ip

这会输出 WSL 看到的 Windows 网关 IP。

然后测试 HTTP 代理:

curl -x http://$host_ip:<代理端口> -4 -s https://ifconfig.me/ip
echo

再测试 SOCKS 代理:

curl -x socks5h://$host_ip:<代理端口> -4 -s https://ifconfig.me/ip
echo

如果能输出代理后的公网 IP,说明 WSL 可以通过 Windows 代理联网。


四、临时设置 WSL 代理

确认代理可用后,可以先临时设置当前终端的代理:

export host_ip=$(ip route | awk '/default/ {print $3; exit}')

export http_proxy=http://$host_ip:<代理端口>
export https_proxy=http://$host_ip:<代理端口>
export HTTP_PROXY=$http_proxy
export HTTPS_PROXY=$https_proxy

export all_proxy=socks5h://$host_ip:<代理端口>
export ALL_PROXY=$all_proxy

然后测试:

curl -4 -s https://ifconfig.me/ip
echo

如果输出的是代理后的公网 IP,说明当前 WSL 终端已经走代理了。

这个临时设置只影响当前终端,关闭终端后就会失效,不会破坏 WSL。


五、安装并登录 Codex CLI

确认 WSL 已经走代理后,安装 Codex CLI:

curl -fsSL https://chatgpt.com/codex/install.sh -o /tmp/codex-install.sh
sh /tmp/codex-install.sh

安装完成后检查:

codex --version

然后登录:

codex login

登录成功后,不要随便执行:

codex logout

因为 VS Code 插件和 WSL 里的 Codex CLI 可能会共享登录缓存。退出登录后,VS Code 里也可能需要重新登录。


六、把代理写入 ~/.bashrc

为了以后每次打开 WSL 或 VS Code 终端都自动走代理,可以把代理配置写入 ~/.bashrc

先备份:

cp ~/.bashrc ~/.bashrc.backup_before_proxy

然后编辑:

nano ~/.bashrc

在文件最后加入:

# ===== WSL proxy for Windows proxy software =====
export PROXY_PORT="<代理端口>"

export host_ip=$(ip route | awk '/default/ {print $3; exit}')

export http_proxy=http://$host_ip:$PROXY_PORT
export https_proxy=http://$host_ip:$PROXY_PORT
export HTTP_PROXY=$http_proxy
export HTTPS_PROXY=$https_proxy

export all_proxy=socks5h://$host_ip:$PROXY_PORT
export ALL_PROXY=$all_proxy

export no_proxy=localhost,127.0.0.1,::1,$host_ip
export NO_PROXY=$no_proxy
# ===============================================

注意:把 <代理端口> 替换成你的代理软件显示的端口号。

在 nano 中保存和退出:

Ctrl + O
Enter
Ctrl + X

然后让配置立即生效:

source ~/.bashrc

测试:

curl -4 -s https://ifconfig.me/ip
echo

如果输出的是代理后的公网 IP,说明配置成功。


七、在 VS Code 里检查环境

在 WSL 终端里进入项目目录后打开 VS Code ,并打开内置终端,执行:

curl -4 -s https://ifconfig.me/ip
echo
which codex
codex --version

正常情况下:

  1. curl 输出代理后的公网 IP;

  2. which codex 能找到 Codex CLI;

  3. codex --version 能显示版本号。

如果这些都正常,说明 VS Code 的 WSL 终端已经继承了代理环境。


八、使用 VS Code Codex 插件

在 VS Code 扩展市场安装或启用 Codex 插件。

如果插件显示未登录,可以点击插件里的登录按钮。

一般情况下,不需要先退出 WSL 终端里的 Codex 登录,也不需要删除 ~/.codex。如果之前已经在 WSL 中成功登录过 Codex,VS Code 插件可能会复用同一个 WSL 用户目录下的登录状态。


九、以后每天怎么使用

日常使用流程:

1. 先打开 Windows 代理软件
2. 确认代理端口没变,局域网代理开启
3. 打开 WSL
4. 进入项目目录
5. 执行 code .
6. 在 VS Code 中使用 Codex

一般不需要重复:

export ...
codex login

也不需要执行:

codex logout

十、什么时候需要重新检查

以下情况需要重新检查代理或登录:

1. Windows 代理端口变了

如果代理软件里的端口改变,需要修改 ~/.bashrc 中:

export PROXY_PORT="<代理端口>"

然后执行:

source ~/.bashrc

2. VS Code 不是 WSL 模式

如果 VS Code 左下角没有显示:

WSL: Ubuntu...

建议关闭 VS Code,然后在 WSL 里重新执行:

cd ~/你的项目目录
code .

3. Codex 插件提示未登录

先不要执行 codex logout

在 VS Code 的 WSL 终端里检查:

curl -4 -s https://ifconfig.me/ip
echo
which codex
ls -l ~/.codex

确认代理、Codex CLI、登录缓存是否正常。

4. WSL 重装了

如果 WSL 重装,之前的 Codex CLI 和登录信息会丢失,需要重新:

设置代理
安装 Codex CLI
登录 Codex
配置 ~/.bashrc

十一、如何撤销代理配置

因为这里只修改了当前用户的 ~/.bashrc,没有改 WSL 底层网络配置,所以恢复很简单。

执行:

cp ~/.bashrc.backup_before_proxy ~/.bashrc
source ~/.bashrc

或者手动编辑:

nano ~/.bashrc

删除之前加入的这一段:

# ===== WSL proxy for Windows proxy software =====
...
# ===============================================

保存退出即可。


十二、不建议随便修改的文件

为了避免 WSL 出问题,普通代理配置不建议优先修改这些底层文件:

/etc/wsl.conf
/etc/resolv.conf
C:\Users\<Windows用户名>\.wslconfig
/etc/passwd

也不建议一开始就修改 WSL 网络模式、DNS、默认用户等系统级配置。

优先使用:

临时 export 测试
→ 确认成功
→ 写入 ~/.bashrc

这是风险最低、最容易恢复的方式。

更多推荐