参考文档:
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
{ "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
|
#[2022-09-05] version: '3.7' services: v2fly: #服务名.不可与其他容器重复 container_name: v2fly #容器名.不可与其他容器重复 image: v2fly/v2fly-core restart: unless-stopped user: "root:root" volumes: - ./v2fly.json:/etc/v2ray/config.json network_mode: "host" #主机模式.无需预先映射端口 |
- 运行容器:docker-compose -f v2fly.yml up -d
WebSocket配置完成!此时已经可以使用客户端V2Ray连接使用!
- V2Ray客户端配置信息范例 (WebSocket直连10000端口):
|
- {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配置文件 最末尾的 “}” 符号前:
|
#v2ray-WebSocket+TLS+Web location /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.log proxy_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端口):
|
- {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是否开启
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
#第一项检查: root@vps:~# sysctl net.ipv4.tcp_available_congestion_control | grep bbr #若已开启bbr,结果通常为以下两种: net.ipv4.tcp_available_congestion_control = bbr cubic reno net.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,立即生效)
|
sudo 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 -p lsmod | grep bbr |
完成开启加速!