Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

增加上下行分流 #1794

Closed
sduoduo233 opened this issue Mar 14, 2023 · 6 comments
Closed

增加上下行分流 #1794

sduoduo233 opened this issue Mar 14, 2023 · 6 comments

Comments

@sduoduo233
Copy link
Contributor

客户端主动建立两个http1.1连接,一个用来上传,另一个用来下载。每一个连接有一个id,通过path区分上传和下载,服务器再把两个连接整合到一起。
就像这样:
i
这样可以避免tls in tls的问题,并且客户端如果有多可ip的话,上传请求和下载请求可以从不同ip发出。这个想法很早就有人提出了,我最近实现了一下(https://github.com/sduoduo233/commonweb),发现下载流量是可以过Cloudflare的。

@cross-hello
Copy link
Contributor

cross-hello commented Mar 14, 2023 via email

@RPRX
Copy link
Member

RPRX commented Mar 14, 2023

客户端主动建立两个http1.1连接,一个用来上传,另一个用来下载。每一个连接有一个id,通过path区分上传和下载,服务器再把两个连接整合到一起。

实现起来不难,但考虑到 ALPN,还是走 h2 吧

这样可以避免tls in tls的问题,并且客户端如果有多可ip的话,上传请求和下载请求可以从不同ip发出。

可以在一定程度上干扰 GFW 的判断,不走 CDN 时可以再结合 XTLS 解决加密套娃问题

发现下载流量是可以过Cloudflare的。

下行一直都可以,上行不可以是因为 Cloudflare 尚未支持,并且看起来不太想支持 streaming request 回源,其实这可是个好东西

去年 Chrome 105 加了它,我就写了 另一个东西,也就是扩展了 WSS Browser Dialer 到 h2,一个请求上行,一个请求下行,不过它们是同一条 h2。我还加了些料,以后再放出来

@CCCAUCHY
Copy link

这不就是负载均衡

@simplerick-simplefun
Copy link

simplerick-simplefun commented May 30, 2023

不错的想法。从流量计费的角度看,应该由负责下行的"server2"与"目标"连接。因为一般上行流量远小于下行。

可以考虑应用于grpc + cdn的实现:对于上行流量,客户端发起一个request,服务器能否ignore或者返回空response?或者返回一个数据量很低的随机response?这样的做法是否会产生类似"tls in tls"的可识别指纹?

之前我看gfw report就有说,他们通过修改请求骗过gfw,一个办法就是把请求拆开。从现在这个思路延申,甚至可以把上行和下行分别拆成N个连接,来打乱特征。当然打乱特征的办法是工具,目的还是要伪装成正常流量。

如果能做成,又是一段时间内墙无解的方案了。

@OnlyCharacters
Copy link

我也构想过类似的,使用一台服务器的v4 v6分别上下行,思路就是上下行使用不如的地址。

#1332 (comment)

@RPRX
Copy link
Member

RPRX commented Sep 10, 2023

我还加了些料,以后再放出来

防止出什么幺蛾子,先说一下吧

现有 TLS 代理的一个小特征是,总是只和主域名连接,而不像浏览器一样加载相关资源,即使是对主域名的流量特征也不像浏览器

而根据我用 WSS 的 经历,GFW 已经会结合你最近的行为去判断你的这个请求是否合理,所以加料之一就是 同时自动加载网页

但现在白名单的趋势越来越明显,以后只用原版浏览器可能不行了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants