小记
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