日期:2019年06月04日   

这几天墙貌似升级,之前的SS全部被封杀,没办法,只好v2ray一把了。把整个历程记录一下,以备今后架设使用。顺道感谢一下,万能的胖仔,为我提供技术支持。

先贴个文档,简易版V2ray手册,说简易,其实也不简易,挺多的,耐着性子看完了。实在是没心情再看官方的document了,这个差不多就够了。

原理篇

原理上,和SS一样,都是为了和墙大作战,不过,比SS更强大和复杂,所以可以更好地对抗墙:

简单来说,SS 功能单一,V2Ray 功能强大。听起来似乎有点贬低 SS呢?当然不!换一个角度来看,SS 简单好上手,V2Ray 复杂配置多。

我的理解,就是客户端建立一个到v2ray主机的通道,上面跑VMess协议,然后到了服务器端解密解包,然后帮助路由出去,回来的包再按照这个路数回来即可。

{浏览器} <--(socks)--> {V2Ray 客户端 inbound <-> V2Ray 客户端 outbound} <--(VMess)-->  {V2Ray 服务器 inbound <-> V2Ray 服务器 outbound} <--(Freedom)--> {目标网站}

除了加密,就是伪装了,这个很赞,V2ray可以伪装成各类协议,比如伪装成一个web服务器,也可以伪装成用一个tcp的标准服务、STMP的流媒体、甚至是微信的视频服务器啥的,一堆选择,总有一款适合您。当然TLS支持是必须滴。

不过胖仔告诫说,如果犯懒使用tcp或者KCP,就跟之前的SS没啥区别,就跟裸奔一样,一定要伪装成,TLS的Websocket服务器,这样,才可以躲避万恶的墙的扫描。最好再准备一个宣扬我党政策的大主页,就绝对安全了,哈哈。

服务端配置

我犯懒,直接谷歌了一个教程,一键安装之,很不错,还有个shell菜单引导你,省去了配置修改config.json,不过,你最好还是提前通读一下简易配置文档先。

我本来一键式用最简单的方式,也就是tcp,设置的,都没搞啥KCP协议,恩,很快就跑起来了,然后安装了V2RayX,通了,很高兴。(细节大家就读这个小哥哥的文档即可,还是写的很赞的)。

然而,胖仔恐吓我,说,这种方式跟裸奔没啥区别,必须要TLS+WebSocket方式,寻求终极安全。鉴于这两日被墙强奸的痛楚,就只好硬着头皮去鼓捣tls+ws方式。感谢热心似火的胖仔,给我提供了爽爽的一键安装脚本,满心欢喜运行一把,fail了,细看,应该是因为胖仔这个是for Ubuntu的,我的是CentOS,没关系,读读脚本,自己搞定,否则,再去滋扰人家,多不好意思啊。

细看了一下,其实也不难,大致流程就是:

  • 装个Nginx
  • 申请个免费的TLS证书,改造自己的服务器成为https
  • 然后把nginx的websocket请求代理给本地的v2ray的端口为10000的服务
  • v2ray端配置成Webscoket+TLS方式即可

nginx就不用说了吧,yum直接搞定。

就是先调用~/.acme.sh去申请个证书,acme是啥,是一个免费提供TLS安全证书的脚本,细节也没兴趣搞了,感兴趣可以去看看这篇,恩,随便搜了一篇贴给你。

然后,胖仔的脚本帮助生成了一个SSL的配置,真好,省去的我这个SSL配置盲的工夫。

然后就差配置v2ray了,于是,我有启动小哥哥的配置脚本,菜单上一选,搞定。

好啦,重启v2ray、nginx服务,然后,去配置客户端喽。

新服务器配置流程

前面讲的有点乱,把配置过程重新捋一捋:

  • 先改成证书登录
ssh-copy-id -i ~/.ssh/id_rsa.pub root@IP
# 取消sshd的密码登录
# vim /etc/ssh/sshd_config
PasswordAuthentication no
ChallengeResponseAuthentication no
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
  • 配置你的域名

去DNS域名配置的网站,配置上A记录:IP <-> 域名,这个是为了给服务器配置一个域名, 域名一定是要有的,因为https服务需要的证书,需要绑定一个固定域名,如果没有,买个去吧,推荐狗爹goddady。

  • 安装必要工具

一般初始服务器都很干净,需要装一些工具,我的是centos7:

yum install -y vim # vi实在难用
yum install -y net-tools # ping啥的
yum install -y lrzsz # 上传下载的小工具
yum install -y wget
  • 去服务器上,安装nginx

我的是centos7,yum源不带nginx,所以需要用epel:

yum install epel-release
yum install nginx

备份原有配置,使用我提供的配置nginx.conf,主要是设置证书和websocket的路径。 然后先别着急重启nginx服务器呢,等下面的证书安装完成后再重启。

  • 安装证书

运行我提供的cert.sh,他会运行acem的脚本去为你申请一个证书,命令需要一个参数,就是你的域名, 运行完后,会在/etc/v2ray/目录下创建你的证书,并且把更新证书的命令放到cron里,当然这些都是自动化的。

cert.sh YOUR_DOMAIN_NAME

然后,就可以重启nginx服务了,systemctl restart nginx,如果正常的话,去你的浏览器,敲入你的https://你的域名,就可以正常访问你的网站了,这就说说明你的证书有效了。

  • 安装v2ray
wget https://install.direct/go.sh
chmod +x go.sh
./go.sh

然后备份/etc/v2ray目录中的config.json,使用我提供的配置文件config.json, 注意1点,使用就配置中的那个id,就是很长的那个uuid。 这个uuid是一个自动生成的,当然你也可以重新生成,但是不如就用最开始安装生成的那个。

然后重启服务systemctl restart v2ray

  • 最后,安装一个bbr,这是一个帮助加速网络的脚本,主要是优化了tcp协议栈的处理,也是一键式的:

./bbr.sh

这个安装完需要重启。

客户端

我发现了2个客户端,一个是v2rayX,一个v2rayU,抱歉,都是for Mac的,如果您需要windows的,自行谷歌吧,哦不,自行百度吧。

客户端其实和服务器端没啥区别,你去官网下载的话,其实,就是很对付的给你弄一个交叉编译版本,比如mac、windows版本而已,你还是去人肉编辑config.json,好变态,所以,v2rayX/v2rayU,就给你给套了个配置的壳子,好用多了。其实,底层还是包了个v2ray内核。

V2rayU,我没有使用,这里只说说V2RayX的设置吧,V2RayU自行对比设置吧。

V2RayX的设置

V2rayX很好用,而且这篇文档也讲的很清楚,我就不贴图了,仔细阅读即可。我这里丹丹说说websocket+TSL的配置吧。

  • Address:地址不能写IP了,要写一个域名,建议走一个info买的便宜域名,别用国内自己常用的域名,防止喝茶
  • Port:端口,恩,443,TLS嘛
  • Network:这里选择Websocket即可
  • 然后点开“transport setting…”,配置2个地方:
    1. Websocket path是你服务器上的websocket对外服务的路径,比如/mymsg 在”header”里面输入{“Host” : “xxx.yourdomain.info”},恩,你绑的域名
    1. TLS 勾选Use TLS,然后在Server Name处填入”xxx.yourdomain.info”

恩,差不多了,然后把log level改成debug,暗中观察日志即可,有错排错,谷歌之即可。

遇到的一些问题

  • 别忘了绑定的主机到一个域名,恩,买个info的,防止喝茶
  • nginx配置过程中,主要是websocket服务要绑定个路径,这个其实可以通过chrome浏览器就可以测试(其实,万恶的墙也是这样来侦测你的),方便排查
  • 没事就观察v2rayx的客户端日志、v2ray服务器端日志、nginx日志,然后股沟之,一般问题都轻松搞定

关于主机/VPS

如果你要买主机,首推谷歌的免费的主机,白送你一年的试用,详细请看这里

如果你想买其他的,我知道的只有搬瓦工NFPHost,不过我的两台VPS都阵亡了,最近不曾使用他们了。我还去问了一下搬瓦工客服,说换个ip大概需要50块钱人民币左右,呵呵,暂时先算了,看看未来可以自动解封么。。。

我一般都买个100元RMB上下的,就够了,太贵的也没啥必要。不过以后再买,就直接搞v2ray了。

使用CloudFare加速啦!

还是这篇教程,里面讲的很清楚,如何建立cloudflare的加速,其实,就是让你先去访问cdn,通过cdn缓存v2ray的数据,从而达到加速的目的。

教程讲的很清楚,我就补充一些内容吧:

使用worker方式代理

这个教程里提到加速方式是“worker”方式,说白了,就是直接在网页里嵌入一段js,然后,cloudfare会给你代理的域名一个代理域名,你访问的时候,就访问这个代理域名,代理域名会把你要的页面发给你,并且缓存。这种方式的好处是,你对目标网站相关的内容不需要做任何修改。

不过,这种方式,需要对v2ray客户端进行修改:

  • 把v2ray的host地址,改成这个cloudfare给你生成的代理地址,形如:late-waterfall-1a2b.xxxxxx.workers.dev,xxxxxx就是你的cloudfare的work名字
  • 在websocket的header要把伪装主机改成这个名字:
    {
    "Host" : "late-waterfall-1a2b.xxxxxx.workers.dev"
    }
    

然后,再试试,OK啦,去油管上测试一下视频,果然快了很多啊。

使用DNS方式代理

除了这种worker的方式,其实还有一种更好的方式,至少我是认为更好的,这个好处是,这个域名是对外的,任何访问这个域名的人,都会被Cloudflare加速。

参考这篇,在cloudflare里,创建你的域名加速。cloudflare的wizzard还是很有好的,你可以按照他的步骤很容易地设置起来你的域名的CDN。

麻烦点的是,他需要接管你的DNS解析,把之前你在别地方的DSN解析替换掉,换成cloudflare的。这就需要你去你的DNS购买提供商那里把naming server从原有的解析服务器替换成cloudflare的。

其他的都很简单,剩下的就是静静等待,有个半天就生效了,生效以后你可以看到的ip已经被proxy了。

另外,cloudflare的免费服务每天可以有10万次,不过对我们来说,足够了。

挑选一个最牛逼的代理

生命不息,折腾不止,教程里面会让我们继续折腾,就是找一个cloudflare最快的主机,啥意思?我们知道,CDN就是在你要访问的时候,截获你的访问,把你导向到一台缓存服务器,cloudfare其实准备了无数这样的服务器,我们得找出一台最快的,然后固定住它,一直就用它啦,多好啊。

开搞,首先得搞一份所有的cloudfare的CND服务器列表,大神们已经干了这事了,可以参照这个脚本,不过,是个bat,而且附带的也是个fping.exe,可是我的是mac啊。

好在是胖纸已经帮我搞了一份这个ip.txt了,而我只需要brew install fping,然后跑一下这个脚本,就可以得到最快的IP啦:

fping -f ip.txt -c 4 --interval=1 -s|sort -r -k6|grep  " 0% loss"|tail -n 20 >fastip.txt
mkdir -p temp
for ip in `cat fastip.txt|awk '{print $1}'`
do
	echo "test ip:${ip} speed..."
	curl --resolve apple.freecdn.workers.dev:443:${ip} https://apple.freecdn.workers.dev/105/media/us/iphone-11-pro/2019/3bd902e4-0752-4ac1-95f8-6225c32aec6d/films/product/iphone-11-pro-product-tpl-cc-us-2019_1280x720h.mp4 -o temp/${ip} --connect-timeout 2 --max-time 10
done
ls -lS temp > realfastip.txt
cat realfastip.txt |awk 'BEGIN{while(getline line <"fastip.txt"){split(line,arr," ");list[arr[1]]=line}}{print $0 "\t" list[$NF]}'
echo "press ENTER key to continue..."
read
rm -rf temp

不过,我跑了几次,发现每次都不是很稳定,最快的IP变来变去,算啦,随便挑一个把….

接下来,要回去修改一下v2ray的配置,把host地址,改成这个IP,然后就完美了。

实测了一下:

之前没有用Cloudflare,大概是1.5-2Mbps,使用Cloudflare加速后,可以到3.5-4Mbps,修改成最快的IP后,可以到5-6Mbps。

我家用的是超烂的长城宽带,万能的胖纸使用的移动宽带,可以加速到20-40Mbps,煞是让人羡慕ing….

不过,由于这个CDN的节点速度不稳定,未来可能会有更好的IP优化,也可能当前使用的IP会退化,最好的办法是写一个定时器,去fping一圈,每次优选一个最好的IP,然后动态更新你的v2ray主机名字,这样就超级完美了,不过,懒得再折腾了,目前已经相当满意了。

更新

2022.12

2022.12,由于众所知之的原因,墙又一次升级,居然把443端口给封了,现象就是,只要是我的服务器有任何针对443的访问流量,IP立刻就会被封,大约十分钟后,又给你放开,但是只要访问,又封,无语嘞。

按理说,v2ray本身就加密,加上ssl/tls,再次加密,不会有什么问题,但是,我看网上说,可能墙启动了人工智能识别,我倒是觉得没那么牛逼,其实就是看你日日莫名其妙上传这么多流量,而且还是443的websoket,就无脑给你封掉,大概率是那些翻墙的人吧。

我把443换成80的ssl,依然被封,网上查了,用高位端口,也一样,只要你之前被盯上,估计短期就不会解封的。好吧,我只好再去买台了。

这次,并没有再买阿里的新加坡服务器了,一个是因为zone里没有新加坡了,只有香港,而且288元/年的套餐也没有了,最便宜要400。靠!所以,就转向了aws,aws的lightsail每个月3.5刀,就他了。

然后,就需要重装一遍,自己很久不搞了,几乎又把之前的坑都试了一遍,觉得有必要再记录一遍:

  • 装完nginx,要配置下服务器的域名,acme要验证你的域名,我本来用–domain,它是直接用一个域名提供商的api+token去远程调用api插入一个txt记录,这个倒是简单,但是我死活不通timeout。最后,我只好用–nginx,也就是自动让acme去改nginx的conf配置,然后验证我这个域名对应的服务器是靠谱的,所以才需要提前配置好server_name,再nginx上绑好域名。
  • acme,需要root身份,否则,他要重启nginx的时候,会一堆的nginx权限报错,nginx的主进程必须要root启动,只是子进程可以指定用户,我就是用非root装的,改了一堆的文件权限,才通过,唉,下次直接用root装
  • acme已经在2021年切刀zerossl来提供证书了,所以有一个注册过程 ~/.acme.sh/acme.sh --register-account -m xxxxxx
  • v2ray也是涉及到权限的细节,有一个问题,说啥md5加密不再使用啥的,需要加入一个环境变量Environment="V2RAY_VMESS_AEAD_FORCED=false"/etc/systemd/system/v2ray.service中,才可以
  • 别忘嘞做时钟和时区对齐,否则也报错
  • 最最后,别忘嘞加入crontab,来定期同步最新的证书

总结一下: 买机器、装nginx、注册新2级域名、绑到nginx上、安装acme、注册到openssl、申请和安装证书、安装v2ray、修改v2ray环境变量、修改各种文件权限、修改时区、加入acme的定期更新证书到crontab,酱紫。

整一台机器得需要个2~3个小时。

再次记录一下这些关键细节点,方便下次重装。

2022.12.5

购买的东京aws服务器又被封了,ip没有,80端口被封,这次没办法,只好再做修改,挂上了cloudflare的d代理。

具体是,把namesilo中的ip解析nameserver改成了cloudflare的,并且在cloudflash中加入站点,并且,把dns解析都改在cf来解析了。其中,每个A记录,都有一个proxy的选项,勾选后,这个子域名,就会被代理。也就是,每次访问可能都是一个不同的ip,真实的ip会被隐藏在后面了,省的被发现了。

不过,后来和胖纸聊,他说主要原因是tls导致的,建议把tls关上,他现在就不用tls。本来我认为是v2ray的vmess加密+tls(ssl)的加密,会双保险。但是他说,可能墙已经识别出tls的某些特征,建议我不用tls,直接用http,用vmess加密就够了。

于是,就把旧机器删了,再买了一台,反正也不用再搞域名ssl证书也就是acme那些麻烦玩意了,很快就搞定了一台。

另外,用cloudflare的代理,发现它果然可以帮助我隐藏真实ip,而是每次都是个不同的ip,但是,被代理后速度从200ms变成了800ms,靠,这根本没法用。虽然可以通过一个脚本可以检测出最优的代理edge ip,但是还是太麻烦,算了,不代理了,只要不再用tls导致再被封就好。

最后,又优化了一下网络,开启了bbr,是一个谷歌的网路流量优化的算法,需要在服务器上开启,开启后,速度快了将近一倍。 bbr已经在内核5.x上默认内嵌了,只要开启即可。默认的bbr速度就很好了,不过还有大神做了不同的调优版本的内核,但是都需要重新下载新的内核,一个是不安全,另外一个是我看了对比,优化幅度不是特别大,开启默认的bbr效果就已经提升明显了,没必要再精益求精了。

好吧,如果再出问题,就删掉再买一台,再花个半小时搞定,嗯,就这么办!也只有这么办了,好讨厌的墙。

接下来,把我详细的步骤,列举出来,方便朋友们架设,也方便以后自己来搞。之前的那些内容太繁琐了,啥SSL的, 现在,模式变得非常简单,不需要SSL/TLS了,就用vmess+http。

1. 购买域名和主机

  • 买一个域名,推荐去namesilo(注:这步不是必须的,可以没有域名,只用IP)
  • 需要去aws买一台主机,可以在淘宝上买代金券,每年成本可以降得很低,自行搜索aws代金券即可。(大约每年140元人民币)
  • 需要配置域名和aws主机的绑定,买完域名在namesilo里就干了。(注:这步不是必须的,可以没有域名,只用IP)
  • 推荐使用ubuntu服务器20.04LTS版本

2. 配置服务器

【准备SSH登录】

使用密钥方式登录服务器:

准备key: 从aws下载私有key到~/.ssh并修改访问权限:

chmod 600 ~/.ssh/xxxx.pem

登录服务器:

ssh -i ~/.ssh/xxxx.pem <服务器IP>

【安装各种软件】

登陆后,依次运行下面的命令:

更新apt源

sudo apt-get update

安装nginx sudo apt install nginx

配置nginx

sudo vim /etc/nginx/nginx.conf

	events {worker_connections 1024; }
	user www-data;
	worker_processes auto;
	pid /run/nginx.pid;
	http {
		sendfile on;
		tcp_nopush on;
		tcp_nodelay on;
		keepalive_timeout 65;
		types_hash_max_size 2048;
		include /etc/nginx/mime.types;
		default_type application/octet-stream;
		access_log /var/log/nginx/access.log;
		error_log /var/log/nginx/error.log;
		gzip on;

		server {
			  server_name  <你的域名(这行可以不要,如果没有域名的话)>; 
			  root         /usr/share/nginx/html;
				listen 80 default_server;
				location /msg   {
				        proxy_redirect off;
				        proxy_pass http://127.0.0.1:10000;
				        proxy_http_version 1.1;
				        proxy_set_header Upgrade $http_upgrade;
				        proxy_set_header Connection "upgrade";
				        proxy_set_header Host $http_host;
				}
	  }
	}

修改一下root密码,方便后续安装,因为v2ray需要以root身份安装

sudo passwd root

切换到root用户

su -

以root身份安装v2ray

bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)

安装后,配置v2ray

vim /usr/local/etc/v2ray/config.json

(之前,需要去UUID在线生成生成v2ray的id,配置里需要用)

	{
	        "log": {
	                "access": "/var/log/v2ray/access.log",
	                "error": "/var/log/v2ray/error.log",
	                "loglevel": "warning"
	        },
	        "inbounds": [
	                {
	                        "port": 10000,
	                        "protocol": "vmess",
	                        "settings": {
	                                "clients": [
	                                        {
	                                                "id": "<v2ray的id,自动生成的,这个很重要,将来客户端连接需要配置个id>",
	                                                "alterId": 64
	                                        }
	                                ]
	                        },
	                        "streamSettings": {
	                                "network": "ws",
	                                "wsSettings": {
	                                        "path": "/msg"
	                                }
	                        },
	                        "sniffing": {
	                                "enabled": true,
	                                "destOverride": [
	                                        "http",
	                                        "tls"
	                                ]
	                        }
	                }
	                //include_ss
	                //include_socks
	                //include_in_config
	                //
	        ],
	        "outbounds": [
	                {
	                        "protocol": "freedom",
	                        "settings": {}
	                },
	                {
	                        "protocol": "blackhole",
	                        "settings": {},
	                        "tag": "blocked"
	                },
	                {
	                        "protocol": "freedom",
	                        "settings": {},
	                        "tag": "direct"
	                }
	                //include_out_config
	                //
	        ],
	        "dns": {
	                "server": [
	                        "1.1.1.1",
	                        "1.0.0.1",
	                        "8.8.8.8",
	                        "8.8.4.4",
	                        "localhost"
	                ]
	        },
	        "routing": {
	                "domainStrategy": "IPOnDemand",
	                "rules": [
	                        {
	                                "type": "field",
	                                "ip": [
	                                        "0.0.0.0/8",
	                                        "10.0.0.0/8",
	                                        "100.64.0.0/10",
	                                        "127.0.0.0/8",
	                                        "169.254.0.0/16",
	                                        "172.16.0.0/12",
	                                        "192.0.0.0/24",
	                                        "192.0.2.0/24",
	                                        "192.168.0.0/16",
	                                        "198.18.0.0/15",
	                                        "198.51.100.0/24",
	                                        "203.0.113.0/24",
	                                        "::1/128",
	                                        "fc00::/7",
	                                        "fe80::/10"
	                                ],
	                                "outboundTag": "blocked"
	                        },
	                        {
	                                "type": "field",
	                                "inboundTag": ["tg-in"],
	                                "outboundTag": "tg-out"
	                        }
	                        ,
	                        {
	                                "type": "field",
	                                "domain": [
	                                        "domain:epochtimes.com",
	                                        "domain:epochtimes.com.tw",
	                                        "domain:epochtimes.fr",
	                                        "domain:epochtimes.de",
	                                        "domain:epochtimes.jp",
	                                        "domain:epochtimes.ru",
	                                        "domain:epochtimes.co.il",
	                                        "domain:epochtimes.co.kr",
	                                        "domain:epochtimes-romania.com",
	                                        "domain:erabaru.net",
	                                        "domain:lagranepoca.com",
	                                        "domain:theepochtimes.com",
	                                        "domain:ntdtv.com",
	                                        "domain:ntd.tv",
	                                        "domain:ntdtv-dc.com",
	                                        "domain:ntdtv.com.tw",
	                                        "domain:minghui.org",
	                                        "domain:renminbao.com",
	                                        "domain:dafahao.com",
	                                        "domain:dongtaiwang.com",
	                                        "domain:falundafa.org",
	                                        "domain:wujieliulan.com",
	                                        "domain:ninecommentaries.com",
	                                        "domain:shenyun.com"
	                                ],
	                                "outboundTag": "blocked"
	                        }                       ,
	                {
	                    "type": "field",
	                    "protocol": [
	                        "bittorrent"
	                    ],
	                    "outboundTag": "blocked"
	                }
	                        //include_ban_ad
	                        //include_rules
	                        //
	                ]
	        },
	        "transport": {
	                "kcpSettings": {
	            "uplinkCapacity": 100,
	            "downlinkCapacity": 100,
	            "congestion": true
	        },
	                "sockopt": {
	                        "tcpFastOpen": true
	                }
	        }
	}

修改启动文件

vim /etc/systemd/system/v2ray.service

加入这行,这个是因为v2ray有个小bug,需要这样修改下,感兴趣可以自行谷歌:

Environment="V2RAY_VMESS_AEAD_FORCED=false"

启动v2ray

systemctl enable v2ray;systemctl restart v2ray

安装网络工具包,然后查看端口80和10000是否运行?

apt install net-tools

netstat -lntp

开启bbr,加速: 这个是一个优化方法,可以让网速提速1倍,感兴趣可以自行搜索原理:

echo net.core.default_qdisc=fq >> /etc/sysctl.conf
echo net.ipv4.tcp_congestion_control=bbr >> /etc/sysctl.conf
sysctl -p
sysctl net.ipv4.tcp_available_congestion_control
lsmod | grep bbr

bbr开启的话,正常结果为:

> sysctl -p
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

>sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = reno cubic bbr

>lsmod | grep bbr
tcp_bbr                20480  1

调整时钟:必须要跟网络时间服务器同步,否则,客户端和服务器不一致,会连接不上。

apt-get install ntpdate
ntpdate cn.pool.ntp.org
tzselect
echo "TZ='Asia/Shanghai'">>~/.profile ; export TZ

3、配置客户端

  • windows上用v2rayN
  • MAC上用v2rayU
  • 安卓上用pv2rayNG
  • IOS苹果上很麻烦,默认的国内appstore没有v2ray客户端,需要去国外的appstore上安装。具体步骤是:1、参考这篇去注册个美国apple ID,然后切换到美国市场。2、安装一个叫oneclick的免费客户端,他们都推荐收费的ShadowRocket,但是我没法设置信用卡,只好用免费的oneclick了,我感觉挺好用的。

以mac上的配置为例,展示配置细节:

(注:如果没有购买和配置域名,不需要填写headers)

其他平台上,配置大同小异。

其他

  • 配置中,肯定会遇到很多坑,耐心排查和百度(还没能翻墙)应该都可以解决
  • 客户端软件肯定需要先翻墙,才能下载,这个时候就是先有鸡先有蛋的问题了,建议先找个免费的vpn啥的下载下来
  • 账号尽量不要分享给其他人,现在查得严,倒不是怕其他人滥用,而是,稍微用的人多,就会封IP
  • 为了防止失联,建议买2台,互备,淘宝优惠券相当实惠,而且,GFW时不时会封一下,这时切换到另外一台,不影响使用

2023.4.17

针对chatgpt的增强

chatgpt火了,但是,必须要翻墙才可以;随着翻墙的人多,chatgpt开始限制大陆地区的ip。特别是aws的IP,全封。阿里的海外服务器,开始还可以,但是后来,也封了。

后来,有人提出,用cloudclare的warp服务,来规避ip被封。本质上,我理解,就是在你的ip之外,再设置一个代理,每次都更换自己的ip到一个变动ip,也就是代理的代理。

开始还可以,但是用了一段时间后,估计是chatgpt发现某个ip上来的请求太多了,就开始报429的错误码。

最后,又谷歌半天,发现需要多尝试一些warp IP,直到你切换到某个没有过多人用的IP,才可以稳定到这个ip上,才可以。

具体做法:

1、给服务器套上cloudflare的warp服务

curl chat.openai.com

如期的出现1020错误码。

为库安装GPG Key:

curl https://pkg.cloudflareclient.com/pubkey.gpg
sudo 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/ $(lsb_release -cs) main"
sudo tee /etc/apt/sources.list.d/cloudflare-client.list

update APT:

sudo apt update

安装Warp:

apt install cloudflare-warp

注册Warp 运行命令给设备注册:

warp-cli register

打开代理模式:

warp-cli set-mode proxy

连接Warp:

warp-cli connect

查验

curl ifconfig.me --proxy socks5://127.0.0.1:40000

结果会显示一个被代理后的cloudflare提供的代理ip,再测试不使用socks5时候还是1020错误代码,第二条命令带上socks5,没有1020错误代码提示了。

2、更新v2ray配置

上面的warp服务,只是让你的服务器,可以对外服务器的时候,可以提供一个新的代理ip。 现在,要把这个代理ip服务,和你的v2ray服务结合起来。 也就是,一般翻墙的时候,不使用这个代理ip(原因是,再代理一次速度会慢很多);如果是访问chatgpt的时候,就用这个新的代理ip去访问chatgpt。

修改你的v2ray配置,再outbounds和routings部分,加入一下的配置:

# outbounds

{
	"tag": "chatgpt",
	"protocol": "socks",
	"settings": {
		"servers":[
			{
				"address": "127.0.0.1",
				"port" : 40000
			}
		]
	}
}


# routings
{
	"type":"field",
	"outboundTag":"chatgpt",
	"domain" :[
		"chat.openai.com",
		"ip138.com"
	]
}

说明:

  • 40000,就是新的warp服务的端口
  • 可以看出来,只有在路由到chat.openai.com域名的时候,才会走这个warp代理ip服务
  • 为何要搞搞ip138.com路由呢?是为了测试用这个网站解析ip的时候,可以看到新的代理ip
  • 重启v2ray,完事

不过,有的代理ip因为用的人太多,所以会报429的错误,所以接下来,要解决429错误的问题嘞。

2、狂刷warp,直到获得一个稳定IP

解决错误码429的办法,就是重新登陆warp服务,不断地尝试获得新的ip,直到某个ip不再报错,即可。

warp-cli disconnect && sleep 3 &&warp-cli connect

不断刷下边的这条命令,再刷新chatgpt的页面验证是否可以正常使用。

即使在晚上的最高峰,往往刷个5次就能找到一个合适的节点实现chatgpt的访问。并且这个节点很长时间内都不会失效

参考:

最后

这年头,翻出去不容易,口袋越收越紧了,年轻淫们,可以人肉翻就赶紧翻吧。我呢,为了看看油管,翻翻股沟,唉,这年头,生活、学习都不易啊。