单纯的使用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)配置大同小异