单纯的使用V2Ray似乎并不安全,于是就有了加密伪装等操作。网上可能存有很多一键搭建脚本,如果服务器只运行V2Ray还好,如果还运行网站可能多多少少会有些问题,于是就需要手动搭建….
前言
本文主要参考新 V2Ray 白话文指南。关于v2ray与v2fly,可以粗略的认为v2ray和v2fly相同。通过本文教程,可以让一个人畜无害的网站夹杂私货。
在开始你之前,你需要有一个解析指向你的服务器IP的域名。你还需要有关于此域名的SSL证书(如果没有可以参考上篇文章将WordPress迁移至Docker及Https部署中的HTTPS证书申请部分,证书申请方式并不唯一,请自行解决)。
本教程操作环境为Debian 10,全部操作均在Root权限下完成。
为什么选择Nginx+WebSocket+TLS+VLESS?首先Nginx是一个优秀的高性能的HTTP和反向代理web服务器;选用WebSocket+TLS而非更好的XTLS是因为WS可以通过CDN对域名和服务器IP进行一定程度上保护;至于VLESS,VLESS是一个无状态的轻量传输协议,它分为入站和出站两部分,可以作为 V2Ray 客户端和服务器之间的桥梁。与 VMess 不同,VLESS 不依赖于系统时间,认证方式同样为 UUID,但不需要 alterId,其本身并不自带加密,所以需要Nginx来部署加密信道(TLS)。为什么不选择性能更好表现更优秀的Trojan、Trojan-GO,因为有关文档太少,而且解释不够清晰。
V2Ray安装
0.安装前你需要准备好配置文件config.json,这里给个模板如下。
{
"log": {
"access": "/var/log/v2ray/access.log",
"error": "/var/log/v2ray/error.log",
"loglevel": "warning"
},
"inbounds": [
{
"port": 65535,
"protocol": "vless",
"settings": {
"clients": [
{
"id": "efbd5a8f-a70d-498a-a82c-65d70902bdb9",
"level": 1,
"alterId": 0
}
],
"decryption": "none"
},
"listen": "0.0.0.0",
"streamSettings": {
"network": "ws",
"wsSettings": {
"path": "/path"
}
},
"sniffing": {
"enabled": true,
"destOverride": [
"http",
"tls"
]
}
}
],
"outbounds": [
{
"protocol": "freedom",
"settings": {
"domainStrategy": "UseIP"
},
"tag": "direct"
},
{
"protocol": "blackhole",
"settings": {},
"tag": "blocked"
},
{
"protocol": "mtproto",
"settings": {},
"tag": "tg-out"
}
],
"dns": {
"servers": [
"https+local://cloudflare-dns.com/dns-query",
"1.1.1.1",
"1.0.0.1",
"8.8.8.8",
"8.8.4.4",
"localhost"
]
},
"routing": {
"domainStrategy": "IPOnDemand",
"rules": [
{
"type": "field",
"ip": [
"0.0.0.0/8",
"10.0.0.0/8",
"100.64.0.0/10",
"127.0.0.0/8",
"169.254.0.0/16",
"172.16.0.0/12",
"192.0.0.0/24",
"192.0.2.0/24",
"192.168.0.0/16",
"198.18.0.0/15",
"198.51.100.0/24",
"203.0.113.0/24",
"::1/128",
"fc00::/7",
"fe80::/10"
],
"outboundTag": "blocked"
},
{
"type": "field",
"inboundTag": ["tg-in"],
"outboundTag": "tg-out"
},
{
"type": "field",
"protocol": [
"bittorrent"
],
"outboundTag": "blocked"
}
]
},
"transport": {
"kcpSettings": {
"uplinkCapacity": 100,
"downlinkCapacity": 100,
"congestion": true
}
}
}
有关此模板,你需要修改第9行端口号65535(这个是v2ray运行端口,建议填写非80和443端口,此外要在服务器供应商的防火墙禁用入站访问此端口),第25行伪装路径/path(注意‘/’开头,关于路径你可以理解为用户名),以及第14行idefbd5a8f-a70d-498a-a82c-65d70902bdb9,其格式是UUID,可以参考本文后面的UUID生成进行生成(关于id你可以理解为密码)。
1.v2ray安装
可以参考之前文章[科学上网]一键V2Ray,配置过程随意填写,最后将其中的config.json替换即可。这里我选择了用Docker安装。如果你选择了脚本一键安装可忽略剩下有关docker的内容
1.1docker安装
docker安装请参考上篇文章将WordPress迁移至Docker及Https部署的有关部分。
1.2docker下v2ray安装
1.2.1获取最新镜像
docker pull v2fly/v2fly-core
1.2.2进入存有config.json目录将其复制到一个固定位置方便维护。
mkdir /etc/v2ray cp config.json /etc/v2ray/config.json
1.2.3启动容器
docker run --restart=always -d --name v2ray -v /etc/v2ray:/etc/v2ray -p 127.0.0.1:65535:65535 v2fly/v2fly-core v2ray -config=/etc/v2ray/config.json
注意这里端口号一定要与config.json中你设置的端口号一致。127.0.0.1代表本机环回ip,防止被外部恶意连接。如果返回一串16进制字符串,则表示运行成功。
到此V2Ray就算安装完成。
有关docker下v2ray升级(修改config.json也请参照此流程)
获取最新镜像(与之前命令一致)
docker pull v2fly/v2fly-core
停止并删除旧容器(这里并不会删除配置文件)
docker container stop v2ray docker container rm v2ray
启动新容器(与之前命令一致)
docker run --restart=always -d --name v2ray -v /etc/v2ray:/etc/v2ray -p 127.0.0.1:65535:65535 v2fly/v2fly-core v2ray -config=/etc/v2ray/config.json
其他有关v2ray的docker命令
#查看日志 docker container logs v2ray #停止v2ray docker container stop v2ray #启动v2ray,注意是start而非run docker container start v2ray #重启v2ray docker container restart v2ray
UUID生成
UUID有专门的生成网站,也可以通过控制台运行下面的JS代码生成。
function uuid() {
var s = [];
var hexDigits = "0123456789abcdef";
for (var i = 0; i < 36; i++) {
s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
}
s[14] = "4";
s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);
s[8] = s[13] = s[18] = s[23] = "-";
var uuid = s.join("");
return uuid;
}
具体生成方法是:在浏览器(任意网页标签),按F12打开开发者工具,切换到控制台(console)标签,将上面代码复制粘贴进入控制台,然后输入执行uuid(),即可得到一串uuid。具体如下图。

Nginx反向代理,及HTTPS部署。
和之前的将WordPress迁移至Docker及Https部署的有关部分大同小异。这里就简单叙述以下。
1.安装Nginx
apt update apt install nginx
启动并添加开机启动Nginx
systemctl enable nginx systemctl start nginx
2.修改全局配置(这里可以只留TLSv1.3以获取更好的安全性,也可以保留TLSv1.2获取更好的兼容性。)
# vim /etc/nginx/nginx.conf #ssl_protocols TLSv1.0 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE ssl_protocols TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
3.创建站点配置文件(名字随意)
touch /etc/nginx/sites-available/v2ray ln -s /etc/nginx/sites-available/v2ray /etc/nginx/sites-enabled/v2ray
4.修改配置文件/etc/nginx/sites-available/v2ray如下(根据注释掉的内容自行修改)
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
# 证书路径,自行修改
ssl_certificate /root/ssl/v2ray.crt;
# 证书私钥路径,自行修改
ssl_certificate_key /root/ssl/v2ray.key;
# 网站路径/var/www/html,根据跟人情况自行修改。如果非本地搭建伪装网站可忽略下面一行
root /var/www/html;
# 默认主页,如果非本地搭建伪装网站可忽略下面一行
index index.html index.htm index.nginx-debian.html;
# 绑定域名,请自行修改
server_name domain.com;
# 禁止纯ip访问
if ($host ~ "\d+\.\d+\.\d+\.\d") {
return 400;
}
# 伪装路径path,请自行修改,需要与config.json一致,下面这个location是核心配置
location /path {
# 如果非websocket协议返回403
if ($http_upgrade != "websocket") {
return 403;
}
proxy_redirect off;
# v2ray运行地址,注意修改最后端口号,需要与config.json一致
proxy_pass http://127.0.0.1:65535;
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;
}
# 伪装站点https://www.baidu.com可以自行修改,如果是本地搭建伪装网站请开头添加#注释下面三行
location / {
proxy_pass https://www.baidu.com;
}
# 本地搭建伪装网站请去掉下面三行开头的#,并在上面三行开头添加#注释。
# location / {
# try_files $uri $uri/ =404;
# }
}
到此,服务端的配置就全部完成。有关开启BBR加速等方面的信息可以参考之前文章(建议开启BBR加速)。此外,你可以对域名启动Cloudflare等CDN减速器对域名、IP进行保护,开启CDN不影响V2ray的连接,但可能增加连接延时、降低传输速率。
客户端配置
客户端(V2RayN)配置参考如下,其他客户端(V2RayNG,V2RayU)配置大同小异


文章有(1)条网友点评
version: ‘3’
services:
v2ray:
image: v2fly/v2fly-core
container_name: v2ray
restart: always
volumes:
– /etc/v2ray:/etc/v2ray
ports:
– “127.0.0.1:22000:22000”
command: run -c /etc/v2ray/config.json
这个是 docker-compose.yaml