解决vps访问chatgpt时1020或429错误的终极解决方案突破openai限流

 转载自:https://watermelonwater.tech/%e8%a7%a3%e5%86%b3vps%e8%ae%bf%e9%97%aechatgpt%e6%97%b61020%e6%88%96429%e9%94%99%e8%af%af%e7%9a%84%e7%bb%88%e6%9e%81%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88%e7%aa%81%e7%a0%b4openai%e9%99%90%e6%b5%81/


2023年9月25日更新: chatgpt 403错误解决思路。

最近两天发现chatgpt的历史会话load error,同时也无法正常使用。查看错误发现不是1020或是429,而是整体变成了403的错误。

经过简单的定位,还是IP地址本身的问题,同时发现之前切换IP的功能失效了,经过定位是myip.ipip.net这个网址对于脚本的访问进行了防护。

因此进行更新:
1. 将myip.ipip.net替换为https://chat.openai.com/cdn-cgi/trace
2. 给大家重新打包了一个容器。galtjay/warp:v3

启动的方式未发生变化,大家之前的假如使用有问题,直接进行将v2换成v3即可。

2023年6月9日更新:

有用户需要同时屏蔽多个IP,因此在原有的基础上增加了多个IP屏蔽的功能。
在传递环境变量的时候传递多个IP即可,myip="104.28.245.199,104.28.222.43",逗号分隔。

本人使用了这个方案之后,一周内没有发生过chatgpt的网络相关的问题,所以方案的可行性应该是很高的,希望能帮到大家。
github及dockerhub均已更新,直接使用即可。

2023年6月2日更新:

今天对于整体方案做了一下小的优化:
1. checkip 脚本中加了--accept-tos的参数
2. 将切换的频率进行了降低,我测试发现,warp切换频率过高的话,IP整个就不变了。

新增一个测试页面,方便大家在本地验证目前访问的IP:
https://chat.openai.com/cdn-cgi/trace


同时思路进行改变,之前的想法是锁住可以访问的IP,这次变更为排除不能访问的IP。
当我们使用warp时,90%的概率会被分配到某个指定的IP,我们只需要把这个IP直接排除掉就好了。
原文也已经重新修改。

原文:

本人前期已经写了两篇文章,阐述了如何在vps侧套warp,从而解决chatgpt被禁止访问或者限流的问题。从后台的数据来看,访问量很大,说明很多人遇到了类似的问题。

但是之前的那两篇文章没有彻底,或者说自动化的解决掉429的错误。因此在之前的方案上,补充轮询和锁定可靠节点的能力就比较重要了。话不多说,为了让大家一把梭,还是基于docker去做。

整体思路的详解

根据我对于warp的实际使用经验来说,当你连接warp的时候,大多数情况下,初次分配的IP都会遇到429的错误。我们可以透过手动断连、重连实现IP的切换,并且同步的去验证是否解除了429。

warp-cli disconnect && sleep 3 &&warp-cli connect && sleep 3&& export ALL_PROXY=socks5://127.0.0.1:40000 && curl myip.ipip.net


比如我们上边看到的这个104.28.222.43IP,是会遇到429的。

透过重复的断连切换,最终我们发现104.28.222.46这个IP,它是不存在429的情况。

因此我们只需要写个脚本,把最常用的那个IP进行排除即可:只要发现连接了104.28.222.43这个IP,直接进行切换。


脚本:脚本会按照10分钟的频率去进行ip的监测,确保符合期望状态。


#!/bin/bash
# myip在容器运行时进行传递,这个ip就是你想要排除的ip
sleep 5
ip=$myip
while true
ipnow=`export ALL_PROXY=socks5://127.0.0.1:40000 && curl https://chat.openai.com/cdn-cgi/trace | grep -oE '\b([0-9]{1,3}\.){3}[0-9]{1,3}\b'`
echo "current ip is "$ipnow "excluded ip is" $ip >> /var/log/warp.log
do
  if [ -z "$ip" ]; then
    echo "IP address is not set" >> /var/log/warp.log
    break
  elif [[ "$ipnow" !=  "$ip" ]]; then
    echo "IP address meets the expected state,sleep 10 mins" >> /var/log/warp.log
    sleep 600
  else
    echo "Start to change ip address" >> /var/log/warp.log
    warp-cli --accept-tos disconnect
    sleep 10
    warp-cli --accept-tos connect
    sleep 10
  fi
done

随后我们结合之前的思路对于Dockerfile进行变更,在启动脚本中加入监测脚本,并透过环境变量传递我们需要的ip即可。下边是容器的启动脚本

#!/bin/bash
supervisord
sleep 5
warp-cli --accept-tos register
warp-cli --accept-tos  set-mode proxy
warp-cli  --accept-tos connect
nohup ./checkip.sh  &
tail -f /var/log/warp.log

Dockerfile的内容:

FROM ubuntu:22.10
LABEL mantainer="galtjay<galtjay@foxmail.com>"
#下边这一行主要是完成supervisor和cloudflare-warp的安装
RUN apt update && apt install -y curl gpg supervisor && curl https://pkg.cloudflareclient.com/pubkey.gpg |  gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg && echo "deb [arch=amd64 signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ jammy main" |  tee /etc/apt/sources.list.d/cloudflare-client.list && apt update && apt install cloudflare-warp -y &&  apt-get clean
#生成supervisor守护配置文件,原本的warp-svc基于systemd进行管理,docker内部不太好实现,切换成supervisor进行守护。
RUN echo "[program:warp-svc]\ncommand=/bin/bash -c /usr/bin/warp-svc\nautostart=true\nautorestart=true\nstartretries=3\nstderr_logfile=/var/log/warp.log\nstdout_logfile=/var/log/warp.log\n" > /etc/supervisor/conf.d/warp.conf
#生成docker启动脚本,输出日志到控制台。每次启动会自动的完成注册,切换模式。假如各位需要嵌入现有的license,此处自行修改。主要修改warp-cli --accept-tos register这条。
COPY init.sh /init.sh
COPY checkip.sh /checkip.sh
RUN chmod +x /init.sh && chmod +x /checkip.sh
#默认暴露40000端口
EXPOSE "40000/tcp"
CMD ["bash","-c","/init.sh"]

github的链接:

https://github.com/galtjay/warpforvps.git

成品docker image url:

docker pull galtjay/warp:v3

TL;DR 废话连篇,其实运行下边这个就可以了

首先 :docker run -d --name warp --network host galtjay/warp:v3

手动验证: chatgpt warp-cli disconnect && sleep 3 &&warp-cli connect && sleep 3&& export ALL_PROXY=socks5://127.0.0.1:40000 && curl https://chat.openai.com/cdn-cgi/trace

找到warp最常分配的那个IP,即可实现对于IP地址进行排除。

How to run: 替换myip成你想要排除的IP即可

docker run -d --name warp --network host -e myip="104.28.222.43,104.28.245.199" galtjay/warp:v3

How to run with docker-compose:注意替换环境变量IP

version: '2'
services:
  warp:
    image: galtjay/warp:v3
    container_name: warp
    network_mode: host
    environment:
        myip: "104.28.222.43,104.28.245.199"


Next Post Previous Post
No Comment
Add Comment
comment url