最近 Reddit 有一篇关于 Claude Code 的爆料,核心说的是:从 2.1.91 版本起,Claude Code 在检测到你启用代理时,会额外做一组环境判断。
据那篇爆料,它主要做两件事:
- 查系统时区,看是不是
Asia/Shanghai或Asia/Urumqi; - 查代理 URL,判断是否指向中国域名、是否命中某个域名清单、是否跟中国 AI 实验室相关。
更让人在意的是回传方式。爆料称它不是明着把这些字段作为普通日志上报,而是把判断结果“藏”进系统提示词里:比如把日期从 2026-06-30 改成 2026/06/30,再用几个长得几乎一样、肉眼很难分辨的 Unicode 撇号去编码不同组合,例如 ' / ʼ / ʹ,对应“中国时区 / 中国代理 / AI Lab 关联”等状态。
发帖人还说,相关逻辑在二进制里做了 XOR 混淆,更新日志里也没有提到这项变化。
本文给一个干净的技术方案:把 Claude Code 关进沙箱跑,并在沙箱里控制时区,让它采集不到你的真实时区。
不过先提醒:最好是账户注册 IP、日常使用 IP、时区都一致来最小化特征。
思路
用 Docker 官方的 Sandboxes(sbx) 在隔离 microVM 里跑 agent。每个沙箱有独立的文件系统、网络和基础镜像,碰不到宿主机。关键点有两个:
- 沙箱基础镜像本身不是中国时区;
- 你再注入一个干净的
TZ,Claude 无论从哪儿读,都拿不到Asia/Shanghai。
1. 安装 sbx
前置要求见 Docker 官方文档:
https://docs.docker.com/ai/sandboxes/
macOS:
brew install docker/tap/sbx
sbx loginWindows:
winget install -h Docker.sbx
sbx loginLinux(Ubuntu):
curl -fsSL https://get.docker.com | sudo REPO_ONLY=1 sh
sudo apt-get install docker-sbx
sudo usermod -aG kvm $USER
newgrp kvm
sbx login安装完成后确认命令可用:
sbx --help2. 启动 Claude(带上时区)
进项目目录,设好时区再跑:
cd ~/{xxx-project} && export TZ=America/Los_Angeles && sbx run claude时区按需替换。常用哪个时区,就把 TZ 设成对应的 IANA timezone。
常见 IANA timezone 示例:
export TZ=America/Los_Angeles
export TZ=America/New_York
export TZ=Europe/London
export TZ=Asia/Tokyo3. 推荐:指定 sandbox 名称
为了后面验证方便,可以显式指定 sandbox 名称:
cd ~/{xxx-project} && export TZ=America/Los_Angeles && sbx run --name claude-{xxx-project} claude后续验证命令里的 claude-{xxx-project} 就用这个名字。
如果你没有指定名称,可以用 claude。
查看当前正在运行的 sandbox:
sbx ls4. 注意:直接 export TZ && claude 不生效
在宿主机上直接执行:
export TZ=America/Los_Angeles && claude这个方式不好使。
实测 Claude 这种情况下读到的仍是系统时区。宿主机系统时区如果还是 Asia/Shanghai,光设环境变量盖不住,它“不认”你临时 export 的这个变量。
沙箱能生效,是因为镜像默认是 UTC 时区,但是运行时会带入你的宿主机时区,所以可以通过修改修改环境变量来影响 sendbox 容器生成时带入的环境变量,来修改掉时区。这是宿主机直接 export 做不到的。
5. 验证时区已生效
容器跑起来后,查 Claude 进程的环境变量,确认 TZ 注入成功:
sbx exec -it claude-{xxx-project} sh -c 'pid=$(ps -ef | awk '\''$8=="claude"{print $2; exit}'\''); [ -n "$pid" ] || { echo "claude pid not found" >&2; exit 1; }; tr "\0" "\n" < "/proc/$pid/environ" | grep "^TZ="'{xxx-project} 换成你的项目名或实际 sandbox 名称。
输出里出现:
TZ=America/Los_Angeles即为成功。
如果你设置的是其他时区,输出应该对应你的设置,例如:
TZ=Europe/London6. 没看到 TZ 怎么排查
先查 sandbox 名称:
sbx ls然后确认 Claude 进程是否存在:
sbx exec -it claude-{xxx-project} sh -c 'ps -ef | grep claude'再进入 sandbox 看环境:
sbx exec -it claude-{xxx-project} sh
ps -ef # 找Claude对应的pid
cat /proc/{claude pid}/environ # 找其中的TZ=xxx环境变量是否是设定的值常见原因:
export TZ=...没有放在sbx run claude之前;sbx exec里的 sandbox 名称写错;- Claude 进程还没启动成功;
- 你启动的是另一个 sandbox。
7. 停止和删除 sandbox
停止:
sbx stop claude-{xxx-project}删除:
sbx rm claude-{xxx-project}总结命令
最小启动:
cd ~/{xxx-project} && export TZ=America/Los_Angeles && sbx run claude推荐启动:
cd ~/{xxx-project} && export TZ=America/Los_Angeles && sbx run --name claude-{xxx-project} claude验证:
sbx exec -it claude-{xxx-project} sh -c 'pid=$(ps -ef | awk '\''$8=="claude"{print $2; exit}'\''); [ -n "$pid" ] || { echo "claude pid not found" >&2; exit 1; }; tr "\0" "\n" < "/proc/$pid/environ" | grep "^TZ="'看到:
TZ=America/Los_Angeles就代表设置成功。
如果账号还是一直被封
上面这套方案解决的是 Claude Code 本地运行环境和时区指纹问题,但它不能解决账号注册、支付方式、地区限制、风控封号等问题。
如果你已经被 Claude / OpenAI 账号反复封禁,或者不想把开发流程一直绑在不稳定的官方账号上,可以考虑使用 YYLX.IO 鱼鱼连线 AI 中转站。通过中转站接入 Claude Code、Codex、ChatGPT 兼容客户端等工具,可以减少账号和支付带来的折腾,把精力放回开发本身。

发表回复