sing-box 分流 WARP 出口访问 ChatGPT:告别 Cloudflare 验证

八月 26, 2026 更新: 八月 31, 2026 [网络与安全] #cloudflare #sing-box #proxy

现象

自己 VPS(机房 IP)上跑 sing-box 代理,访问 ChatGPT 时经常弹出 Cloudflare 的"确认你是真人"验证页(Turnstile)。换不同节点偶有缓解,但始终频繁。

原因

ChatGPT 背后是 Cloudflare 的 WAF + DDoS 防护。Cloudflare 会对每个访问 IP 评估信誉度,而 VPS 的机房 IP(ASN 类型为 Hosting/Data Center)天然处于低信誉档:

所以对 Cloudflare 来说,机房 IP 访问 ChatGPT ≈ 疑似机器人 → 弹验证。

思路:让 ChatGPT 流量走 WARP 出口

与其反复换 VPS 的 IP(不一定干净,还可能收费),不如用 Cloudflare 官方的 WARP 作为 ChatGPT 流量的出口。

WARP 是 Cloudflare 官方出品的网络客户端(本质是基于 WireGuard 协议的隧道),它的出口 IP 由 Cloudflare 管理,信誉度远高于普通机房 IP。社区普遍反馈:WARP 出口访问 ChatGPT 基本不弹验证。

关键决策:不要把整个 VPS 全局走 WARP(会连带 SSH、更新、其他服务全部改出口,还容易踩路由循环),而是把 WARP 注册成 sing-box 的一个 wireguard outbound,只让 OpenAI 相关域名走它。

客户端 → sing-box(VPS)
          ├── direct ─────────→ VPS 原生 IP(其余流量)
          └── wireguard:warp ─→ Cloudflare WARP → ChatGPT(openai.com 等)

澄清:不是 cloudflared,也不是 warp-cli 全局

先区分三个容易混淆的东西:

程序方向用途
cloudflared入站Cloudflare Tunnel,把外部请求带进你的服务器(反向代理)
warp-cli出站全局系统级客户端,默认把整台机器的流量都走 WARP
WARP WireGuard 参数出站按需直接把 WARP 当作一个 WireGuard 端点,由 sing-box 按规则选用

前两种都不适合"只让 ChatGPT 流量走 WARP"这个目标。我们只需要拿到 WARP 的 WireGuard 连接参数,交给 sing-box 即可。

第一步:用 wgcf 注册,拿到 WireGuard 参数

WARP 底层就是 WireGuard,但参数不能随便编:private_key、local_address(WARP 分配的 172.16.x.x / fd01:5ca1:ab1e 段)、peer_public_key(WARP 服务端公钥)、reserved(WARP 特有字段)都来自 Cloudflare 的注册流程。

社区标准做法是用 wgcf 模拟注册,在 VPS 上执行:

curl -L -o wgcf https://github.com/ViRb3/wgcf/releases/download/v2.2.22/wgcf_2.2.22_linux_amd64
chmod +x wgcf
./wgcf register --accept-tos   # 生成 wgcf-account.toml
./wgcf generate                # 生成 wgcf-profile.conf
cat wgcf-profile.conf

生成的 wgcf-profile.conf 类似:

[Interface]
PrivateKey = <WARP_PRIVATE_KEY>
Address = 172.16.0.2/32, fd01:5ca1:ab1e:xxxx:xxxx:xxxx:xxxx:xxxx/128
DNS = 1.1.1.1, 2606:4700:4700::1111
MTU = 1280

[Peer]
PublicKey = bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = 162.159.192.1:2408

注意:wgcf-profile.conf 里没有 reserved,但 WARP 的握手必须带 reserved 字段。sing-box 支持配置,生成方法见下文。

第二步:sing-box 配置 WARP outbound

把上面的参数填进 sing-box 的 outbounds(config.json 里):

{
  "outbounds": [
    {
      "type": "direct",
      "tag": "direct"
    },
    {
      "type": "wireguard",
      "tag": "warp",
      "server": "162.159.192.1",
      "server_port": 2408,
      "local_address": [
        "172.16.0.2/32",
        "fd01:5ca1:ab1e:xxxx:xxxx:xxxx:xxxx:xxxx/128"
      ],
      "private_key": "WARP_PRIVATE_KEY",
      "peer_public_key": "bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=",
      "reserved": [0, 0, 0],
      "mtu": 1280
    }
  ]
}

其中:

第三步:路由规则,只让 OpenAI 域名走 WARP

{
  "route": {
    "rules": [
      {
        "domain_suffix": [
          "chatgpt.com",
          "openai.com",
          "oaistatic.com",
          "oaiusercontent.com",
          "auth0.com"
        ],
        "outbound": "warp"
      }
    ]
  }
}

ChatGPT 实际涉及的域名不止 chatgpt.com:登录走 auth.openai.com(auth0),静态资源走 oaistatic.com,图片走 oaiusercontent.com。上面的列表覆盖了主要部分。

改完 config.json 重启 sing-box:

systemctl restart sing-box
journalctl -u sing-box -f   # 看有没有报错

验证

  1. WARP 出口确认:让 sing-box 的 DNS/测试流量走 warp 后,检查出口:
# 在客户端通过代理访问
curl https://www.cloudflare.com/cdn-cgi/trace

输出里 warp=on 说明确实从 WARP 出口出去:

ip=<WARP出口IP>
warp=on
  1. 对比验证频率:分别用 direct 出口和 warp 出口访问 ChatGPT,观察验证页出现频率。多刷新几次、退出登录状态再试,才更接近真实风控场景。

  2. 其余流量不受影响:curl ifconfig.me 看到的应该是 VPS 原生 IP,说明只有 OpenAI 域名走了 WARP。

注意事项

实测更新(2026-08-28):WARP 出口段被 OpenAI 封禁的情况

用官方 cloudflare-warp 客户端(warp-svc + warp-cli mode proxy,SOCKS5 127.0.0.1:40000)在 VPS 上部署后,把 sing-box 的 OpenAI 域名分流指向它。路由规则确认生效(服务端日志 inbound/vless → outbound/socks[warp]),但实测结果是完全打不开:

chatgpt.com        → 403 Unable to load site [IP:104.28.215.69 | Ray ID:...]
openai.com         → 403
auth.openai.com    → 403
platform.openai.com→ 403
api.openai.com     → 403
google.com(对照)   → 200(隧道本身健康)

排查过程摘要:

结论:这属于 OpenAI WAF 对 WARP 出口段(104.28.x.x / 2a09:bacx::)的 IP 级封禁(社区已知现象,WARP 用户访问 ChatGPT 普遍报此错误),与本文"机房低信誉→弹验证"是两个不同的失败模式:

失败模式页面表现WARP 是否有效
IP 信誉低(机房段)频繁弹 Turnstile 真人验证有效,大幅减少验证
IP 被拉黑(WARP 出口段)Unable to load site 自定义错误页无效,换段也没用

经验:部署前先确认目标站点在候选出口上的可用性(curl --socks5-hostname <出口> https://chatgpt.com 看是验证页还是错误页),避免白部署;若 WARP 出口被封,只能换 VPS 商家/机场节点碰运气拿干净 IP,或家庭宽带直连。

总结

机房 IP 访问 ChatGPT 频繁弹 Cloudflare 验证,根因是 IP 信誉,不是账号或浏览器问题。用 wgcf 把 WARP 注册成 WireGuard 参数、在 sing-box 里加一个 wireguard outbound、按域名分流 OpenAI 流量——改动小、不动系统路由,是当前成本最低且有效的方案。如果 WARP 后仍频繁验证,再考虑换原生 IP(ISP 类型)的 VPS 商家,但这是最后一步。注意 2026-08-28 实测补充:WARP 出口段本身可能已被 OpenAI 封禁,部署前务必先验证出口可用性。