使用 Cloudflare WARP 作为 V2Ray/Shadowsocks 出站(落地)连接
前言
OpenAI is not available in your country
ChatGPT 最近很火,但不幸地是 OpenAI 屏蔽了中国地区和常见数据中心 IP 来源。这意味着,如果你在国内,想要使用 ChatGPT,除了需要一张外币信用卡/借记卡,还需要一个可以访问 OpenAI 的代理 IP。WARP 是 Cloudflare 提供的免费 VPN 服务,基于 WireGuard 协议,VPN 对端为启用了 anycast 的 Cloudflare CDN。WARP 的 IP 不在一些服务商的黑名单内,所以可以借助 WARP 来正常访问 ChatGPT 和 OpenAI 相关接口,以及其他流媒体服务(以解锁本地内容的版权限制),比如 Netflix、Hulu、Disney+。
配置
一般来说我们无法在中国境内使用 WARP,但可以使用自有的境外 VPS 将代理流量路由至 WARP。基本思路是:将 WireGuard 的 Cloudflare WARP “转换”为 Socks5 协议,作为 V2Ray/Shadowsocks 的出站连接。
WARP 提供了官方的 Linux Client,内置了 proxy mode
,可以将 WARP 转换为 Socks5 代理。但这个 Socks5 代理只能 bind 在 localhost
,对于跑在 docker 里的 V2Ray/Shadowsocks 来说,无法直接使用。我们可以使用 socat
或 rinetd
建立一条本地的端口转发,具体过程略。
一些基于旧版内核的系统无法安装 warp 官方 Linux 客户端,例如 Oracle Linux 或者 RHEL。 Github - Mon-ius/Docker-Warp-Socks 是基于 ubuntu:22.04
base image 构建的一个内置 WireGuard 和 warp-cli 的容器,可以直接下载使用,不会弄脏宿主机。
香港地区是无法使用 warp-cli 创建的 WireGuard 配置连接的,必须使用官方的 Linux 客户端。
1 | # 注册设备 |
Shadowsocks 并不能像 V2Ray 那样 chaining,而 V2Ray 本身支持 Shadowsocks 协议,所以只需将 Shadowsocks 配置为 inbound object 即可,无需单独运行一个实例。
入站部分配置如下:
1 | "inbounds": [ |
V2Ray 默认使用第一条 outbound 作为出站路由,因此无需打 tag 也可正常使用。出站部分配置如下:
1 | "outbounds": [ |
至此配置完成,拓扑如下:
1 | Client <-- SS/V2Ray --> VPS <-- WARP --> Cloudflare Edge <--> Internet |
优化
docker 网络默认是 bridge mode,将所有容器接在 docker0
的 L2 bridge 下,通过宿主机 NAT 访问外部网络。可以将 v2ray 容器运行在 host mode,这样 outbound address 可以直接使用 127.0.0.1,无需配置额外的端口转发。
检测 WARP 是否成功启用
访问任意托管在 Cloudflare CDN 下的网站的 /cdn-cgi/trace
路径,例如 https://1.1.1.1/cdn-cgi/trace
,可以获得如下格式信息:
1 | fl=Cloudflare WebServer Instance |
如果 WARP 字段数值为 on
,则说明 WARP 已经成功启用。如果为 plus
,则说明当前使用的是 WARP+ 或者 Zero Trust 团队版账号。