V2ray Vmess Websocket+TLS+web Nginx 配置技术
真的很累,超级坑,不过花了两天多的时间,总算是弄好了。期间遇到很多低级陷阱,这些坑稍不留意就不行了,加上 V2ray 报错特别不友好,日志也是含糊,网上随便一搜,都是说时间问题,其实,时间不可能会是问题,现在都 2022 年了,设备的时间基本都是准确了!
我遇到的第一个问题,就是 alterId 问题,这个实在是太奇怪了,加上了 alterId 就不行,删除就可以,所以如果大家看白话文教程,一定会把你往死里坑。并且,目前为止,网上找不到一个完完整整可以使用无误的配置,都是一个大概,这种大概特别的坑人。再者,V2ray 的技术更新和版本更迭特别快,文档是更不上的,所以,这是玄学啊,除非你是一个大神,能够一下子就完全弄明白了整个系统的 golang 源码。
另外,我遇到的一些坑就是,服务器上的配置文件语法错误竟然不报错,没错,不报错!导致很多时候 V2ray.service 根本没有启动,这样耗费了很多精力啊。
好了,不多唠叨了,其实核心技术应该没有多少,不过系统太大,没法一下子弄明白,加上官方文档一坨屎,和技术更迭太快,是个玄学,一般人弄不懂!
分享一下全部的配置吧!
client:
{ "inbounds": [ { "port": 1080, "listen": "127.0.0.1", "protocol": "socks", "sniffing": { "enabled": true, "destOverride": ["http", "tls"] }, "settings": { "auth": "noauth", "udp": false } } ], "outbounds": [ { "protocol": "vmess", "settings": { "vnext": [ { "address": "x.com", "port": 443, "users": [ { "id": "x" ,"email": "[email protected]" } ] } ] } , "streamSettings": { "network": "ws", "security": "tls", "wsSettings": { "acceptProxyProtocol": false, "path": "/ray", // "headers": { // "Host": "v2ray.com" // }, "maxEarlyData": 1024 } } } ] }
nginx:
server { listen 443 ssl; listen [::]:443 ssl; ssl on; ssl_certificate /path/x.pem; ssl_certificate_key /path/x.pem; error_log /var/log/nginx/x.error.log; # ssl_session_timeout 1d; # ssl_session_cache shared:MozSSL:10m; # ssl_session_tickets off; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 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 on; server_name x.com; location /ray { if ($http_upgrade != "websocket") { return 404; } proxy_redirect off; proxy_pass http://127.0.0.1:6000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; # Show real IP in v2ray access.log proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; #HSTS }
server:
{ "log": { "loglevel": "warning", "access": "/var/log/v2ray/access.log", "error": "/var/log/v2ray/error.log" }, "inbounds": [ { "port": 6000, "listen":"127.0.0.1", "protocol": "vmess", "sniffing": { "enabled": true, "destOverride": ["http", "tls"] }, "settings": { "clients": [ { "id": "x", "email": "[email protected]" } ], "disableInsecureEncryption": true } , "streamSettings": { "network": "ws", "wsSettings": { "path": "/ray" } } } ], "outbounds": [ { "protocol": "freedom", "settings": {} } ] }
上面就是锦囊!
V2ray 的 listen 只能是 ipv6,这个也是个麻烦事!
后续:
发现在选择客户端的问题上也有很大的讲究,服务器上最开始安装的事 v4.44.0,客户端在 MacOS 上使用的是 4.31.0,没有任何问题,后面在树莓派上用自动脚本安装的 v2fly 核心包,死活不能成功代理,使用 curl --socks5 127.0.0.1:x https://www.google.com/ 或者 curl -x socks5h://127.0.0.1:x https://www.google.com/ 测试死活不行,这个事情困扰了我很久,后面使用 Arch Linux 再次安装客户端,还是不行。后来我发现 Mac 上是直接下载的,安装了 4.31.0 版本,可能是我运气好,如果 Mac 上安装的是高版本,估计也是一样不行,可能后续的版本做了一些新的功能,文档上面没有体现出来,官方的文档乱的不行,推荐的客户端很多都不维护了,实在是杂乱不堪啊!客户端全部换成了 4.31.0 版本就都搞定了!