0x00 背景
前两天搭建了个sspanel,后端主要使用v2ray-poseidon。之前没用面板的时候,一直是使用中转节点,安装nginx来反代节点,nginx 反代节点的教程前天也发出来了,大家有兴趣也可以看看。但是那篇文章只写道了如何反代节点,而没有提到如何将这种方式与sspanle搭配使用。
之前使用nginx反代节点的过程中,在sspanel遇到的问题主要是:在sspanel新建这个中转节点后,面板中总是显示灰色不可用状态,尽管将配置导入v2ray客户端是可用的。
这个问题困扰了我很久,今天突然就想通了,造成这个问题的主要原因是:面板的节点ID与这个落地节点的ID不匹配,因为落地节点也作为一个独立的节点导入到了面板中,而节点ID又是自增的无法重复设置,所以就会产生这样的问题。
0x01 解决过程
今天突然发现poseidon的教程中,有服务端多开v2ray的教程,于是我想,那我在这个节点开多一个v2ray实例就行啦!
1. 使用docker多开v2ray实例用于中转节点连接
1)复制目录
cd /root/v2ray-poseidon/docker/sspanel
cp -a ws-tls ws-tls-2
cd ws-tls-2
2)修改config.json
配置nodeId为面板中新建的中转节点ID,然后将acceptProxyProtocol 选项值改为 true。
3) 修改docker-compose.yml
container_name:v2ray-ws-tls-2
ports 下面的端口改成其它端口,不然会和原 v2ray-poseidon 出现端口冲突
4) 启动
dc up -d
2. 中转节点配置
1)安装 HAProxy
yum -y install haproxy
2)修改HAProxy 配置文件
清空默认配置
echo '' > /etc/haproxy/haproxy.cfg
举例,现在我有个中转分配的端口为 20001,需要转发 v2ray.poseidon-gfw.cc
frontend sg1_frontend
bind *:20001
default_backend sg1_server
backend sg1_server
server s1 sg1-test-trojanp.poseidon-gfw.cc:443 send-proxy
如果需要中转多个落地机,可以复制上面的内容,比如
# 这是第一个
frontend sg1_frontend
bind *:20001
default_backend sg1_server
backend sg1_server
server s1 sg1-test-trojanp.poseidon-gfw.cc:443 send-proxy
# 这里是第二个
frontend jp1_frontend(这个是可以随便改的,每个中转端口一个名字,别重就行)
bind *:20002
default_backend jp1_server(这里必须为落地的名字, backend 后面的内容)
backend jp1_server(此处为落地的名字,可以随便改,每个落地一个名字,别重就行)
server s1 jp1-test-trojanp.poseidon-gfw.cc:443 send-proxy
# ... ... 还可以有更多
3)重启 HAProxy
systemctl restart haproxy
3. sspanel面板配置
由于我是ws + tls,所以面板中的节点地址配置如下:
落地机器ip或域名;落地机器端口;alterid;tls;ws;path=/|server=中转机器ip或域名|outside_port=中转机器端口
下面给出其他方案的节点地址配置:
// TCP 示例,请注意后面有两个分号
非CDN域名或者ip;非0;2;tcp;;
// WS
非CDN域名或者ip;8080;2;ws;;path=/v2ray|host=这里可以用加了CDN的域名
// WS + TLS (自动配置)
非CDN域名或者ip;非0;2;tls;ws;path=/v2ray|host=tls的域名|inside_port=10550
// WS + TLS (Caddy 提供)
非CDN域名或者ip;0;2;tls;ws;path=/v2ray|host=tls的域名|inside_port=10550|outside_port=443
// nat鸡 ws
非CDN域名或者ip;非0;2;ws;;path=/v2ray|host=这里可以用加了CDN的域名
// nat鸡 ws + tls (自动配置),因为部分商家并不提供 80 & 443 访问,所以请考虑手动申请 SSL 证书
非CDN域名或者ip;非0;2;tls;ws;path=/v2ray|host=tls的域名
// nat鸡 ws + tls (Caddy 提供),因为部分商家并不提供 80 & 443 访问,所以请考虑手动申请 SSL 证书
非CDN域名或者ip;0;2;tls;ws;path=/v2ray|host=tls的域名|inside_port=10550|outside_port=11120
// 以下为 KCP 示例部分,支持所有 V2Ray 的 type:
// none: 默认值,不进行伪装,发送的数据是没有特征的数据包。
非CDN域名或者ip;非0;2;kcp;noop;
// srtp: 伪装成 SRTP 数据包,会被识别为视频通话数据(如 FaceTime)。
非CDN域名或者ip;非0;2;kcp;srtp;
// utp: 伪装成 uTP 数据包,会被识别为 BT 下载数据。
非CDN域名或者ip;非0;2;kcp;utp;
// wechat-video: 伪装成微信视频通话的数据包。
非CDN域名或者ip;非0;2;kcp;wechat-video;
// dtls: 伪装成 DTLS 1.2 数据包。
非CDN域名或者ip;非0;2;kcp;dtls;
// wireguard: 伪装成 WireGuard 数据包(并不是真正的 WireGuard 协议) 。
非CDN域名或者ip;非0;2;kcp;wireguard;
0x02 结语
至此,sspanel的中转节点配置就完成了,其中HAProxy换成nginx的效果应该是一样的,我还没尝试,有兴趣的朋友可以试一下。