美国家宽 IP 一键直连 · 不用搭 VPS 了解 广告 在新标签页打开

文章 ·

在 WSL、Docker、远程服务器里跑 Claude Code,实际走的是哪个出口?

Claude Code 只读它所在那个环境里的代理变量(https_proxy 等)。在 WSL 2、Docker 容器、远程服务器里运行时,Windows 或 Mac 上开着的代理不会自动带进去,没设就从那个环境自己的网络直连出去;在远程服务器上,出口就是服务器的 IP。下面按环境讲代理地址怎么写、怎么确认(2026 年 10 月 6 日按官方文档核对)。

一图看懂:四种环境,Claude Code 从哪里出去Claude Code 只读它所在环境里的代理变量:本机终端看本机变量,系统代理不算;WSL 2 看 WSL 里的变量,Windows 上开的代理不会自动带进来;Docker 容器看容器里的变量,容器里的 127.0.0.1 是容器自己;在远程服务器上运行时,出口就是服务器的 IP。 一图看懂:Claude Code 从哪里出去 本机终端 看本机变量 设了 https_proxy 才走代理 WSL 2 看 WSL 里的变量 Windows 上开的代理不会自动带进来 Docker 容器 看容器里的变量 容器里的 127.0.0.1 是容器自己 远程服务器 出口=服务器 IP SSH 上去运行,用的是服务器的网络 共同点:只读它所在环境的代理变量,没设就直连。
本机开了代理,不代表 WSL、容器、服务器里的 Claude Code 也走了代理。

为什么本机能走代理,WSL、容器里却在直连?

因为它们各有一套环境变量和网络。按 Claude Code 官方网络配置文档,Claude Code 依次读 https_proxy、HTTPS_PROXY、http_proxy、HTTP_PROXY,取第一个有值的;不支持 SOCKS 代理;变量只在启动时读一次。WSL、容器、服务器里的 shell 不会继承你本机终端或系统代理的设置,所以要在里面单独设。

第二个坑是 127.0.0.1:在 WSL 2(默认模式)和容器里,它指的是 WSL 或容器自己,不是你的电脑。照抄本机的 http://127.0.0.1:端口,会连不上代理。

环境代理地址怎么写不设时从哪出去
本机终端127.0.0.1:端口本机网络
WSL 2(NAT,默认)Windows 主机 IP本机网络
WSL 2(mirrored)127.0.0.1:端口本机网络
Docker 容器host.docker.internal:端口(Docker Desktop)宿主机网络
远程服务器服务器能连到的代理服务器的 IP

WSL 里怎么让 Claude Code 走 Windows 上的代理?

先看 WSL 是哪种网络模式。按 微软 WSL 网络文档,默认是 NAT 模式。

NAT 模式(默认):要用 Windows 主机的 IP。微软给的查询命令是:

ip route show | grep -i default | awk '{ print $3}'

把它拼进代理变量(端口换成代理软件的 HTTP / 混合端口):

WIN=$(ip route show | grep -i default | awk '{ print $3}')
export https_proxy=http://$WIN:7890 http_proxy=http://$WIN:7890

同一份文档说明,用这种 IP 连过去会被当成局域网连接,所以 Windows 上的代理软件要能接受局域网连接(很多软件里叫「允许局域网连接」),只监听 127.0.0.1 时 WSL 连不上。

mirrored 模式:Windows 11 22H2 及以上,可以在 .wslconfig 的 [wsl2] 下写 networkingMode=mirrored。开启后,WSL 可以直接用 127.0.0.1 连 Windows 上的服务,代理地址照本机写法即可。

autoProxy:同样要求 Windows 11 22H2 及以上,在 [wsl2] 下写 autoProxy=true,WSL 会使用 Windows 的 HTTP 代理设置。设好后,在 WSL 里跑 env | grep -i proxy 确认 Claude Code 读到的变量是不是你想要的。

WSL 2 里代理地址怎么写默认的 NAT 模式下,WSL 里的 127.0.0.1 是 WSL 自己,要用 ip route 查到的 Windows 主机 IP,并且代理软件要允许局域网连接;Windows 11 22H2 及以上可以开 mirrored 模式,在 .wslconfig 写 networkingMode=mirrored,之后可以直接用 127.0.0.1 连 Windows 上的代理。 WSL 2 里代理地址怎么写 NAT 模式(默认) 填 Windows 主机 IP 127.0.0.1 指的是 WSL 自己 主机 IP 用这条查: ip route show | grep -i default 代理软件要允许局域网连接 mirrored 模式 填 127.0.0.1 需要 Windows 11 22H2 及以上 networkingMode=mirrored 写在 .wslconfig 的 [wsl2] 下 改完在 WSL 里跑 env | grep -i proxy 确认。
WSL 默认是 NAT 模式,照抄本机的 127.0.0.1:端口 会连不上。

Docker 容器里怎么设?

容器里的 Claude Code 只看容器自己的环境变量。常见三种设法:

  • 启动时传进去:docker run -e https_proxy=http://host.docker.internal:7890 …。按 Docker Desktop 文档,host.docker.internal 会解析到宿主机的内部 IP,用来连宿主机上的服务。
  • 写进 ~/.docker/config.json:在 proxies.default 里填 httpsProxy、httpProxy,Docker 会给新容器和构建设上 HTTPS_PROXY / https_proxy 等变量(Docker 文档)。只对新容器生效,已经在跑的容器不会变。
  • Dev Container:写在 devcontainer.json 的 containerEnv 里,Claude Code 的 Dev Container 文档用的也是这种方式传环境变量。

两个容易漏的地方:Docker 的 allProxy 对应 ALL_PROXY,Claude Code 不读这个变量,要填 httpsProxy;Docker Desktop 设置里可以填 SOCKS5 代理,但 Claude Code 不支持 SOCKS,给它的地址要用 HTTP 代理。用 Anthropic 参考容器里的 init-firewall.sh 限制了出站的,还要把代理地址加进放行范围。

Docker 容器里的 Claude Code 怎么用宿主机的代理容器里的 Claude Code 读容器的 https_proxy 变量,地址写 host.docker.internal 加端口,连到宿主机上的 HTTP 代理,再从代理出口出去;写 127.0.0.1 会连回容器自己,写 socks5 或只设 ALL_PROXY 对 Claude Code 无效。 容器怎么用宿主机的代理 容器里的 Claude Code 读容器的 https_proxy http://host.docker.internal:7890 宿主机上的 HTTP 代理 → 代理出口 这样写不行 127.0.0.1:连回容器自己 socks5://、只设 ALL_PROXY:不读 端口换成你代理软件的 HTTP / 混合端口。
host.docker.internal 是 Docker Desktop 提供的名字,指向宿主机。

在远程服务器上跑,Anthropic 看到的是谁的 IP?

是服务器的 IP。SSH 上去以后,Claude Code 在服务器上运行,用的是服务器的网络和服务器上的环境变量,和你本机开不开代理无关。所以要看的是服务器出口:地区要在 Anthropic 支持的地区里,而云服务器的出口一般属于机房网络,在本站检测里会显示为「机房」。

如果想让服务器上的 Claude Code 借用本机的代理,可以用 SSH 的远程端口转发。按 OpenSSH 手册,-R 会把服务器上某个端口的连接转回本机:

ssh -R 7890:127.0.0.1:7890 你的服务器
export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890

第一行在本机执行,第二行在登录后的服务器里执行。这样请求会经本机代理出去,SSH 断开后就不通了。

另外,用 --bg、claude agents 等方式跑的后台会话,不一定继承当前 shell 的变量。官方文档建议把代理变量写进 ~/.claude/settings.json 的 env,后台会话都能读到。

怎么确认 Claude Code 实际从哪里出去?

在 WSL、容器或服务器里,和 Claude Code 同一个 shell 运行:

curl -sL ipjudge.org/cc | bash

脚本按 Claude Code 的规则(只读 https_proxy 等四个变量、不支持 SOCKS、不读 ALL_PROXY)算出它会用的代理,再问 api.anthropic.com 看到的 IP,并对照不走代理时的出口。只读,不安装、不修改、不上传。

也可以在 Claude Code 里运行 /status,看 Proxy 一行;地址写错、解析不了时,这里会标为无效并忽略。

常见问题

WSL 里 curl 能通,Claude Code 却还是直连?多半是只设了 ALL_PROXY,或者代理写成了 socks5://。curl 认这两种,Claude Code 都不认,改成 https_proxy=http://…。

容器里写 127.0.0.1:7890 为什么连不上?容器里的 127.0.0.1 是容器自己。Docker Desktop 下改成 host.docker.internal:7890;还连不上的,检查宿主机代理是否只监听 127.0.0.1。

改了变量,正在跑的 Claude Code 没反应?官方说明变量只在启动时读一次,退出后重新启动才生效。后台会话的变量要写进 ~/.claude/settings.json。

远程服务器一定要配代理吗?不一定。服务器所在地区在支持名单里,就可以直接用服务器出口。想知道它在平台眼里是什么类型,先用上面的脚本在服务器上测一次。

WSL 开了 mirrored,还需要设变量吗?需要。mirrored 只是让 127.0.0.1 能连到 Windows,Claude Code 仍然只看变量。开了 autoProxy=true 的,先用 env | grep -i proxy 确认有没有自动设上。

Anthropic 的条款要求在支持的地区使用。人不在支持地区而绕过限制使用的账号,可能被限制或停用,请自行判断。

相关:Claude Code 出口检测 · Claude 专项检测 · 终端为什么在直连 · Claude Code 报 403 怎么排查 · 住宅 IP 和机房 IP 的区别

想知道你自己的 IP 属于哪一类?

检测我的终端走哪个出口