核心结论
Windows PowerShell 中用 $env:HTTPS_PROXY 临时设置代理、写入 $PROFILE 或用 setx 永久设置;WSL2 默认 NAT 模式下不能用 127.0.0.1,需要用 ip route 取得宿主机 IP,并在 Clash Verge 中开启“允许局域网连接”,较新的 Windows 与 WSL 版本也可以改用镜像网络模式。
先说结论
Windows 上使用 Claude Code,代理设置分两种情况:
- 原生 PowerShell:用
$env:HTTPS_PROXY指向http://127.0.0.1:端口即可,想长期生效就写入$PROFILE或用setx; - WSL2:默认 NAT 模式下
127.0.0.1是 Linux 自己,必须改用 Windows 宿主机的 IP,并在 Clash Verge 中开启允许局域网连接;较新版本可以改用镜像网络模式,省去取 IP 的步骤。
安装流程本身见 Claude Code 安装与登录教程,本文只讲代理。
先选运行环境:PowerShell 还是 WSL
| 对比项 | Windows 原生(PowerShell) | WSL2 |
|---|---|---|
| 代理设置难度 | 简单,直接用 127.0.0.1 | NAT 模式需取宿主机 IP,镜像模式较简单 |
| 开发环境 | 适合 Windows 原生项目 | 适合 Linux 工具链、脚本与容器项目 |
| 常见问题 | 新窗口忘记设置变量 | 宿主机 IP 变化、防火墙拦截、PATH 混用 |
| TUN 模式 | 通常可直接接管 | 视网络模式而定,不一定生效 |
如果项目主要跑在 Linux 工具链上(例如 Shell 脚本、Docker、各类 Linux 命令),在 WSL 中运行 Claude Code 更顺手;如果是 Windows 原生项目,直接用 PowerShell 更省事。两个环境的代理需要分别设置,互不继承。
准备工作
- 代理客户端已连接美国、日本或新加坡等支持地区的节点,并手动固定,不要用香港节点;
- 在 Clash Verge Rev 的端口设置中确认混合端口,下文以常见默认值 7897 为例;
- 确认你打算在 PowerShell 还是 WSL 中运行 Claude Code。原生 Windows 运行的前置依赖(例如是否需要 Git for Windows)以官方文档为准。
步骤一:PowerShell 中设置代理
临时生效(当前窗口)
$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"
claude
写入 PowerShell 配置文件
执行 notepad $PROFILE(文件不存在时先执行 New-Item -Type File -Force $PROFILE),把上面三行 $env: 语句粘贴进去保存。以后每次打开 PowerShell 都会自动设置。
用 setx 永久写入用户环境变量
setx HTTPS_PROXY "http://127.0.0.1:7897"
setx HTTP_PROXY "http://127.0.0.1:7897"
setx NO_PROXY "localhost,127.0.0.1"
setx 只对之后新打开的窗口生效。它会影响所有读取这些变量的程序,代理客户端关闭时这些程序可能连不上网。需要撤销时执行:
[Environment]::SetEnvironmentVariable("HTTPS_PROXY", $null, "User")
[Environment]::SetEnvironmentVariable("HTTP_PROXY", $null, "User")
如果不想碰环境变量,也可以开启客户端的 TUN 模式接管全部流量,参考 Clash Verge 使用教程。
步骤二:WSL2 中设置代理
1. 开启允许局域网连接
在 Clash Verge Rev 设置中打开“允许局域网连接”(不同版本名称可能略有差异)。不开启时客户端只监听本机回环地址,WSL 无法连入。首次开启时如果 Windows 防火墙弹窗,请允许专用网络访问。
2. 获取宿主机 IP
在 WSL 终端执行:
ip route show default | awk '{print $3}'
输出的网关地址就是 Windows 宿主机在 WSL 虚拟网络中的 IP。另一种常见方法是读取 /etc/resolv.conf 中的 nameserver:
grep nameserver /etc/resolv.conf | awk '{print $2}'
但较新版本的 WSL 如果启用了 DNS 隧道,这里可能显示 10.255.255.254 之类的地址,并不是宿主机 IP,此时以 ip route 的结果为准。
3. 写入 ~/.bashrc 自动设置
宿主机 IP 可能在重启后变化,建议每次动态获取。把以下内容追加到 ~/.bashrc(使用 zsh 则写入 ~/.zshrc):
HOST_IP=$(ip route show 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"
保存后执行 source ~/.bashrc 生效。
4. 可选:镜像网络模式
较新的 Windows 11 与 WSL 版本支持镜像网络模式,开启后 WSL 与 Windows 共享网络,可直接使用 127.0.0.1:7897。在 Windows 用户目录下创建或编辑 .wslconfig:
[wsl2]
networkingMode=mirrored
保存后在 PowerShell 执行 wsl --shutdown,再重新打开 WSL。系统版本要求和可用选项以微软官方文档为准。较新的 WSL 版本还提供把 Windows 代理设置同步到 WSL 的相关选项,但不同版本行为不一,建议仍在 WSL 中显式设置代理变量,并用下文的方法验证。
镜像模式下,~/.bashrc 中的代理地址可以直接写成 http://127.0.0.1:7897,不再需要动态获取宿主机 IP。如果之前已经写了 NAT 模式的动态脚本,记得删掉或改写,避免两套配置互相覆盖。
5. 临时关闭代理
有时需要在 WSL 中访问内网服务或让某条命令直连,可以临时取消代理变量:
unset HTTPS_PROXY HTTP_PROXY
PowerShell 中对应的写法是 Remove-Item Env:HTTPS_PROXY 和 Remove-Item Env:HTTP_PROXY。关闭后只影响当前窗口,重新打开终端会按配置文件恢复。
验证
先确认代理变量已经生效。PowerShell 中执行 $env:HTTPS_PROXY,WSL 中执行 echo $HTTPS_PROXY,都应输出正确的代理地址。
然后在同一个终端测试到 Anthropic API 的连通性。PowerShell 中:
curl.exe -I https://api.anthropic.com
WSL 中:
curl -I https://api.anthropic.com
能返回 HTTP 状态行(例如 404 或 401)即表示网络已通,状态码本身不重要;返回 403 通常说明出口地区不在支持范围内;长时间无响应则回到上面的步骤检查。出口地区可以在浏览器中打开 IP 查询页确认,应与所选节点一致。一切正常后运行 claude 开始使用。
常见错误
| 现象 | 原因 | 解决方法 |
|---|---|---|
| WSL 中 curl 报 Connection refused | 未开启允许局域网连接,或 IP 取错 | 开启该选项,用 ip route 重新取 IP |
| WSL 中 curl 长时间无响应 | Windows 防火墙拦截 | 在防火墙中允许代理客户端通过 |
| setx 后仍无效 | 当前窗口未刷新 | 重新打开终端或编辑器 |
| WSL 里 claude 调用的是 Windows 版本 | PATH 中混入了 Windows 的 npm 目录 | 执行 which node,确认路径不在 /mnt/c 下,在 WSL 内单独安装 Node.js |
| 编辑器内置终端不走代理 | 编辑器启动时未继承新变量 | 完全退出编辑器后重新打开 |
关于防火墙的补充说明
WSL2 访问宿主机代理端口,在 Windows 看来属于来自虚拟网卡的入站连接。Clash Verge Rev 首次开启局域网连接时,系统通常会弹出防火墙提示,请勾选允许专用网络访问。如果当时点了取消,可以到“Windows 安全中心 → 防火墙和网络保护 → 允许应用通过防火墙”中找到代理客户端或其内核程序并勾选。不建议为此直接关闭整个防火墙。
另外,开启局域网连接后,同一局域网内的其他设备理论上也能连接你的代理端口。在公共网络(如咖啡馆、酒店)环境下使用时,建议只允许专用网络,用完后按需关闭该选项。
编辑器远程连接 WSL 的情况
使用 VS Code 等编辑器远程连接 WSL 时,编辑器内置终端运行在 WSL 里,读取的是 WSL 中的 ~/.bashrc,与 Windows 侧的 $PROFILE 无关。代理写在 ~/.bashrc 后,需要重新打开内置终端才会生效;如果仍不生效,在内置终端中执行 echo $HTTPS_PROXY 确认变量是否存在。
连接仍不稳定、任务中途断开,请看 Claude Code 连接失败排查。节点方面,本站实测中 二猫云是唯一 Claude Code 实测可用的品牌,建议使用其美国、日本、新加坡节点并固定。请遵守所在地法律法规以及 Anthropic 的使用条款和支持地区政策。
相关问题
常见问题
为什么 WSL2 里设置 127.0.0.1 的代理不生效?
WSL2 默认使用 NAT 网络,Linux 子系统有自己独立的网络环境,127.0.0.1 指向的是 WSL 自身,而不是运行代理客户端的 Windows。需要改用宿主机 IP,或切换到镜像网络模式。
WSL 连宿主机代理端口被拒绝怎么办?
先确认 Clash Verge 已开启“允许局域网连接”,否则客户端只监听本机回环地址;再检查 Windows 防火墙是否拦截了代理客户端的入站连接,必要时在防火墙中允许该程序通过。
setx 设置代理后为什么当前窗口还是没有生效?
setx 写入的是用户级环境变量,只对之后新打开的终端窗口生效,当前窗口不会改变。设置后关闭并重新打开 PowerShell 或编辑器即可。
WSL 镜像网络模式有什么要求?
镜像网络模式需要较新的 Windows 11 与 WSL 版本支持,具体要求以微软官方文档为准。开启后 WSL 可以直接通过 127.0.0.1 访问 Windows 上的代理端口,配置更简单。
开了 TUN 模式后 WSL 还需要设置代理吗?
视网络模式而定。部分环境下 Windows 的 TUN 可以接管 WSL 流量,但 NAT 模式下并不总是生效。最稳妥的方式仍是在 WSL 中显式设置代理变量,并用 curl 验证。
本文最后更新于 。网络服务与 AI 平台政策变化较快,如发现信息过时,欢迎通过联系我们反馈。