参考文档:
GitHub:https://github.com/v2fly/v2ray-core
Docker:https://hub.docker.com/r/v2fly/v2fly-core
Docker:https://hub.docker.com/r/teddysun/v2ray
步骤预览:
- 容器.V2Ray配置后端WS协议(使用 WebSocket 是因为搭配 Nginx/Caddy/Apache 只能用 WebSocket)
- 宝塔.Nginx配置前端HTTPS(443端口)
- 开启BBR加速
本教程说明:
本方案的 TLS 的配置是写入 Nginx 配置中,由 Nginx 来监听 443 端口(443 比较常用,并非 443 不可),然后将流量转发到 V2Ray 的 WebSocket 所监听的内网端口(本例是 10000),V2Ray 服务器端不需要配置 TLS,且可以单独直连使用,即配置好后客户端支持两种握手方式:
- V2Ray客户端 和 V2Ray服务端 WebSocket (10000 端口)直接握手 。(方式简单,方便排错)
- V2Ray客户端 和 Nginx(443 端口)通讯,Nginx 再转发给 V2Ray服务端 WebSocket (1000 端口)握手。(进阶使用)
注意事项:
- V2现在强制启用了VMessAEAD,V2Ray的 config.json 中 ”alterId”现在必须是“0”。
- V2Ray 自 4.18.1 后支持 TLS1.3,如果开启并强制 TLS1.3 请注意 v2ray 客户端版本.
- 请保持服务器和客户端的 wsSettings 严格一致,对于 V2Ray,/ray 和 /ray/ 是不一样的(较低版本的 nginx 的 location 需要写为 /ray/ 才能正常工作)
其他说明:
- 开启了 TLS 之后 path 参数是被加密的,GFW 看不到;
- 主动探测一个 path 产生 Bad request 不能证明是 V2Ray;
- 使用 Header 分流并不比 path 安全, 不要迷信。
- 默认支持IPv6。
- 务必开启BBR(甲骨文Ubuntu),否则Y2B速度只有120K~200K,无法流畅播放1080视频,开启BBR后(无需重启VPS)则Y2B速度提升到400K~1MB,可以流畅播放1080p(2022-09-04 19:56)
V2Ray配置后端WS协议
服务器 V2Ray 配置
- Linux生成随机uuid:cat /proc/sys/kernel/random/uuid
- 服务端 V2Ray 的配置文件:v2fly.json
1234567891011121314151617181920212223242526272829{"inbounds": [{"port": 10000,"listen":"127.0.0.1",//只监听 127.0.0.1,避免除本机外的机器探测到开放了 10000 端口"protocol": "vmess","settings": {"clients": [{"id": "12345678-1234-1234-1234-123456789012",//替换成自己的uuid"alterId": 0}]},"streamSettings": {"network": "ws","wsSettings": {"path": "/fly/" /*自定义路径*/}}}],"outbounds": [{"protocol": "freedom","settings": {}}]}
Docker容器配置V2Ray
- Docker配置文件:v2fly.yml
1234567891011#[2022-09-05]version: '3.7'services:v2fly: #服务名.不可与其他容器重复container_name: v2fly #容器名.不可与其他容器重复image: v2fly/v2fly-corerestart: unless-stoppeduser: "root:root"volumes:- ./v2fly.json:/etc/v2ray/config.jsonnetwork_mode: "host" #主机模式.无需预先映射端口
- 运行容器:docker-compose -f v2fly.yml up -d
WebSocket配置完成!此时已经可以使用客户端V2Ray连接使用!
- V2Ray客户端配置信息范例 (WebSocket直连10000端口):
1- {name: v2fly.ws直连, server: mydomain.me, port: 10000, type: vmess, uuid: 12345678-1234-1234-1234-123456789012, alterId: 0, cipher: auto, tls: false, skip-cert-verify: false, network: ws, ws-opts: {path: /fly/, headers: {Host: mydomain.me}}, udp: true}
Nginx配置前端HTTPS(443端口)
- 宝塔中开启网站域名SSL。
- 将以下代码插入宝塔网站 Nginx配置文件 最末尾的 “}” 符号前:
12345678910111213#v2ray-WebSocket+TLS+Weblocation /fly/ {#与 V2Ray 配置中的 path 保持一致proxy_redirect off;proxy_pass http://127.0.0.1:10000;#假设WebSocket监听在环回地址的10000端口上proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_set_header Host $http_host;# Show realip in v2ray access.logproxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
Nginx配置完成!至此V2Ray客户端可以使用443端口连接服务。(宝塔修改配置后会自动重启Nginx生效,无需手动重启Nginx)
- V2Ray客户端配置信息范例 (TLS通过443端口):
1- {name: v2fly-WebSocket+TLS+Web, server: mydomain.me, port: 443, type: vmess, uuid: 12345678-1234-1234-1234-123456789012, alterId: 0, cipher: auto, tls: true, skip-cert-verify: false, network: ws, ws-opts: {path: /fly/, headers: {Host: mydomain.me}}, udp: true}
甲骨文Ubuntu开启BBR
- 检查BBR是否开启
1234567891011121314151617#第一项检查:root@vps:~# sysctl net.ipv4.tcp_available_congestion_control | grep bbr#若已开启bbr,结果通常为以下两种:net.ipv4.tcp_available_congestion_control = bbr cubic renonet.ipv4.tcp_available_congestion_control = reno cubic bbr#第二项检查:root@vps:~# sysctl net.ipv4.tcp_congestion_control | grep bbr#若已开启bbr,结果如下:net.ipv4.tcp_congestion_control = bbr#第三项检查:root@vps:~# sysctl net.core.default_qdisc | grep fq#若已开启bbr,结果如下:net.core.default_qdisc = fq#第四项检查:root@vps:~# lsmod | grep bbr#若已开启bbr,结果可能如下。并不是所有的 VPS 都会有此返回值,若没有也属正常。tcp_bbr 20480 2
- 启用BBR(无需重启VPS,立即生效)
1234sudo bash -c 'echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf'sudo bash -c 'echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf'sysctl -plsmod | grep bbr
完成开启加速!