v2ray / v2ray-core

A platform for building proxies to bypass network restrictions.
https://www.v2ray.com/
MIT License
45.42k stars 8.95k forks source link

[Feature Request]请求添加启动时对DomainSocket文件检测,若存在则删除 #2635

Closed nJhEqnvK closed 3 years ago

nJhEqnvK commented 4 years ago

Please describe the new feature you want in detail.

  1. 背景 1.1 docker下启动v2ray时无法使用systemd中的hook删除已存在的文件 1.2 VPS性能十分弱鸡,目前使用的caddy无法直接使用h2c进行流量转发,再对h2流量tls解密后还需二次加密才能转发,占用CPU不说,还占用loopback的缓存,流量一大(30Mbps)VPS就直接死了

  2. 设想的方案 v2ray在创建Unix Socket监听时便检测dsSettings中指定的文件是否存在,若存在则直接删除后,再创建新文件与监听,对应的代码应该是在这

  3. 期望达到的效果 3.1 caddy作为网关负责与客户端进行tls的握手、加解密并根据path进行转发与分流,通过fastcgi与v2ray通信
    3.2 v2ray作为core只需监听Domain Socket流量,专注于自己的特长 3.3 理论上的优点:

    • 结构简单,适合弱鸡VPS(TLS分流器/HAProxy+Nginx/Caddy+V2ray --> Caddy+V2ray)
    • 不会争抢443端口,Caddy一站式完成web托管/反代+自动证书配置/续期+分流(之前白话文的方案,TLS分流器/HAProxy前端会占用443端口,造成后面TLS证书配置,ACME配置等一系列问题,而这些工作其实都可以交给Caddy直接完成)

最后画个简陋的示意图 现在的方案:

                                      /-(普通流量)-->(Caddy中的Web/反代)-->对应的网页
客户端--(h2/ws+tls流量)-->Caddy(80/443)--(ws+tls V2ray流量)-->(Caddy 直接以ws发送)-->V2ray ws inbound
                                      \-(h2+tls V2ray流量)-->(Caddy 还需要再次加密为h2)-->V2ray h2 inbound

白话文推荐的方案:

                                              /-(普通流量)-->(Caddy/Nginx中的Web/反代)(80/其他端口)-->对应的网页
                                             /            /-(Caddy 再次加密为h2)-->V2ray h2 inbound
客户端--(h2/ws+tls流量)-->TLS分流/HAProxy(443)--(V2ray流量)-->(直接以ws发送)-->V2ray ws inbound
                                                          \-(直接以Unix Socket发送)-->V2ray ds inbound

白话文有提到一个用Nginx完成所有任务的方案,但是Caddy在此基础上还可以自动配置Let’s Encrypt证书,配置也更加精简(懒)

期望的方案:

                                      /-(普通流量)-->(Caddy中的Web/反代)-->对应的网页
客户端--(h2/ws+tls流量)-->Caddy(80/443)--(Caddy通过fastcgi直接以Unix Socket发送)-->V2ray ds inbound

PS.

目前问题就是卡在Docker V2ray镜像无法使用hook删除已经存在的Unix Socket文件,还请开发者看看,谢谢!

RPRX commented 4 years ago

其实 v2ray 的 ds 支持 abstract,文档没写而已,PR:https://github.com/v2fly/manual/pull/15/files

VLess 即将加入协议回落俱乐部,配置方便快捷,支持 address + port 及两种 unix domain socket

开启协议回落模式后,VLess 服务端读取 stream 和遇错断连的逻辑、行为将会改变,不开启则照旧

nJhEqnvK commented 4 years ago

感谢 @rprx 大佬回复

我之前已经注意到了abstract ds,但似乎Caddy不支持,已经向他们社区提issue了,另外麻烦想问一下Vless fallback的TLS解密是发生在入口网关还是V2ray的呀?因为VPS性能太弱,还是希望在前端就能一步完成TLS加解密/分流/(顺便自动管理CA证书),后台V2ray只关心纯流量的处理。。。

还请大佬拨冗解答,谢谢!

RPRX commented 4 years ago

使用 abstract ds 只需在路径前加一个空字节,即 \x00,修改 Caddy 的代码后自行编译就可以做到了

TLS 解密可以在任何地方,VLESS 的回落支持纯 TCP

VLESS 新版的 fallbacks 还支持 path 分流 ws,应该不需要正文中这么复杂的配置了

nJhEqnvK commented 4 years ago

使用 abstract ds 只需在路径前加一个空字节,即 \x00,修改 Caddy 的代码后自行编译就可以做到了

TLS 解密可以在任何地方,VLESS 的回落支持纯 TCP

VLESS 新版的 fallbacks 还支持 path 分流 ws,应该不需要正文中这么复杂的配置了

感谢@rprx 大佬,已经上车4.27.4了,VLESS是真的好用233

XuuKoo commented 4 years ago

但是目前ds的性能好像不如端口转发

github-actions[bot] commented 3 years ago

This issue is stale because it has been open 120 days with no activity. Remove stale label or comment or this will be closed in 5 days