开篇
为了防止 claude code/codex 检测出与大陆相关的信息,我购买了 iPhone 备用机、Mac Mini ,并且将它们设置成:
- 语言为英文
- 美国时区(与科学上网 IP 的地区的时区相同)
- 不开通位置权限
- 只连科学上网的 WIFI
这虽然有过度谨慎的嫌疑,但“小心驶得万年船”嘛。
必备硬件
a. 银行卡
可以支付外币的 VISA/MasterCard 银行卡(信用卡、借记卡都可以),没有的话用招商银行 APP 就可以申请到。
b. 备用手机
我选择了用 iPhone ,Android 手机同理(具体版本我没有研究)。
claude 和 chatgpt 这两个 app 要求 iOS 最低版本是 iOS17.0, 这需要 iPhone 至少是这些:
- iPhone XR
- iPhone XS, XS Max
- iPhone 11 及以上
- iPhone SE (第二代及之后)
我在某鱼上买了个 iPhone SE 2 代 64G 全原机¥500 。
c. 开发机
我选择了使用 Mac Mini 。
科学上网
按通常的说法,要使用住宅 IP 。方法略。
备用机
如果没有单独的开发机,我估计使用 macOS 虚拟机也可以。推荐使用 VirtualBuddy 安装 macOS 虚拟机。
注意!!!以下操作请在备用机(或虚拟机)中进行。
电话卡
到这里买一张 gg 卡, 按这个教程去激活。根据下面的保号教程可以用 20 年了。在 gg 的官网注册时,使用常用的 email 地址即可。
身份
到https://www.google.com/ai 用以下提示语生成一个身份,并保存下来。
请帮我生成一个 24 岁白人男子的姓名、通讯地址(使用免税州的)、出生日期、可以注册的 gmail 地址,注意:他的职业为程序员,通讯地址在 google map 中需要可以查到。
邮箱
到https://mail.google.com注册 gmail 。
appleid
在 iPhone 上登录 apple 账户,使用 gmail 创建 apple id 。
礼品卡
使用礼品卡订阅的方式可以阻断 Claude 获取付款信息。
到这里购买礼品卡,注意“Recipient Email Address”填上面注册的 gmail 。
订阅
在 iPhone 上安装 Claude ,使用 gmail 注册账号,然后订阅 Claude 。
使用 Claude Code
在开发机上安装 claude-code ,并且每次启动 claude code 前先检查是否连接了科学上网,我的做法是:
在 $PATH 路径中 “/opt/homebrew/bin” 前面的目录下(比如 ~/.local/bin),将以下 bash 脚本保存为 'claude' 文件,并 chmod +x 权限。注意修改其中的 IP 'x.x.x.x' 为你的科学上网 IP 。
#!/bin/bash
check_ip() {
# Ensure a target IP was passed as an argument
if [[ -z "$1" ]]; then
echo "[Error] Please provide a target IP. Usage: check_ip <IP>" >&2
return 1
fi
local TARGET_IP="$1"
# Fetch public IP using ipconfig.sh with a 5-second timeout
local CURRENT_IP
CURRENT_IP=$(curl -s --max-time 5 https://ipconfig.sh | tr -d '[:space:]')
# Check if IP was successfully retrieved
if [[ -z "$CURRENT_IP" ]]; then
echo "[Error] Could not fetch public IP. Please check your connection!" >&2
return 1
fi
# Compare IPs
if [[ "$CURRENT_IP" == "$TARGET_IP" ]]; then
return 0
else
echo "[Alert] IP mismatch! Expected: $TARGET_IP. Launch denied." >&2
return 1
fi
}
# 包装后的 claude 启动命令
claude_start() {
# 直接使用 if 判断函数的执行状态码( 0 为真,非 0 为假)
if check_ip "x.x.x.x"; then
# 只有在 check_ip 成功(返回 0 )时,才会执行到这里
/opt/homebrew/bin/claude
return 0
else
# check_ip 失败(返回 1 )时,走这里
echo "[Error] Could not launch claude" >&2
return 1
fi
}
# 执行启动函数
claude_start
电话卡保号
参照这个教程 每 6 个月内保号一次。
