摘要
本文介绍了为了解决OpenAI和NewBing针对VPS的IP封锁而采用的各种方案。本文首先分析了OpenAI和NewBing的封锁方式和原因,然后介绍了通过使用Cloudflare WARP来绕过封锁的原理和方法。本文尝试了多种基于WARP的方案,包括WARP Client&Socks5代理模式、WARP WireGuard网络接口模式、WARP WireGuard路由标记分流模式等,并对每种方案的效果进行了评估。最后,本文给出了综合Plan A和Plan E的最终解决方案,并分享了相关的项目地址和操作步骤。
关键词
Cloudflare Warp;Wgcf;WireGuard;Socks5
引言
从2023年3月开始,openai就开始针对一系列常用VPS厂商的IP段进行大规模封禁,以杜绝通过VPS搭建的VPN来访问chatgpt,newbing等GPT服务的可能性。我自己的VPS在4月4号也成功寄掉:
好消息是我注册的两个账号都还活着,这只要说明找到办法绕开openai的ip封锁,我仍然有可能继续使用gpt,于是就开始了一系列的各种尝试……
Cloudflare Warp
WARP 是 Cloudflare 提供的一项基于 WireGuard 的网络流量安全及加速服务,能够让你通过连接到 Cloudflare 的边缘节点实现隐私保护及链路优化。 其连接入口为双栈 (IPv4/IPv6),因此单栈服务器可以连接到 WARP 来获取额外的网络连通性支持。
由于一些不言而喻一目了然的原因,WARP并不在中国大陆地区和香港地区提供服务,但是针对我在境外的VPS而言,则不受此限制的影响。
使用Warp接管VPS出站流量之后,openai检测到的ip地址就会成为cloudflare自己的ip地址(地区视VPS所在地区而定),而openai本身用的又是cloudflare的IP检测服务。因此这一条方案看起来是可行的。
下文将逐一介绍我尝试过的所有方法,如果想直奔主题可以看Plan F即最终方案。
Plan A:Warp Client&Socks5代理模式(适用于解锁NewBing)
Newbing针对IP的封锁方式是强行将页面重定向回cn.bing.com,但是由于我在浏览器里禁用了他的cookie,最后的结果就是重定向次数过多导致网页崩溃。本来想着ChatGPT寄了还有新必应作备用,但是两个一起寄了,我就不得不开始考虑着手修正了。
早在2021年6月,Cloudflare就发布了适用于Linux系统的Warp Client客户端,客户端的Proxy Mode功能可以让应用通过本地的SOCKS5代理端口去直接使用WARP网络。所以这也是我一开始就选择使用的方案。
操作步骤
Plan A,D,E,F使用的项目地址:
根据多次试错和重装之后,现在确定稳定使用的操作步骤如下:
安装
1.运行以下脚本进行自动配置代理:
bash <(curl -fsSL git.io/warp.sh) s5
此脚本会自动安装 WARP 官方客户端并开启 SOCKS5 代理端口 (127.0.0.1:40000
)
2.vim /etc/v2ray/config.json
,修改Xray配置文件来添加出口规则(记得备份源文件来回档):
{
"log": {
......
},
"inbounds": [
......
],
"outbounds": [
......
// 设置出站规则:SOCKS5代理WARP官方客户端
{
"tag": "socks5-warp",
"protocol": "socks",
"settings": {
"servers": [
{
"address": "127.0.0.1",
"port": 40000
}
],
"domainStrategy": "UseIP"
}
},
......
],
"routing": {
"domainStrategy": "AsIs",
"domainMatcher": "mph",
// 设置代理规则
"rules": [
......
// 网站分流。指定网站走 WARP
{
"domain": [
"openai.com",
"bing.com"
],
"outboundTag": "socks5-warp",
"type": "field"
},
......
]
},
"dns": {
......
}
}
卸载
1.运行以下脚本自动卸载:
bash <(curl -fsSL git.io/warp.sh) uninstall
2.使用备份的config.json文件回档。
效果评估
刚一开始确实Newbing和ChatGPT都能正常使用了,但是一段时间后ChatGPT仍然会出现进的去页面但不加载任何内容的情况出现。F12查看控制台发现了出现了ERROR 429错误。查了一下发现可能是cloudflare的ip地址使用人数过多导致请求溢出,openai临时限制了此ip的访问。
于是经过了一段Newbing使用完全正常,但是ChatGPT能不能上完全看脸的时期。
Plan B:针对出现ERROR429的WARP IP进行屏蔽(仅记录,未采用)
有那么一周恰好没有429错误上的去ChatGPT,赶着那会要交近纲的小组实践作业,于是氪了ChatGPT Plus,然而这一周过了又寄了。本着钱不能白花的心态,于是重新开始折腾起了Warp。
Plan B使用的项目地址:
由于warp的客户端是自动分配ip地址的,所以大部分用户首先会被分配到的ip地址就一样成为了openai的封杀对象。所以理论上只要屏蔽了这个初次分配到的ip地址,切换到不常用的,也许就可以解决问题。
操作步骤
1.确保VPS已经正常安装和配置了docker。
2.运行以下脚本创建一个docker:
docker run -d --name warp --network host -e myip="需要屏蔽的ip" galtjay/warp:v2
3.运行以下命令检查效果:
curl https://chat.openai.com/cdn-cgi/trace --proxy socks5://127.0.0.1:40000
效果评估
我的VPS初次分配到的ip是104.28.211.105,进行屏蔽之后重新分配了104.28.243.105,用了一个上午,然后下午又寄了。
由于项目文档里没写需要屏蔽多个ip要怎么填引号里的内容,我尝试开了两个docker分别进行屏蔽,发现并没有什么用,于是在原项目下开了一个issue:
关于屏蔽多个IP的问题 · Issue #1 · galtjay/warpforvps (github.com)
作者效率很快,现在已经更新了屏蔽多个ip的功能,具体操作可以参照项目里的说明。
但是我最后并没有采用这种方案,原因有以下几点:
- 可能是VPS在日本没多少可用ipv4的原因,他分配到的ipv4地址始终就只有上面提到的两个,也许其他地区的VPS会好一点,但是ipv4就这么几个,一直屏蔽迟早有被封完的一天,治标不治本;
- WireGuard似乎和Docker存在某种冲突;
Plan C:使用Windows端的Cloudflare Warp客户端接管流量(仅记录,未采用)
转念一想,我干嘛非要总是纠结在通过VPS来走Warp,在PC端直接走没准也行呢?
于是安装了Warp的Windows客户端(在官网可以下载到),启动流量接管,哎,成了,能登上ChatGPT了,看一下IP地址,是在美国Cloudflare服务器的ipv6地址。
但是这个客户端的代理模式有点问题,它默认是全局接管的,不能接管特定网址,这会导致某些不需要Warp的网址变得非常卡(比如谷歌)。当我试图把他关掉的时候因为地区瞬间从美国切换到了日本,还触发了谷歌的账号保护机制。
除此之外,挂了这客户端会使得基于P2P的远程串流软件(比如我常用的Parsec)直接寄掉,出现6023配对错误,就这一点就代表这种方案不可能成为一种可行的常驻方案,只能作为一种紧急备用方案。
Plan D:WARP WireGuard网络接口模式(仅记录,未采用)
转了一圈,我把目标重新转移回Plan A,我只要让Socks5代理走IPv6,那么不就成了吗?
于是我在项目下又贡献了一个issue:
如何让通过SOCKS5-WARP代理时直接走ipv6 · Issue #103 · P3TERX/warp.sh (github.com)
经过一番探讨之后发现似乎没有办法直接让Socks5走ipv6,只能使用WireGuard的方法,但鉴于这玩意和docker冲突,所以Plan B直接作废。
WARP WireGuard 网络接口模式(简称:WG 模式),是指通过第三方 WARP 工具 (ViRb3/wgcf) 所生成的通用 WireGuard 配置文件创建名称为 wgcf 的 WireGuard 网络接口的方式去连接 WARP 网络。按照自己的需求执行以下命令即可,整个过程将自动进行,几种网络状态可自由切换。
操作步骤
1.考虑到我只需要ipv6,所以运行配置ipv6的脚本即可:
bash <(curl -fsSL git.io/warp.sh) 6
2.卸载WARP Client客户端,不走Socks5代理,WireGuard全局接管出口流量。
效果评估
现在可以看到登录ChatGPT用的也是IPv6了,但是和Windows客户端一样他依然是全局接管所有站点的。唯一的区别是ipv6所属的是在日本东京的cloud flare服务器,和VPS归属地一致。而且这样一来Parsec也可以直接用了,P2P不再会被拦截。
但是这种方法依然存在问题:
- 和Plan C一样,访问部分网站延迟巨大,在测试时ping谷歌一度达到了80000ms;
- 可能是因为全局流量太大,运行一段时间后WireGuard会莫名其妙自行关闭,需要手动重启。
- 由于接管全局流量,会和Xray产生某种冲突,直接导致Xray失效。
Plan E:WireGuard路由标记分流(适用于解锁ChatGPT)
在反复手动重启了几次之后实在蚌埠住了,于是重新读了一遍项目文档,于是看到了这个方法:
WARP WireGuard 双栈非全局网络,由双栈全局网络接口模式衍生而来,是指添加 WARP WireGuard 双栈网络接口并通过路由规则实现在已有 IP 栈的情况下不主动接管原有网络的一种方案。此模式下可通过指定网络接口 IP 、名称 (wgcf
) 或设置路由标记 (51888
) 的方式去走 WARP WireGuard 网络,用于分流,实现出站流量的可控性。
这样一来就可以指定让我想要走的站点走Warp,不会影响全局流量,这个方式成为了我最后关闭issue时的解决方案,在采用此方案之后ChatGPT的访问始终正常。
操作步骤
1.先运行这个脚本:
bash <(curl -fsSL git.io/warp.sh) x
2.然后在/etc/v2ray/config.json
里设置出站规则:
{
"log": {
......
},
"inbounds": [
......
],
"outbounds": [
......
// 设置出站规则:WG路由标记
{
"tag": "WARP_out",
"protocol": "freedom",
"streamSettings": {
"sockopt": {
"mark": 51888
}
},
"settings": {
"domainStrategy": "UseIPv6"
}
},
......
],
"routing": {
"domainStrategy": "AsIs",
"domainMatcher": "mph",
// 设置代理规则
"rules": [
......
// 网站分流。指定网站走WARP
{
"domain": [
"openai.com",
"bing.com",
],
"outboundTag": "WARP_out",
"type": "field"
},
......
]
},
"dns": {
......
}
}
效果评估
这个方法从昨天晚上开始一直到今天中午,ChatGPT和NewBing均能正常访问,但是从下午开始,NewBing又开始抽风了试图重定向回中国,但是ChatGPT却还是正常访问的。因为之前用Socks代理必应几个月都没炸,于是尝试考虑将Plan A重新安回来并且只代理新必应。事实证明这两种方案完全可以共存,于是有了最后的Plan F。
Plan F:综合Plan A和Plan E的最终解决方案
经过上文的分析,Plan A只针对Newbing有效,Plan E只针对ChatGPT有效,在验证这两种方法的共存可能性之后,得出了以下最终的操作步骤:
操作步骤
1.依次运行以下脚本配置WARP客户端,SOCKS5代理端口和WireGuard路由标记风流:
bash <(curl -fsSL git.io/warp.sh) s5
bash <(curl -fsSL git.io/warp.sh) x
2.在/etc/v2ray/config.json
里设置出站规则:
{
"log": {
......
},
"inbounds": [
......
],
"outbounds": [
......
// 设置出站规则:WG路由标记
{
"tag": "WARP_out",
"protocol": "freedom",
"streamSettings": {
"sockopt": {
"mark": 51888
}
},
"settings": {
"domainStrategy": "UseIPv6"
}
},
// 设置出站规则:SOCKS5代理WARP官方客户端
{
"tag": "socks5-warp",
"protocol": "socks",
"settings": {
"servers": [
{
"address": "127.0.0.1",
"port": 40000
}
],
"domainStrategy": "UseIPv6"
}
},
......
],
"routing": {
"domainStrategy": "AsIs",
"domainMatcher": "mph",
// 设置代理规则
"rules": [
......
// 网站分流。Newbing走WARP
{
"domain": [
"bing.com"
],
"outboundTag": "socks5-warp",
"type": "field"
},
// 网站分流。ChatGPT走WARP
{
"domain": [
"openai.com"
],
"outboundTag": "WARP_out",
"type": "field"
},
......
]
},
"dns": {
......
}
}
效果评估
截止本文写作为止,一切运行正常。
20230906追加:偶尔还是会出现socks客户端失效的情况,但是次数不多,重启一下就好了。
结语
折腾了太长时间,差不多得了,暂时不想再动这傻逼玩意了。