墙和梯子之间的战争,看来是永无止境了。至少在能够预见的时间内,墙会越来越高,阻止更多的人出去看世界。
不管你的理由有多正当,自己相信自己有无辜,本着“不让你出去,是爱护你”的原则,信息的封锁只会更强。
对于梯子来说,只要中国还保留一线与外界交流的可能,理论上就有机会出国访问。至于力度松紧,全靠领导的眼神。
在唯上不顾下的政治环境中,为了把自己的屁股坐稳,上峰的每个似有还无的示意,都会变成千斤重担,压在生长在泥土里的草根上,只留最后那口气。
一个人的力量对抗墙,其实胜算不高。就像指环王中的妖塔,我们藏起来的唯一的可能,是尽量伏低,不被它看到,更不要与它对视。
很怂,但又能怎样呢。
从技术上说,任何一台作为跳板的服务器,经常接收国内寥寥无几的几个ip访问,流量众多,无需任何技术手段去甄别特征码,这本身就不正常。
所以,无论哪种翻墙的方式,只要是通过个人来实现的,都不会是一劳永逸的方案。
当然,要从墙的运营思路去理解。甄别流量大小,误杀的概率非常大,而且要对每一个IP做一段时间的监控,成本太高。使用早已熟知的协议特征+端口号来识别流量,更容易一些。
这也是最近一段时间,一些隐藏很深的,个人自用的ss服务器被封禁的原因。
从原理上来说,换一个协议,除非它很小众,只有很少的人在用,没有被墙注意到,去分析它的特征码。否则,都有可能被流量甄别出来。
很少有人用的协议,普及程度当然也很低。墙的目的本来就是让尽量少的人出去,而不是无限制的投入,封锁所有人。这些认知门槛高,用的人少的协议,对墙来说,自然是抓大放小。等你火起来,再封不迟。
所以,讨论SS,V2ray,Wireguard协议,究竟谁更高级一些,没有任何意义。
对于个人用户来说,最好的方式,是用成熟的协议,尽可能的隐藏在大流量当中。
比如V2ray的websocks+TLS。
SS的作者,因为很早就被请去喝茶,它的成长性早就抵达了极限。V2ray的后来发展很快,对于周边技术热点的跟进很及时,相比Wireguard来说,不仅小众,而且技术实现的教程和文章相当多。
不过,V2ray的作者也已经失联半年,现在全靠另一个团队在github上做分支,继续完善V2ray。
感谢编程技术的门槛逐年降低,也感谢有众多肉身在国外的华裔码农,让梯子和墙的竞赛不完全变成一边倒。
为什么选择V2ray+websocks+TLS
在做这件事之前,我查看了很多网上的文章。结论是,懂得人只言片语,不懂的人不知所云。少有傻瓜文章可以一键通读到底,搞定所有设置。
为什么做这样的配置选择?
V2ray的协议不必说了,它的性质和ss差不多,都是加密协议,用来隐藏流量。所以,V2ray的通信也是需要有特别的端口号做侦听,用来在客户端和服务器端之间交换数据。
这些特殊的端口,本身就是潜在的风险。直到V2ray提供了websocks的支持。
websocks协议,本身不是用来翻墙,而是用来提高网站的访问速度。原理不说了,websocks会减少握手的次数,维持稳定的链接,但这些都不重要。
它让我们可以将V2ray的流量真正隐藏在https的协议中。访问v2ray服务器的地址,不再是ip地址:v2ray端口号,而变成了:https://你的服务器/你的路径
以https加密协议如今在网络上的普及程度,尽管v2ray协议的流量依然与正常的https不同,但是隐藏深度足够,鉴别成本更高。
从ISP的角度上来看,你就是在访问某个网站,只是客户端不是浏览器。
总之,这要比SS的傻白甜端口要安全许多。而且,这样的配置,可以搭配cloudflare的免费SSL 流量转发服务CDN,彻底隐藏服务器IP,即便是被墙的IP,也能透过CloudFlare的云端访问到!
Cloudflare是北美的CDN(流量分发)服务商,它给大量企业提供服务器节点,用来就近转发用户服务器上的内容。国内做CDN的也很多,阿里云,腾讯云,都有。
有了CDN,一家公司无需在世界各地部署服务器,服务商会把你网站上的内容发送到它在全世界的节点上,让用户就近访问。
Cloudflare就是这样一家公司。它还做了号称全球最快的DNS服务器:1.1.1.1。可想而知,如果全面封禁Cloudflare,大量企业会受影响,而这样一家大型服务商,所拥有的IP地址段,是相当多的,挨个儿去封,也不现实。
国内的CDN流量包,价格太贵,用不起,而且域名必须要备案。你用实名身份证备案过的域名,做梯子,在阿里云上转发流量,这事儿听着怎么都很中二。
Cloudflare提供免费的https转发服务,域名也不需要在国内备案,缺点是,它给你分配的服务器也不可能在国内,而是在北美,速度不够理想。但,关键时刻,安全第一。有,总比没有强。
正文:如何快速搭建V2ray+websocks+TLS。
不懂ssh,不会用vi命令,就不用看了。以下内容,想要动手实践的话,需要对Unix命令有一些理解。如果连vi或则vim编辑配置文件,存盘退出都不会,是做不成这件事的。
安装V2ray+websocks+TLS,需要安装nginx,或者其他的http服务器;安装certbot,用来做域名SSL证书申请;安装V2ray。
我对nginx比较熟一点,所以只用了nginx。
第一台服务器的配置,包括做笔记,花了我不少时间。做好笔记以后,照着去做,10分钟足以。
安装nginx
nginx或者其他支持反向代理的http服务器端软件的意义是,通过侦听端口,将流量转发到本机,或者服务器所在内网的某个服务端口上,比如V2ray。
有了websocks,nginx如虎添翼,它收到一个特别的路径时,会将访问这条路径的所有流量,转发到后端,比如V2ray。
而这条路径,只在TLS的加密数据中,只有你知道。试是试不出来的。
安装命令:
Centos:
yum install nginx
如果找不到nginx,那么输入如下命令:
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum install nginx -y
Debian:
apt update
apt install nginx
安装Certbot
安装certbot,一定要带nginx plugin!
centos:
yum -y install yum-utils
yum-config-manager —enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional
安装额外软件包
yum install certbot python2-certbot-nginx
如果找不到软件包,需要通过python pip安装。
yum install python3-pip或者yum info python*-pip查询。
之后
pip3 install certbot certbot-nginx
debian:
增加软件包:
vi /etc/apt/sources.list
最后两行增加:
deb http://deb.debian.org/debian stretch-backports main contrib non-free
deb-src http://deb.debian.org/debian stretch-backports main contrib non-free
apt update
apt install python-certbot-nginx -t stretch-backports
如果nginx运行正常,在浏览器输入服务器的ip,可以看到安装成功的页面。
这时候,你可以去godday买域名了,或者搞个免费的域名。买好域名,做DNS解析,解析到你的服务器。
nginx需要配置你的域名。
编辑配置文件:
centos:/etc/nginx/conf.d/default
debina:/etc/nginx/sites-available/default
找到server_name那一行,将自己的域名放上去。
运行nginx -t来检查配置文件是不是正确。
使用Certbot获取SSL证书
certbot —nginx -d mydomain.com
certbot小工具会在定时任务里增加自动续签的脚本。因为免费的SSL证书是有时限的,三个月。
ls /etc/cron.d/certbot
查看有没有这个文件。没有,那就自己建一个。
内容:
0 */12 * * * root test -x /usr/bin/certbot -a ! -d /run/systemd/system && perl -e ‘sleep int(rand(43200))’ && certbot -q renew
如果域名指向没问题,nginx配置正确。certbot一定会认证成功。
安装V2ray服务器
用脚本安装最简单:
bash <(curl -L -s https://install.direct/go.sh)
v2ray的配置文件在/etc/v2ray/config.json
安装过程会生成属于你的,唯一的UUID,就写在配置文件里。
vi /etc/v2ray/config.json
内容:
{
“log” : {
“access”: “/var/log/v2ray/access.log”,
“error”: “/var/log/v2ray/error.log”,
“loglevel”: “warning”
},
“inbounds”: [
{
“port”: 你想要的端口,
“listen”:”127.0.0.1”,
“protocol”: “vmess”,
“settings”: {
“clients”: [
{
“id”: “你的UUID”,
“alterId”: 64
}
]
},
“streamSettings”: {
“network”: “ws”,
“wsSettings”: {
“path”:”/你的路径”
}
}
}
],
“outbounds”: [
{
“protocol”: “freedom”,
“settings”: {}
}
]
}
端口随意,路径随意,不建议用/ws之类的路径,大家都在用,包括/v2ray什么的。哪怕是/iloveu也好过千篇一律。
配置好v2ray,需要重启服务。
service v2ray restart
使用命令netstat -lnp,就可以看到v2ray是否在侦听本地端口。
如果没有nginx,v2ray就要侦听在0.0.0.0,端口号暴露在外界。
接下来,是修改nginx。certbot已经在配置过程中,自动生成了nginx配置,我们只需要增加路径信息即可。
它的443 server部分应该是这样的:
server {
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/你的域名/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/你的域名/privkey.pem; # managed by Certbot
#include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
server_name 你的域名;
location /你的路径 {
proxy_redirect off;
proxy_pass http://127.0.0.1:你的端口; # 端口要变成v2ray运行的端口
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
proxy_set_header Host $http_host;
}
拷贝的时候,注意哪些大括号,少一个都不行。从location开始的7行,是新增的信息。
这里的路径要和v2ray配置文件中的路径保持一致。
配置完成,service nginx restart,重启服务。
大功告成!
这里面没有CDN的设置,毕竟速度慢了不少,能直连还是直连,万一被封了,再说。CDN的配置很简单,做DNS指向即可,没有任何UNIX 命令需要使用。
客户端应该怎么设置?
以mac上的v2rayU举例:
配置成一模一样,把红圈换成自己的参数即可。