前言
久违地接触点新事物,尝试使用 acme 申请 TLS 证书,搭建一个 VMess + WebSocket + TLS + Web 的节点。
方案概述
- 域名解析到对应的节点服务器上。
- 使用官方的安装脚本安装
V2Ray。 - 使用
acme申请TLS证书。 - 配置
VMess + WebSocket + TLS节点。 - 通过 Nginx 建立伪装网站。
操作步骤
一、域名解析
前往域名托管处操作。
二、安装 V2Ray
官方脚本仓库:v2fly/fhs-install-v2ray
运行脚本后,不需要进行任何其他操作,V2Ray 在安装后也不会启动:
bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)
三、申请 SSL 证书
# 安装所需软件
apt-get install curl
apt-get install socat
# 安装 acme
curl https://get.acme.sh | sh
# 添加软链接
ln -s /root/.acme.sh/acme.sh /usr/local/bin/acme.sh
# 切换 CA 机构
acme.sh --set-default-ca --server letsencrypt
# 申请证书
acme.sh --issue -d $your_domain --standalone -k ec-256
确保你在 V2Ray 安装完成后再进行下一步证书安装过程,否则你没有 /usr/local/etc/v2ray 这个目录:
# 安装证书
acme.sh --install-cert -d $your_domain --ecc --key-file /usr/local/etc/v2ray/server.key --fullchain-file /usr/local/etc/v2ray/server.crt --reloadcmd "systemctl restart v2ray"
四、配置 VMess + WebSocket + TLS 节点
需要更新的配置文件为 /usr/local/etc/v2ray/config.json:
vi /usr/local/etc/v2ray/config.json
配置文件参考:
- 节点服务在
18388端口 - 只监听来自
127.0.0.1的请求 - 用户
ID为 UUID 形式,最好通过v2ray uuid命令重新生成。 - 节点路径为
/download,后续会被 Nginx 分流。
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"port": 18388,
"listen":"127.0.0.1",
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "76a9f1b5-2fe2-4715-ba0d-e4b0d66ae30e",
"alterId": 64
}
]
},
"streamSettings": {
"network": "ws",
"wsSettings": {
"path": "/download"
}
}
}
],
"outbounds": [
{
"protocol": "freedom",
"settings": {}
}
]
}
如果你不想分流的只想搭建一个简单的 TCP + TLS 节点的话,可以使用下面的配置:
{ "log": { "loglevel": "warning" }, "inbounds": [ { "port": 8443, "protocol": "vmess", "settings": { "clients": [ { "id": "76a9f1b5-2fe2-4715-ba0d-e4b0d66ae30e", "alterId": 64 } ] }, "streamSettings": { "network": "tcp", "security": "tls", "tlsSettings": { "certificates": [ { "certificateFile": "/usr/local/etc/v2ray/server.crt", "keyFile": "/usr/local/etc/v2ray/server.key" } ] } } } ], "outbounds": [ { "protocol": "freedom", "settings": {} } ] }客户端配置,以
Surge为例:
修改完配置,重启下服务:
systemctl daemon-reload
systemctl restart v2ray
如果启动失败的话,需要修改下
v2ray.service的启动用户:vi /etc/systemd/system/v2ray.service从
nobody修改为root:... [Service] User=root ...
五、通过 Nginx 进行伪装、分流
没有 Nginx 的话先安装:
apt-get install nginx
Nginx 的配置文件编辑 /etc/nginx/nginx.conf 即可:
vi /etc/nginx/nginx.conf
在 http 配置段内增加:
server {
listen 80;
# 修改为你的域名
server_name $your_domain;
rewrite ^(.*)$ https://${server_name}$1 permanent;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
# 修改为你的域名
server_name $your_domain;
ssl_certificate /usr/local/etc/v2ray/server.crt;
ssl_certificate_key /usr/local/etc/v2ray/server.key;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# 伪装网址
location / {
proxy_pass https://www.hostloc.com;
proxy_ssl_server_name on;
proxy_redirect off;
sub_filter_once off;
sub_filter "www.hostloc.com" $server_name;
proxy_set_header Host "www.hostloc.com";
proxy_set_header Referer $http_referer;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header User-Agent $http_user_agent;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Accept-Encoding "";
proxy_set_header Accept-Language "zh-CN";
}
# 分流到 V2Ray 服务
location /download {
proxy_redirect off;
proxy_pass http://127.0.0.1:18388;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
之后重启下 Nginx:
nginx -s reload
service nginx restart
访问下域名,如果打开(跳转到)目标的伪装网站:

并且访问分流的路径返回 Bad Request:

就说明节点服务端启动成功了。
客户端配置,以 Surge 为例(注意端口为 443,路径为 /download):

六、进阶操作
1. 开启 TCP BBR 加速
# 修改系统变量
echo net.core.default_qdisc=fq >> /etc/sysctl.conf
echo net.ipv4.tcp_congestion_control=bbr >> /etc/sysctl.conf
# 保存生效
sysctl -p
确实是否生效:
sysctl net.ipv4.tcp_available_congestion_control

2. 定时更新证书和重启服务
原博文没有提到,但是在使用 acme.sh --install-cert 安装证书的时候其实就已经做了:
# 安装证书
acme.sh --install-cert -d $your_domain --ecc --key-file /usr/local/etc/v2ray/server.key --fullchain-file /usr/local/etc/v2ray/server.crt --reloadcmd "systemctl restart v2ray"
我们指定了 --reloadcmd "systemctl restart v2ray" 证书更新的时候重启 V2Ray,这就会使得新证书被正确使用。
参考文章:
