小记
ssr的tls被爆,大规模封禁来袭,转v2ray
直接部署非常容易,使用docker快速部署是正解,
实现websocket+tls+V2ray+Nginx+CDN
起因,2018年2月15日开始梯子出现故障,换之。
2018年2月25日 戊戌复辟,可笑至极,诸多词变为禁语。包括张勋、袁世凯等等。微博、微信,禁止修改头像,签名。反对等不能发表。
马前课 第十一课 开始了……
2月26日开始研究部署v2ray相关,其中遇坑,记录如下,供后人参考。
原理
v2ray 使用websocket连接到CDN,对抗DNS污染,保护真实IP
CDN连接在到服务器,全程通讯使用tls加密。【不是仿造,是真正的TLS】,服务器内部转发到v2ray容器。
Q:为什么使用docker而不是直接部署?
A:不方便转移到其他服务器。同时不容易弄乱服务器环境
Q:docker好处是什么
A:不需要手动更新证书,可以使用二级域名部署其他服务。比如web、mail等等。可以随时添加。
docker
大多数供应商都支持docker快速构建,直接选择即可。服务器多为ubuntu。
更新各种包后,准备开始工作。
更新命令
1 2
| $ apt update $ apt upgrade
|
文件目录
1 2 3 4 5
| |-- docker-compose.yml |-- v2ray | `-- config.json `-- vhost.d `-- ******_location
|
docker-compose.yml
说明:
v2ray下的VIRTUAL_HOST注意填写为二级域名,也可以去掉不填。
同样v2ray下的expose与VIRTUAL_PORT为端口号,应该与*****_location中端口一致。
web1为一般web服务器,开放端口80。
You_Domain_Name 改为你的域名
You_Email 为邮箱,必填
- VIRTUAL_HOST=
You_Domain_Name
- VIRTUAL_PORT=
80
- LETSENCRYPT_HOST=
You_Domain_Name
- LETSENCRYPT_EMAIL=
You_Email
nginx-proxy如名字,详情自行google
letsencrypt-nginx-proxy-companion如名字,详情自行google
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| version: '2'
services: v2ray: image: v2ray/official container_name: v2ray restart: always expose: - "****" volumes: - $PWD/v2ray:/etc/v2ray - $PWD/v2ray/config.json:/etc/v2ray/config.json:ro environment: - VIRTUAL_HOST=**** - VIRTUAL_PORT=****
web1: image: nginx:latest restart: always expose: - "80" environment: - VIRTUAL_HOST=***** - VIRTUAL_PORT=80 - LETSENCRYPT_HOST=*****.*** - LETSENCRYPT_EMAIL=*****@*****.***
nginx-proxy: image: jwilder/nginx-proxy:latest restart: always ports: - "80:80" - "443:443" volumes: - /path/to/certs:/etc/nginx/certs:ro - $PWD/vhost.d:/etc/nginx/vhost.d:ro - /usr/share/nginx/html - /var/run/docker.sock:/tmp/docker.sock:ro labels: - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy"
letsencrypt-nginx-proxy-companion: image: jrcs/letsencrypt-nginx-proxy-companion:latest restart: always volumes: - /path/to/certs:/etc/nginx/certs:rw - $PWD/vhost.d:/etc/nginx/vhost.d:ro - /var/run/docker.sock:/var/run/docker.sock:ro volumes_from: - nginx-proxy
|
TLS转发
在dockec-compose.yml下创建vhost.d文件件,
新建文件You_Domain_Name_location
使用你的域名替换You_Domain_Name,要与web1设置的一致。
注意proxy_pass后的端口与v2ray设置的一致。
1 2 3 4 5 6 7 8
| proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; if ($http_upgrade = "websocket" ) { proxy_pass http://v2ray:****; }
|
v2ray 设置文件config.json
在dockec-compose.yml下创建v2ray文件件,
新建文件config.json
port注意与v2ray设置一致
id改为你的id,可以使用uuidgenerator生成一个。
json写完之后,注意校对格式哦
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| { "inbound": { "port": "****", "protocol": "vmess", "settings": { "clients": [ { "id": "***********", "alterId": 64 } ] }, "streamSettings": { "network": "ws", "wsSettings": { "path": "/" } } }, "outbound": { "protocol": "freedom", "settings": {} } }
|
之后
去用户端里面设置吧。地址You_Domain_Name端口443,记得使用websocket与TLS。
CDN
CloudFlare
DNS中开启websocket
Crypto 中Require Modern TLS关闭
Crypto 中Authenticated Origin Pulls关闭
Crypto 中Opportunistic Encryption关闭
nginx-proxy 的坑
nginx-proxy中,设置转发时www.www.com/path无法正常解析,这个问题3年没有修复过了……
错误重现:vhost.d下,新建www.www.com设置
1 2 3 4 5 6 7 8 9 10
| location /v2ray/ { proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; if ($http_upgrade = "websocket" ) { proxy_pass http://v2ray:****; } }
|
于是只能使用www.www.com_location进行转发。
参考文档
v2ray
参考1
参考2