日期:2019年06月04日    0

这几天墙貌似升级,之前的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了。

IBM的云

(2020.9月更新)

万能的胖纸,兴奋地告诉我,IBM的云免费啦,我勒个去,那赶紧去薅一个吧。

于是去IBM Cloud,去注册一个,注册完一看,噢,原来不是VPS,而是一个docker服务啊,不管咋样,免费就好,docker也挺好,于是照着这个教程搞起来,这篇文章讲的还是不错的,就不当复读机了,但是有几个坑,需要向读者您说一下:

  • 这个篇文章提到的脚本是有问题的,建议用这位
    wget --no-check-certificate -O install.sh https://raw.githubusercontent.com/bigfangfang/IBMVPS/master/install.sh && chmod +x install.sh && ./install.sh 
    
  • 遇到一个错The app is invalid: Invalid application source code found,这个不是脚本的问题,而是必须把自己的控制台的location调整到达拉斯

然后就可以很顺利的安装好了!

然后,使用IBM生成的这个app的url,填写到v2ray的host里面,哇!v2ray就work啦!

不过,IBM会check每个app,如果10天没有动静,就会把这个app关掉,唉,所以,胖纸写一个脚本,去cron重启它:

#!/bin/bash

$IBMCLOUD config --check-version=false
$IBMCLOUD login -r us-south -u "${IBM_USER}" -p "${IBM_PASS}" -g "${IBM_RESOURCE}" <<EOF
no
EOF
$IBMCLOUD target --cf
$IBMCLOUD cf install -f
$IBMCLOUD cf restart "${IBM_NAME}"

只要到自己其他的的VPS上去写入到crontab中,配置个7天重启,就OK啦。(上面那个教程里说的一堆搞github的东西,都是为了定期重启,但是如果你有自己的vps,就不用搞那些玩意,一个简单的重启脚本就好)。

不过,这还不完美,在万能的胖纸的指导下,去再一次加速!

使用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主机名字,这样就超级完美了,不过,懒得再折腾了,目前已经相当满意了。

最后

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