文章阅读解释:删除线的命令与文字已失效,无需理会
近期 v2ray 发现漏洞,容易被检测到。详见:
https://github.com/v2ray/v2ray-core/issues/2542
原来单纯的 vmess + TCP (官方脚本一键安装)已经非常危险。根据建议我们必须套上 TLS 保证安全。
这里分享下 v2ray 使用 TCP+TLS分流器 + Domain Socket(即是TCP + TLS + Web + Domain Socket)的配置过程。
相比 TCP,Domain Socket (以下简称 DS) 更为高效。根据测试反馈,速度超过 50Mbps 时,通常会有较明显的性能差距。
DS 仅限分流器与服务端 V2Ray 连接,客户端连接服务器仍然使用 TCP, 即:
TLS over TCP DS 客户端 V2Ray --------------- TLS 分流器 -------- 服务端 V2Ray
TLS 分流器 GitHub:
https://github.com/liberal-boy/tls-shunt-proxy
介绍:
搭建过程(lightsail、ubuntu 16.04):
准备工作:
1、因为涉及到TLS,所以我们要准备好一个域名。任意域名。可以是那种几块钱一年的域名。将域名指向v2ray服务器。可以是子域名。
2、服务器开启 443 端口。不然后面无法自动生成 SSL 证书。
开始搭建:
1、先使用 v2ray 官方安装脚本安装 v2ray
(说明:2020.8.15左右,官方安装脚本更新,安装方式有点改变。详见文章最后的链接):
bash <(curl -L -s https://install.direct/go.sh)
bash <(curl -L -s https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh) systemctl enable v2ray bash <(curl -L -s https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-dat-release.sh)
如果你之前装过老版本,则再执行一次v2ray就会更新到最新版本。
2、安装 TLS分流器
还是一键安装脚本(linux-amd64):
bash <(curl -L -s https://raw.githubusercontent.com/liberal-boy/tls-shunt-proxy/master/dist/install.sh)
安装完之后,我们可以在 /etc/tls-shunt-proxy/config.yaml
这里看到配置文件
3、配置 分流器
编辑配置文件 /etc/tls-shunt-proxy/config.yaml
可以配置的地方很多,这里我只把我们需要用到的列出来
# 监听地址和端口,就是 v2ray客户端 需要指向的地址和端口。端口一般保持默认的443即可。 listen: 0.0.0.0:443 vhosts: # 将 example.com 改为你的域名 - name: example.com # 这里两项都需要 true,否则你就需要手动管理证书了 tlsoffloading: true managedcert: true alpn: h2,http/1.1 # 如果不需要兼容 tls12, 可改为 tls13 protocols: tls12,tls13 http: handler: fileServer # /var/www/html 是静态网站目录 保持默认即可 args: /var/www/html default: handler: proxyPass args: unix:/tmp/v2ray-ds/v2ray.sock
4、配置 v2ray
下载、编辑 v2ray 配置文件,替换UUID即可(说明:新的脚本将配置文件分开为数个文件,个人觉得逐一编辑还是麻烦,所以这里仍然采用原来的config.json的单文件方式)
cd /usr/local/etc/v2ray/ && rm * && wget http://pikachu.im/test/config.json && nano config.json
(注意下 port 端口这个参数,这里因为采用了 Domain Socket 的方式,已经不走端口,所以保持默认即可,理论上写什么端口都行)
{ "inbounds": [ { "protocol": "vmess", "listen": "127.0.0.1", "port": 40001, "settings": { "clients": [ { "id": "f2675e5c-9ad7-4367-836a-8341117d0a6f" } ] }, "streamSettings": { "network": "ds", "dsSettings": { "path": "/tmp/v2ray-ds/v2ray.sock" } } } ], "outbounds": [ { "protocol": "freedom" } ] }
5、配置 v2ray用户并在v2ray服务启用 v2ray.sock(新版本安装脚本默认用 nobody 用户运行v2ray,故这一步可以放弃了)
创建用于运行v2ray的用户,且不允许执行解释器
useradd v2ray -s /usr/sbin/nologin
修改v2ray.service文件,加入User和Group两项,配置 Domain Socket
vim /etc/systemd/system/v2ray.service
(注意这里会自动执行 rm、mkdir、rm、chmod这些命令,请根据自己的系统配置对应的路径,我这里是Ubuntu)
(这里很容易出错,建议Ubuntu的直接复制粘贴)
[Unit] Description=V2Ray Service After=network.target nss-lookup.target [Service] User=nobody CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE NoNewPrivileges=true # 下面这4行就是 Domain Socket 的配置,其他的都是保持默认 ExecStartPre=/bin/mkdir -p /tmp/v2ray-ds ExecStartPre=/bin/rm -rf /tmp/v2ray-ds/*.sock ExecStartPost=/bin/sleep 1 ExecStartPost=/bin/chmod 777 /tmp/v2ray-ds/v2ray.sock Environment=V2RAY_LOCATION_ASSET=/usr/local/share/v2ray/ ExecStart=/usr/local/bin/v2ray -confdir /usr/local/etc/v2ray/ Restart=on-failure [Install] WantedBy=multi-user.target
执行 systemctl daemon-reload
为日志目录赋权
chown -R v2ray:v2ray /var/log/v2ray
6、启用服务
service tls-shunt-proxy start #执行后需等待10秒左右,等证书下载完成 ll /etc/ssl/tls-shunt-proxy/ #查看证书,如出现 certificates 文件夹则表示证书申请成功,可以执行下一步 service v2ray start
这样就启动了 TLS分流器、v2ray
7、客户端连接
{ "inbounds": [ { "port": 1080, "listen": "127.0.0.1", "protocol": "socks" } ], "outbounds": [ { "protocol": "vmess", "settings": { "vnext": [ { "address": "example.com", "port": 443, "users": [ { "id": "f2675e5c-9ad7-4367-836a-8341117d0a6f", "security": "none" } ] } ] }, "streamSettings": { "network": "tcp", "security": "tls" } } ] }
简要说明:
客户端使用域名连接服务端,使用 443 端口,加密可以选 无 或者 auto。设置为 tcp + tls。“跳过证书验证”设为 false。
done!
检测分流器运行状况(出现问题时可执行查看)
sudo -u tls-shunt-proxy /usr/local/bin/tls-shunt-proxy -config /etc/tls-shunt-proxy/config.yaml
故障排查
按照上面的教程操作后,仍然无法顺利连接的话,可以检查下面2点。
1、服务端、客户端的时间是否正确
这个出错的概率很低,但是我遇到过服务器时间错误的情况,纠正时间就解决了
# 将系统时区改为上海时间 (亦即CST时区) ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 查看时间、时区 date -R # 校准时间 ntpdate -u 1.cn.pool.ntp.org # 设置系统硬件时间,与操作系统的软件时间同步 hwclock -w # 重启分流器、v2ray,使v2ray正常运行 service tls-shunt-proxy restart service v2ray restart
2、查看证书是否已生成
发现有时候证书无法自动生成
路径应该为: /etc/ssl/tls-shunt-proxy/certificates/xxxxxxxxxxx/
那么我们就手动生成证书:
wget https://dl.eff.org/certbot-auto chmod +x ./certbot-auto ./certbot-auto certonly
生成证书后,在 /etc/tls-shunt-proxy/config.yaml
里设置 managedcert: false
,然后在下面指定证书的路径,重启分流器和v2ray就行了。
记得证书要给予读取权限(644)。比如:
chmod 644 privkey.pem
v2ray 官方GitHub:
https://github.com/v2fly/v2ray-core
参考教程:
https://guide.v2fly.org/advanced/tcp_tls_shunt_proxy.html
近期官方安装脚本更新的说明: