2018年03月01日

小记

ssrtls被爆,大规模封禁来袭,转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:不需要手动更新证书,可以使用二级域名部署其他服务。比如webmail等等。可以随时添加。

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下的exposeVIRTUAL_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,记得使用websocketTLS

CDN

CloudFlare

DNS中开启websocket

CryptoRequire Modern TLS关闭

CryptoAuthenticated Origin Pulls关闭

CryptoOpportunistic 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