由于近期TCP阻断频繁,于是部署基于WebSocket+TLS+Web的v2ray,将代理流量通过TLS加密,以此达到通过V2Ray访问任何网络都显示访问一个HTTPS网站,隐蔽性更高,也更安全。当然,这本来就是完整、真正的TLS流量。另外,这种TLS代理在速度或者说效率上对比TCP并没有什么优势,大家酌情部署!
申请域名和填写DNS记录
首先你要注册一个免费域名,这个可以到Freenom上免费搞一个,不多讲。
域名注册好后,需要添加两条DNS记录,建议使用Cloudflare的DNS解析,如果IP被墙可以使用它的CDN复活,没被墙就不建议使用了,毕竟减速CDN不是白叫的。添加两条DNS解析记录,如果没有v6IP的话,就填一个v4IP,如下:
Name (prefix) |
Type |
TTL |
Target |
|
A |
3600 |
这里填写vps上的v4IP |
|
AAAA |
3600 |
这里填写vps上的v6IP |
上面完成后,就开始服务端的配置了。
服务端配置Nginx
安装Nginx
apt-get install nginx
配置Nginx的Server文件
vi /etc/nginx/sites-available/default
修改配置如下:
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
| server { listen 80; listen [::]:80; //这是IPv4和IPv6的80端口监听 server_name xxxx.com; //域名 // 下面是真正的ws转发给v2ray location /ray { //与V2Ray配置中的path保持一致 proxy_redirect off; proxy_pass http://127.0.0.1:10086; //假设WebSocket监听在环回地址的10086端口上 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; } }
server { listen 443 ssl http2; //这是IPv4和IPv6的443端口监听及ssl和http2支持 listen [::]:443 ssl http2; server_name xxxx.com; //域名 ssl_certificate /etc/letsencrypt/live/xxxx.com/fullchain.pem; //证书路径,xxxx.xxx改成你的域名 ssl_certificate_key /etc/letsencrypt/live/xxxx.com/privkey.pem; location /ray { // path路径 proxy_redirect off; proxy_pass http://127.0.0.1:10086; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; // 下面是realip日志,在access.log里面,可留可删除,随意 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
|
对于已经用nginx搭建网站的用户,就更简单了,只要在443端口下添加以下ws转发就好了。
1 2 3 4 5 6 7 8 9
| // 下面是真正的ws转发给v2ray location /ray { //与V2Ray配置中的path保持一致 proxy_redirect off; proxy_pass http://127.0.0.1:10086; //假设WebSocket监听在环回地址的10086端口上 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; }
|
下面是nginx.conf完整配置实例,注意修改域名和证书文件夹名。
vi /etc/nginx/nignx.conf
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 52 53 54 55 56 57 58 59 60
| user nginx; pid /run/nginx.pid; worker_processes auto; worker_rlimit_nofile 51200;
events { worker_connections 1024; multi_accept on; use epoll; }
http { server_tokens off; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 120s; keepalive_requests 10000; types_hash_max_size 2048; include /etc/nginx/mime.types;
access_log off; error_log /dev/null;
server { listen 80; listen [::]:80; server_name xxxx.com;
location /ray { proxy_redirect off; proxy_pass http://127.0.0.1:10086; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; } }
server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name xxxx.com; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; ssl_certificate /etc/letsencrypt/live/xxxx.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/xxxx.com/privkey.pem; location /ray { proxy_redirect off; proxy_pass http://127.0.0.1:10086; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } }
|
如果你只用80端口的话是没必要去申请证书的,配置好v2ray的config.json文件就可以直接用的,当然这就只能是ws代理,不支持tls加密了。443端口需要申请ssl证书,往下看。
申请免费SSL证书
安装certbot
apt install certbot
注: 生成证书前请关闭服务器的Apache或Nginx,否则会生成失败。
certbot certonly --standalone --email 你的邮箱 -d xxxx.com(域名) -d www.xxxx.com
在完成Let’s Encrypt证书的生成之后,我们会在/etc/letsencrypt/live/xxxx.com/
域名目录下有4个文件就是生成的密钥证书文件。
1 2 3 4 5 6 7
| cert.pem - used for OCSP stapling in Nginx >=1.3.7.
chain.pem - will break many server configurations, and should not be used without reading further documentation
fullchain.pem - 在大多数服务器软件中使用的证书文件。
privkey.pem - 证书私钥
|
在Nginx环境下,那就需要用到fullchain.pem
和privkey.pem
两个证书文件,在部署Nginx的时候只要将对应的ssl_certificate
和ssl_certificate_key
路径设置成生成的2个文件就可以。
打开/etc/nginx/sites-available/default
填入如下内容:(上面的nginx的配置文件已经添加进去了)
1 2
| ssl_certificate /etc/letsencrypt/live/xxxx.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/xxxx.com/privkey.pem;
|
Let’s Encrypt免费SSL证书有效期为90天, 需要我们自己手工更新续期才可以,手工续期如下命令:
1 2 3 4 5
| systemctl stop nginx
certbot certonly
systemctl start nginx
|
看到这里是不是发现,俺在搭建一个完整的https网站,不错,到这一步你只要写一个html静态页面放在根目录下,这个站点就可以通过浏览器正常访问了。闲话不多说,往下看。
V2Ray服务端配置
证书申请好了以后,配置好nginx后,就要安装v2ray和修改服务端的配置文件了。
安装v2ray:
1 2 3 4 5
| // 下载脚本 $ wget https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh
// 安装v2ray $ bash install-release.sh
|
修改v2ray配置如下:
vi /usr/local/etc/v2ray/config.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 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| { "inbounds": [ { "port": 10086, "listen":"127.0.0.1", "protocol": "vmess", "settings": { "clients": [ { "id": "b831381d-6324-4d53-ad4f-8cda48b30811", "alterId": 64 } ] }, "streamSettings": { "network": "ws", "wsSettings": { "path": "/ray" } } } ], "outbounds": [ { "protocol": "freedom", "settings": { "domainStrategy": "UseIP" } } ], "dns": { "servers": [ "https+local://1.1.1.1/dns-query", "1.1.1.1", "8.8.8.8", "localhost" ] } }
|
systemctl start nginx
//启动nginx
systemctl start v2ray
//启动v2ray
bash install-release.sh
//更新v2ray
bash install-release.sh --remove
//移除v2ray
到此就可以开启Nginx和V2Ray了,服务端也就全部完成,下面就是折腾客户端了。另,这些配置文件建议先在本地修改好后再scp到服务端,因为服务端上的vi编写js文件容易遇到缩进问题。
V2Ray客户端设置
首先从V2Ray官网下载软件。
客户端config.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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| { "inbounds": [ { "port": 1080, "listen": "127.0.0.1", "protocol": "socks", "sniffing": { "enabled": true, "destOverride": ["http", "tls"] }, "settings": { "auth": "noauth", "udp": false } } ], "outbounds": [ { "protocol": "vmess", "settings": { "vnext": [ { "address": "xxxx.xxx", "port": 443, "users": [ { "id": "b831381d-6324-4d53-ad4f-8cda48b30811", "alterId": 64 } ] } ] }, "streamSettings": { "network": "ws", "security": "tls", "wsSettings": { "path": "/ray" } } } ] }
|
客户端白话配置如下,主要就是选择ws传输协议,填上type路径,还有打开tls传输。
80端口配置,不需要打开tls传输,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 地址(address) : xxxx.xxx //这里填写你的域名或IP
端口(port) : 80
用户ID(uuid) : 这里填写你的UUID
额外ID(alterid) : 64
加密方式(security) : auto
传输协议(network) : ws
伪装域名(host) : cloudfront.com //可选项
路径(type) : /ray
|
443端口配置,443端口需要打开底层tls传输,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 地址(address) : xxxx.xxx //这里填写你的域名或IP
端口(port) : 443
用户ID(uuid) : 这里填写你的UUID
额外ID(alterid) : 64
加密方式(security) : auto
传输协议(network) : ws
伪装域名(host) : cloudfront.com //可选项
路径(type) : /ray
底层传输 :tls
|
80和443端口都可以使用,到这也就全部完成了。有建站经验的网友应该很容易上手。提醒一下,用之前清理一下浏览器缓存。
参考: