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 版本就都搞定了!