在 CentOS 7 上部署 VMess + TLS + WebSocket 代理服务器

2018-02-27 10:49:55来源:https://www.jianshu.com/p/97d5fe92f43f作者:余泽楠人点击

分享



一、前言
1.1 VMess 简介

VMess 是一个新一代的开源加密代理协议。


相比其它加密代理协议,VMess 最大的优点就是其流量特征可以设置得跟普通 Web 流量完全一致,且支持 WebSocket 连接。


而大多数的 Web 服务器均支持反向代理 WebSocket,因此可以很方便地实现网站代理二合一。


如果在此基础上配合 CDN 使用的话,则可以降低世界各地区的访问延迟并隐藏服务器的真实 IP,安全和速度兼得!


1.2 V2Ray 简介

简单点说,V2Ray 就是一个开源的“代理工具箱”。


它采用了模块化设计,可以很方便地进行升级和扩展。并且服务器和客户端可使用相同的软件。


V2Ray 不仅支持 VMess 协议,还可以支持诸如双 S 等常见的代理协议。下面将用它来搭建 VMess 服务器。


→ V2Ray GitHub 项目


1.3 WebSocket 简介

传统的 HTTP(S) 协议并不支持客户端与服务器之间的长连接。


也就是说,每当需要传输数据的时候,服务器与客户端就要建立一条连接;数据传输完成后,连接就会立马拆除。


如果有大量不连续的数据需要传输的话,那么不断地建立-断开连接将造成极大的性能开销,也会造成严重的延迟,更不可能满足代理服务的需要。


而 WebSocket 协议是在原 HTTP(S) 协议的基础上,增加了客户端与服务器之间长连接的支持,可以看作是 Socket over HTTP(S)。


使用 WebSocket 可以大幅降低连接的开销,增强连接的实时性。该协议还是可扩展的,支持数据压缩等高级功能。可以说 WebSocket 潜力无穷。


二、工作原理

首先,您可以将 WebSocket 模式下的 VMess 服务器看作是一台仅允许本地访问普通 Web 服务器。


Nginx 上搭建着一个网站,网站的资料就存放在本地文件系统中。


同时,Nginx 为网站配置了一个特殊的路径。如果客户端访问该路径,Nginx 就会作为一位中间人,负责 VMess 服务器与客户端之间的通信。访问其他路径则访问网站的内容。


而 VMess 服务器会判断客户端是否使用了正确的软件来访问它。如果使用了错误的软件来访问它,会返回一个 400 Bad Request 的错误。


总之,所有的流量都必须流经 Nginx 判断并分流,且流量均为安全的 HTTPS 流量,看起来就像是一个普通的 HTTPS 网站一样,当然也可以使用 CDN(本文不讲)。


如果不考虑密钥泄露等极端情况的话,那么没有第三者可以知道客户端具体访问什么路径以及访问的内容。


以下是该系统的原理图:






三、系统环境
操作系统:CentOS 7.4.1708 最小安装 (已关闭 SELinux)
应用软件: V2Ray 3.6 、Nginx 1.12.2
域名: example.com
现有的 HTTPS 网站

四、安装 V2Ray
4.1 下载 V2ray 软件包


说明
由于代理软件的特殊性,下面的链接随时可能失效。



yum -y install wget unzip && wget "https://github.com/v2ray/v2ray-core/releases/download/v3.6/v2ray-linux-64.zip" && unzip v2ray-linux-64.zip

4.2 安装 v2ray 二进制程序
cp v2ray-v3.6-linux-64/v2ray /usr/bin/

4.3 安装 v2ctl 二进制程序
cp v2ray-v3.6-linux-64/v2ctl /usr/bin/

4.4 安装服务文件
cat << EOF > /lib/systemd/system/v2ray/@.service

以下内容直接粘贴到命令行窗口中按回车即可。


[Unit]
Description=V2Ray Service for %I
After=network.target
Wants=network.target
[Service]
Type=simple
PIDFile=/var/run/v2ray-%i.pid
ExecStart=/usr/bin/v2ray -config /etc/v2ray/%i.json
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF

4.5 创建 V2Ray 日志目录
mkdir /var/log/v2ray

4.6 创建 V2Ray 配置文件目录
mkdir /etc/v2ray

五、配置 V2Ray
5.1 创建配置文件
vi /etc/v2ray/1.json

请按实际情况以及注释提示修改以下内容,修改完成后去除所有注释(包括 #)。


然后在命令行窗口按下 i ,将内容直接粘贴到命令行窗口中,再按下 ESC ,最后输入 :wq 按回车。


{
"log": {
"loglevel": "debug",
"access": "/var/log/v2ray/access.log",
"error": "/var/log/v2ray/error.log"
},

"inbound": {
"port": 10080, # VMess 本地端口,即 Nginx 反向代理的目标端口,如果被占用请修改它。
"listen":"127.0.0.1",
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", # VMess 的 UUID,即密码。
"alterId": 64,
"security": "chacha20-poly1305",
"level": 0
}
]
},

"streamSettings": {
"network": "ws",
"wsSettings": {
"path": "/yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy" # WebSocket 的访问路径,建议使用 UUID。
},
"headers": {
"Host": "example.com" # 访问 WebSocket 的有效主机名,请把 example.com 修改为您自己的域名。
}
}
},

"outbound": {
"protocol": "freedom",
"settings": {
}
},

"dns": {
"servers": [
"8.8.8.8", # DNS 服务器,如果需要可以加以修改。
"8.8.4.4"
]
}
}


说明
UUID 可使用 uuidgen 命令随机生成。



5.2 配置日志自动清理
cat << EOF > /etc/logrotate.d/v2ray

以下内容直接粘贴到命令行窗口中按回车即可。


/var/log/v2ray/*.log {
daily
rotate 5
missingok
notifempty
compress
}
EOF

5.3 启动 V2Ray 服务
systemctl start v2ray@1

如需开机启动,请执行以下命令:


systemctl enable v2ray@1

六、配置 Nginx
6.1 修改网站配置文件

请使用 vim 之类的文本编辑器打开您的站点配置文件,然后按照下面的格式以及提示修改文件。


# 下面是网站的 HTTPS 服务配置段
server {
listen 443 ssl http2;
server_name example.com;

### 加入的内容 ###
location /yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy { # WebSocket 的访问路径
proxy_redirect off;
proxy_intercept_errors on;
proxy_pass http://127.0.0.1:10080; # 如果上面修改过端口的话,这里也需要修改一下。
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
#################

其它配置项……
}

修改完成后记得保存。


6.2 使新配置生效
systemctl reload nginx

七、VMess 客户端的配置


说明
由于 VMess 有多种客户端,各种客户端的配置方法又各不相同,所以下面只说一下关键点的配置。



服务器地址设定为网站的域名。
使用 WebSocket 模式。
服务器端口为 443(标准的 HTTPS 端口)。
启用 TLS。
访问路径设置为 WebSocket 的访问路径。

八、注意事项
VMess 服务器的日志文件在目录 /var/log/v2ray 中,如果遇到问题请尽量尝试自行搜索解决。
VMess 服务器与客户端的时间差(UTC)不得超过 2 分钟,否则将无法连接。使用 OpenVZ 虚拟化技术的云服务器尤其要注意这个问题。

九、参考文献
V2Ray 官网文档
V2Ray 白话文教程
V2Ray WebSockets 模式详解
WebSocket - 维基百科







最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台