4.3 KiB
4.3 KiB
OKX GFW / proxy 架构真相 (2026-08-31 实测)
触发场景: 在国内 VPS 上跑 OKX API (ccxt / raw REST) → 用户问"需要走代理吗 / 有国内节点吗"。
结论先说:
| 项 | 值 |
|---|---|
| OKX 有"国内节点"吗? | ❌ 没有 |
| OKX 官方要求代理吗? | ❌ 不要求 |
| 直连国内 VPS 为啥不通? | ✅ 中国 GFW 屏蔽 (DNS 劫持) |
| 必须用代理吗? | ✅ 私有 API 必须,公开 API 可不必须 |
🔬 实测证据 (2026-08-31)
测试 1: DNS 解析
$ getent hosts www.okx.com
169.254.0.2 awscn.okpool.top www.okx.com
$ dig @114.114.114.114 www.okx.com +short
169.254.0.2
$ dig @8.8.8.8 www.okx.com +short
awscn.okpool.top.
169.254.0.2
真相: www.okx.com → CNAME awscn.okpool.top (AWS 中国 CDN) → IP 169.254.0.2 (link-local, 不可路由)。
169.254.x.x 是 APIPA (Automatic Private IP Addressing) 保留地址,正常网络不会分配 — GFW 把 okx.com 的 DNS 解析劫持到不可路由的 IP,从而"屏蔽"。
测试 2: 直连端口
$ timeout 5 bash -c "echo > /dev/tcp/www.okx.com/443"
bash: connect: No route to host
直连 443 不通 — 跟 DNS 劫持一致。
测试 3: 走 127.0.0.1:7890 代理
$ curl --proxy 127.0.0.1:7890 https://www.okx.com/api/v5/public/time
{"code":"0","data":[{"ts":"1788136727384"}],"msg":""}
✅ 走代理正常返回。
测试 4: 公开 API vs 私有 API 区分
| 端点 | 类型 | 是否需要代理 |
|---|---|---|
/api/v5/public/time |
公开 | 可不必须 (但 VPS 网络阻塞, 实测仍需) |
/api/v5/market/tickers |
公开行情 | 同上 |
/api/v5/account/balance |
私有账户 | ✅ 必须 (API key IP 白名单 + GFW) |
/api/v5/trade/order |
私有交易 | ✅ 必须 |
/api/v5/account/positions |
私有持仓 | ✅ 必须 |
🛠 实战坑
坑 1: ccxt 默认 trust_env=False
症状: 即使 shell 设置了 HTTPS_PROXY=http://127.0.0.1:7890,ccxt 不自动捡 (因为 session.trust_env=False)。
正解 (二选一):
# A. 显式传 proxies (推荐)
import ccxt
ex = ccxt.okx({
'apiKey': key, 'secret': sec, 'password': pwd,
'proxies': {'http':'http://127.0.0.1:7890','https':'http://127.0.0.1:7890'},
'options': {'defaultType':'swap'},
})
# B. 让 ccxt 捡 shell env (代码里强制 trust_env)
import ccxt
ex = ccxt.okx({...})
ex.session.trust_env = True # ccxt 默认 False
坑 2: 误以为 "curl 直连 OKX 返 200 = 直连 OKX"
症状: curl https://www.okx.com/api/v5/public/time 返 200, 我以为直连通了。
真相: curl 自动捡了 shell 的 HTTPS_PROXY=http://127.0.0.1:7890 环境变量, 实际是走代理。验证:
# 显式不走代理 (重置 env)
unset HTTPS_PROXY HTTP_PROXY https_proxy http_proxy
curl --max-time 5 https://www.okx.com/api/v5/public/time
# → curl: (7) Failed to connect... No route to host
坑 3: 国内 VPS 没有 "绕过 GFW 的标准方法"
✅ 可用的解决方案:
| 方案 | 优点 | 缺点 |
|---|---|---|
| 保留 mihomo/clash 代理 | 简单, 现成 | 依赖代理进程 |
| 改 SOCKS5 代理 | 略快 | 仍需代理 |
| VPN 替代代理 | 整网 VPN | 慢 |
| 搬 VPS 到海外 (AWS 东京/新加坡/香港) | 直连即可, 删 proxies 字段 | 贵 (2-3x 价格) |
| 找 OKX "国内节点" | 不存在 | ❌ |
推荐: 国内 VPS 保留代理 (现状); 想砍掉代理依赖 搬 VPS。
坑 4: 验证脚本别写到 cron 里
scripts/okx_proxy_test.sh 是验证脚本 (测直连 vs 走代理 vs ccxt 不同模式),不是 cron。手动跑一次:
bash /home/openclaw/.hermes/scripts/okx_proxy_test.sh
# 输出 4 段测试结果 + 结论
📋 一句话总结
- 国内 VPS 上跑 OKX 必须代理 (不是因为 OKX 限制, 是因为 GFW 屏蔽)
- 公开 API 直连可能因 VPS 网络也能跑 (走 SSH 出口 IP), 但私有 API 必 proxy
- 不要轻信 "curl 返 200 = 直连" — 检查 env 是否设了 HTTPS_PROXY
关联
~/.hermes/skills/trading/okx-auto-position/SKILL.mdv4.5.66 提到 "proxy 必须保留", 本 reference 给出为什么必须保留的根因 (GFW 屏蔽, 不是 OKX 限制)~/.hermes/scripts/okx_proxy_test.sh— 实测脚本references/v4.5.66-2026-08-26-drop-low-rating-and-proxy-modes.md— v4.5.66 已提到 proxy 必要性