当你使用你的vps进行上网的时候,是否会发现chatgpt不让你登陆,提示说ip不允许❌访问呢?本文以使用DNS解锁chatgpt为例,阅读此文,或许能解决你的困惑,欢迎收藏以及转发👏

特别鸣谢
感谢开源项目

感谢开源作者无私且毫无保留地奉献,感谢你们让这个时间更加多姿多彩❤️

实战前准备

  你需要有两台Linux机器,并且都拥有root权限,是ubuntu还是centos还是debian区别不大,最好是x86/64架构的(一件安装脚本在该架构测试通过,并为测试arm机器),其中一台A做为客户端,其网络访问不了chatgpt;第二台B做为服务端,其可以访问chatgpt,为机器A做为解锁机来用。请注意,使用本文中的服务会占用你用来解锁服务器机器的53,80以及443端口,请提前放行,并确保没有进程监听这三个端口。

实现原理讲解

  首先,你机器的网络访问不了比如chatgpt这种网站,是因为你的ipv4/v6进入了人家网站的黑名单,所以就把你ban啦,至于为啥会进黑名单,通常可能是因为:

  • 你的ip可能之前被不正当使用过,比如被黑客拿去攻击他人,导致ip不干净了😓
  • 你机器的供应商可能比较出名,比如如果你用的是Oracle Cloud或者搬瓦工啥的,你会发现大概率访问不了chatgpt,因为这种大型厂商的ip,对于chatgpt他们而言,就可以默认认为你在走代理访问

总而言之,如果你现在的机器A访问不了chatgpt,那么有啥解决办法么?答案显而易见:用代理呀。找一个可以访问chatgpt的机器B,然后让你的机器A通过B去访问chatgpt即可。本篇文章介绍一个简单粗暴配置简洁的方法,即使用DNS来解锁,也就是题目所说,dnsmasq+sniproxy组合的方式来解锁🔓

假设你的A机器的ip是103.1.1.1,然后这是被chatgpt所ban的ip;而你的B机器的ip是103.2.1.1,这个是可以访问chatgpt的ip;域名chat.openai.com的真正ip地址是11.22.33.44

我们知道,在没有实现本文的搭建之前,假设机器A上/etc/resolv.conf里面你的DNS服务器是8.8.8.8,然后不管你是使用什么魔法,总之你开始使用A机器访问chatgpt的网站chat.openai.com的时候,其步骤是这样的:

那么如果你用了dnsmasq+sniproxy的本文解锁方式,情况会变成啥样呢?首先,B机器做为服务器,搭建dnsmasq服务,并且填写好针对域名chat.openai.com的解析规则为B的ip地址103.2.1.1,A机器将自己/etc/resolv.conf里的首选且唯一DNS地址修改为B103.2.1.1;然后B再搭建好sniproxy服务,聆听在443端口上,并且写好针对域名chat.openai.com的规则,准备接管使用该域名来访问B机器443端口的TCP/TLS流量,然后该请求代理到chat.openai.com真正的ip地址11.22.33.44上,整个流程图如下:

相信通过上面的讲解,读者已经理解了DNS解锁的原理是啥了,下面就让我们来实战吧😁

实战搭建

  首先来到服务器机器B上,我们使用一键脚本来安装,感谢一键脚本作者myxuchangbin🙏🙋,由于github国内访问以及ipv6访问比较受限,并且该脚本主要是用来解锁流媒体的,笔者将其魔改了一下,可以用来解锁chatgpt,并且安置在支持ipv6访问的服务器上咯,一键安装命令(快速预编译安装)如下:

wget --no-check-certificate -O dnsmasq_sniproxy.sh https://ddog.host/op/dnsmasq_sniproxy.sh && bash dnsmasq_sniproxy.sh -f

安装完成后,可以参考:戳我🙋官方说明书进行测试,看看是不是成功运行了,这一部分笔者不过多赘述了。

  测试一切okk后,服务器端B已经搞定了,现在我们来搭建被解锁机客户端A的服务。在机器A上,终端内输入如下指令:

wget https://ddog.host/op/unlock_openai.sh

然后使用文本编辑器编辑该文件(比如用vim,哪个顺手你用哪个就行),如下图所示:

请替换self_ip1.1.1.1为你机器B的ip,在本文的例子中其为103.2.1.1,你写成实际中你的解锁机的ip即可啦。然后看注释的说明部分,如果你的机器是centos,那就把下面"### for arm ubuntu..."后面所有都删除即可,反之亦然(脚本里下面对ubuntu而言那个不仅仅适用于arm架构,x86也可以,这是笔者之前的自用脚本,所以懒得修改了😓)

一切搞定后,可以测试一下,如下图所示:

你会发现,当你查询www.baidu.com的解析记录的时候,返回的就是真实百度的ip;而当你查询openai.com的时候,返回的ip将会是你的解锁机B的ip啦,到此就大功告成啦哈哈哈!!!😄

需要注意的是,dnsmasq默认已经开启了search的DNS查询模式,即你查询openai.com还是查询"*.openai.com",其都给你返回了解锁机的ip地址,也就是所谓的泛解析模式。这一点蛮好的,可以一定程度避免因为漏写规则导致的被检测使用代理(当然除非你的/etc/sniproxy.conf的table规则里也使用了类似泛解析的匹配语法,具体可以自己搜索一下笔者这里不过多赘述了😄,如果没有写好table规则,那sniproxy也不给你代理)。那么如果你仅仅想解析openai.com而不解析其子域名,enmmmm😓目前好像没搞定,明明dnsmasq服务器已经设置了domain-needed, bogus-priv,但是依然出现了泛解析,不知道是啥原因,询问了谷歌的bard,如图所示,给出了相反的回答:

笔者进行了测试,发现开不开启这东西都没区别,客户端依然是泛解析😓,不过目前先这样吧哈哈哈,因为泛解析蛮切合咱们解锁的用途哈哈哈😂此处留一个mark,未来解决了再填坑📝

⚠️Caveat: 相信你也发现了,使用这种方法搭建的sniproxy服务器,其443端口是谁都可以连接的,而且并没有其他协议那种使用密码等等认证,也就意味着有心人可以用你的机器来解锁他们的服务,从而空套你的流量,详情可以参考一下不良林的白嫖奈飞的视频(此种行为相当不地道哈哈哈😓):📽【全网首发】无需翻墙看奈飞、迪士尼等流媒体,免费解锁所有地区,reality的前身,sni反向代理服务器,windows专用dns服务器工具Acrylic,使用x-ui白嫖Netflix解锁机
那么应该怎么解决呢这个问题防止被人白嫖呢?其实也很简单,在机器B上,添加机器A的ip为防火墙针对443端口的rich rule即可,详情可以参考我的另一篇文章🙋Linux强大的防火墙软件firewalld进阶使用技巧

实战结束,若对您有帮助,请帮助收藏、转发分享,转发请记得标注出处,愿更多人能看到这角落里的光🌇🌆🌅