0x00 背景

这两天给v2节点配上了ws+tls,但是直连的话速度还是不太理想,于是想用另一个vps中转一下,就有了这篇文章。

0x01 过程

虽然之前也用nginx中转过v2流量,但是从没中转过使用tls的节点,都是普通的使用ws节点而已。于是上网查了很多资料,都说直接配置nginx的证书,然后v2节点就取消tls就好了,但是我又希望有时能直连一下这个节点,如果不配置tls的话,感觉又不是很放心。所以还是坚持继续探索,终于也让我找到了。

0x02 解决方案

在nginx这段我没有配置ssl,所以不用配置证书啥的,就直接给出nginx的配置吧:

server {
        listen 中转节点监听端口;
        server_name 中转节点域名;

        location / {
            proxy_pass http://后端IP或域名:后端监听端口/wspath;  # 若后端开启tls,则需要写https://
            
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
}

0x03 补充说明

之前的迷糊是在于不清楚tls的工作过程,以为中转后客户端也是直接与服务端进行tls握手的,其实真实的情况是,客户端是与nginx直接连接的,而nginx才是与v2服务端握手的一方。也就是说,客户端与nginx的连接 和 nginx与v2服务端的连接是不同的两端连接,两个不同的连接均可自由配置tls。

0x04 一些错误

1.nginx没配置ssl,但是v2客户端配置了tls连接造成的错误

[Warning] failed to handler mux client connection > v2ray.com/core/proxy/vmess/outbound: failed to find an available destination > v2ray.com/core/common/retry: [v2ray.com/core/transport/internet/websocket: failed to dial WebSocket > v2ray.com/core/transport/internet/websocket: failed to dial to (wss://HOST:PORT/):  > tls: first record does not look like a TLS handshake] > v2ray.com/core/common/retry: all retry attempts failed

解决方案:
将v2客户端的tls连接去掉即可。

2.客户端保留了“伪装域名”也就是host字段保留了cdn的域名造成的错误

[Warning] failed to handler mux client connection > v2ray.com/core/proxy/vmess/outbound: failed to find an available destination > v2ray.com/core/common/retry: [v2ray.com/core/transport/internet/websocket: failed to dial WebSocket > v2ray.com/core/transport/internet/websocket: failed to dial to (ws://HOST:PORT/): 404 Not Found > websocket: bad handshake] > v2ray.com/core/common/retry: all retry attempts failed

解决方案:
将客户端中的host字段清空去掉就好了。