通过使用Cloudflare Warp来解决OpenAI和NewBing针对VPS的IP封锁

摘要

本文介绍了为了解决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 是 Cloud­flare 提供的一项基于 Wire­Guard 的网络流量安全及加速服务,能够让你通过连接到 Cloud­flare 的边缘节点实现隐私保护及链路优化。 其连接入口为双栈 (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网络。所以这也是我一开始就选择使用的方案。

操作步骤

我本人使用的VPS系统版本为Debian 11 x64 (bullseye),地区在日本东京,支持IPv4/IPv6双栈网络,其他VPS请参照执行。

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 Wire­Guard 网络接口模式(简称:WG 模式),是指通过第三方 WARP 工具 (ViRb3/wgcf) 所生成的通用 Wire­Guard 配置文件创建名称为 wgcf 的 Wire­Guard 网络接口的方式去连接 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;
  • 可能是因为全局流量太大,运行一段时间后Wire­Guard会莫名其妙自行关闭,需要手动重启。
  • 由于接管全局流量,会和Xray产生某种冲突,直接导致Xray失效。

Plan E:WireGuard路由标记分流(适用于解锁ChatGPT)

在反复手动重启了几次之后实在蚌埠住了,于是重新读了一遍项目文档,于是看到了这个方法:

WARP Wire­Guard 双栈非全局网络,由双栈全局网络接口模式衍生而来,是指添加 WARP Wire­Guard 双栈网络接口并通过路由规则实现在已有 IP 栈的情况下不主动接管原有网络的一种方案。此模式下可通过指定网络接口 IP 、名称 (wgcf) 或设置路由标记 (51888) 的方式去走 WARP Wire­Guard 网络,用于分流,实现出站流量的可控性。

这样一来就可以指定让我想要走的站点走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客户端失效的情况,但是次数不多,重启一下就好了。

结语

折腾了太长时间,差不多得了,暂时不想再动这傻逼玩意了。

参考与引用

  1. Cloudflare WARP 一键安装脚本 使用教程 – P3TERX ZONE
  2. 解决vps访问chatgpt时1020或429错误的终极解决方案突破openai限流 – WMW tech (watermelonwater.tech)
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇