计算机 A 要访问 google,中间的数据包负载均衡到 B1、B2、B3 服务器,并发走三条线路,并在 C 服务器完成汇聚。 现实的场景就是公开的酸酸乳和挂掉的个人 vps,用途你懂的。
楼主 google 了一堆关键词(链路聚合,流量汇聚等等)都没有找到,来 V2EX 求助啊
1
huayumo 2020-02-16 12:32:57 +08:00
牛逼,好思路
|
2
whyorwhynot OP 就差一个程序员了
|
3
wtks1 2020-02-16 12:54:11 +08:00 via Android
好像之前在 V 站看到过有人搞出过这个,但似乎没有公开
|
4
idhrwb01296 2020-02-16 12:55:39 +08:00 via Android
加钱加到位,是不是机场都帮你做好了呢,比如中转、BGP
|
5
optional 2020-02-16 12:58:27 +08:00
洋葱
|
6
SaigyoujiYuyuko 2020-02-16 12:59:28 +08:00
意淫了个方案 不知道可不可行: A 和 B* 的机器组网 | B* + C 机器组网 然后 B* 和 C 机器上面 装 酸酸乳,A 机器添加组网后的 B*机器的酸酸乳连接,使用酸酸乳自带的负载均衡。
|
7
DGideas 2020-02-16 12:59:47 +08:00 via Android
问题是既然楼主提到“负载均衡”,为啥还“并发”走三个服务器呢?
先明确下需求 |
8
sujin190 2020-02-16 13:13:04 +08:00
实现过一个,B1、B2、B3 中间机器开启端口转发,A 通过 B1、B2、B3 建立三条固定到 C 的 TCP 连接,A 通过轮询 B1、B2、B3 方式把所有数据包通过三条 TCP 连接发往 C,C 重新组包排序,A 和 C 之间多路复用实现代理转发请求
|
9
whyorwhynot OP @optional 类似 tor,但是是走酸酸乳线路节点,类似的有 MPTCP
|
10
whyorwhynot OP @idhrwb01296 机场不一定安全,这样做流量从自己的 vps 出,还可以充分利用 vps
|
11
whyorwhynot OP @DGideas 一个链接的数据包分流到三个线路去走,最大化吞吐率
|
12
whyorwhynot OP @SaigyoujiYuyuko 貌似酸酸乳的负载均衡是基于连接的吧
|
13
SaigyoujiYuyuko 2020-02-16 13:29:24 +08:00
@whyorwhynot 好像是的
|
14
whyorwhynot OP @sujin190 我的想法差不多,不过不是端口映射,是直接本地搞个客户端通过 B1、B2、B3 的酸酸乳暴露在本地的多个 socks5 代理连接 vps 服务端,服务端程序负责组包
|
15
zlkent 2020-02-16 13:38:16 +08:00
没太看懂,现成的不是 haproxy 就能实现了? passwall 和 kool 的 ss 插件都带这个功能了。
|
16
whileFalse 2020-02-16 13:40:42 +08:00
可以看看 Speedify
|
17
whyorwhynot OP @zlkent haproxy 应该还是基于连接做的负载均衡,单个 TCP 连接还是走的一条线路,我的想法是通过增加一个 vps 实现数据包的远端组包,一个连接的数据包可以走不同的链路
|
18
opengps 2020-02-16 13:54:31 +08:00 via Android
套娃🐰
|
19
Archeb 2020-02-16 13:58:58 +08:00
一个鸡肋套娃方案
套娃,用 B1B2B3 的三个代理来连接 C 上的 VPN ( VPN over SOCKS5 ) 然后 A 上出来三个接口,C 上也出来三个接口 直接两端对这三个接口做链路聚合即可( NIC Bonding ) 如果需要实用方案的话还是自己造轮子吧 |
20
whyorwhynot OP @whileFalse 这个貌似是支持多链路的,原理差不多,轮子的自由 door 貌似也是
|
21
digimoon 2020-02-16 14:04:50 +08:00
|
22
whyorwhynot OP @Archeb 直连可能被 ban 或者速度慢,分成多线连接,看起来似乎可以提速,效果还得实测。。
|
23
whyorwhynot OP @digimoon 是前者,数据包的实时分流,增大带宽,的确会有慢的线路,如果真要做会对线路质量做测评。
|
24
laminux29 2020-02-16 14:20:14 +08:00 3
你这不是负载均衡,而是智能路由。
不仅需要拆包并发,还要实现瓶颈管理(优质线路满载时计算转发到劣质线路是否划算)、延时预算(走一条还是走多条,只走优质还是优劣并走)、重发管理(如果接收端存活,则缺失片段需要一直寻找不同线路重发)等等。 这一套东西,是真正的科研,弥补了现有协议与路由运作方式的不足,这可不便宜,更别说免费了。 |
25
whyorwhynot OP @opengps 想白 piao 公共节点做加速
|
26
whyorwhynot OP @laminux29 考虑的因素多了的确很复杂,toy 就可以了。。。
|
27
Love4Taylor 2020-02-16 14:52:12 +08:00 via Android
MPTCP
|
28
ericbize 2020-02-16 14:57:03 +08:00
太复杂了,根本不需要这样子
|
30
MiaRunis 2020-02-16 15:35:50 +08:00
目前公开 /免费的负载均衡方案都没有直接并发的,直接并发的都没有高可用,
不想付钱的话目前效果最好的只有 haproxy 真 https 检测模式+CDN 海量随机节点。 自动剔除被 ISP 限流或墙掉的 ip,可以确保高可用,不能保证大流量和低延迟。 |
31
whyorwhynot OP @MiaRunis 3ks,机场和自建的都在用,就是宅久了,想尝试些新玩意
|
32
runshine 2020-02-16 17:22:34 +08:00 via Android
TCP 乱序得问题很难解决
|
33
GM 2020-02-16 17:34:38 +08:00
看你对通信品质的要求了。
如果没要求,那很容易。 如果对实时性要求比较高,那很难,很难,很难。 多个节点的通信延迟是不一样的,A、C 每次都必须等待所有包都送达才能完成一次完整的通讯。延迟起码高 3 倍。 |
34
whyorwhynot OP @GM 没有这么悲观吧,看个 youtube,三条线路同时走,会受限于延迟最高的那条线路
|
35
whyorwhynot OP @runshine 只要考虑传递的流量数据的重排序就可以了吧
|
36
Moofish 2020-02-16 19:31:44 +08:00
OpenWRT 有现成的方案,不过好的节点跑 8K 已经很轻松了,负载平衡其实意义不大
|
37
whyorwhynot OP @Moofish 求问,Openwrt 的现成方案是啥
|
38
hicdn 2020-02-16 20:43:22 +08:00
这不就是 CDN 吗?
|
39
whyorwhynot OP @hicdn no,cdn 做不了数据包层级的分流和汇总
|
40
Moofish 2020-02-16 21:16:07 +08:00
@whyorwhynot 某工具内嵌了负载平衡,可以同时用多个节点的,甚至你多 WAN 都可以指定哪个节点走哪条宽带
|
41
ik 2020-02-16 21:18:32 +08:00 via iPhone
嫌机场不安全可以 在自建代理上套机场,是不是省事些
|
42
whyorwhynot OP @Moofish 这个工具应该还是基于连接做的负载均衡吧,没办法将一个连接的数据包做分流的。并不是真的同时,只在多连接的情况下有效
|
43
whyorwhynot OP @ik 其实更多的是想要利用公共资源(捡垃圾做出高性能的东西,图拉丁垃圾佬的梦想),和这种方案到底能够达到何种程度的加速
|
44
hicdn 2020-02-16 21:40:31 +08:00
@whyorwhynot CDN 在特殊场景是可以做流量的汇总。比如在 vps 做个反向代理,然后用 CDN 加速,aria2c 利用多个 CDN 节点多源下载。速度叠加很明显,大概是 1+1+1=2。
|
45
whyorwhynot OP 楼主目前找到了 VPN Bonding、openmptcprouter、MLVPN、overthebox 貌似有希望。。。
|
46
whyorwhynot OP @hicdn 这个还是基于连接的速度叠加,对单个连接无法加速。基于连接的酸酸乳和 haproxy 都可以做吧
|
47
hicdn 2020-02-16 21:57:25 +08:00
@whyorwhynot 如果基于单个连接的加速搞出来,路由器多播叠加宽带就用着很爽了。等你好消息。
|
48
akira 2020-02-16 23:11:37 +08:00
这个不就是 tor 么
|
49
deorth 2020-02-16 23:16:45 +08:00
v2ray 的负载均衡,不过我这里始终达不到带宽叠加的效果
|
50
kennylam777 2020-02-17 00:10:43 +08:00
|
51
MiaRunis 2020-02-17 00:13:32 +08:00 1
@whyorwhynot 大佬你做成了记得发出来,至少给我们提个思路谢谢。最怕那种问题挂着结果提问的人只写个“解决了”的,想打人
|
53
charslee013 2020-02-17 03:28:37 +08:00
最简单的就是用 ssh 转发 C 机器的端口到 B1 B2 B3
Example : ssh -CfNg -R <目标端口>:127.0.0.1:<转发机器端口> root@<目标 IP> 不过这种不敢保证可用性,建议在 crontab 添加定时任务保证挂掉之后能重启 又或者买个域名挂在 cloudflare 上走 CDN 通道 (移动网络不推荐 |
55
ik 2020-02-17 09:57:14 +08:00 via iPhone
@totoro625 我差不多也就是这个意思吧,但是没有这样弄过。
linux 用 proxychain-ng + python 版 ssr ,测试可以实现 |
56
missdeer 2020-02-17 10:36:43 +08:00
如果我理解没错的话,3 个 B 上是酸酸乳?那么有 2 个现成的方案:
1. haproxy,tcp 负载均衡,要求 3 个 B 上的设置完全相同 2. https://github.com/cloudwu/mptun,原理是 https://blog.codingnow.com/2015/07/mptun.html |
57
linvon 2020-02-17 10:42:58 +08:00
这种会不会对实际网络环境有过于理想化的依赖?
|
58
yankebupt 2020-02-17 11:40:28 +08:00 1
@whyorwhynot 這個是犧牲穩定性做代價的。
假設每條線路 95%穩定性,差不多 5%波動 三條聚合,如果流量波動特性相互獨立的話 95%三次方大概 85.73%的穩定性...差不多 15%的波動... 線路質量會差很多。 除非冗餘...比如同時發包或者各種糾錯碼… 但是流量要錢的 |
59
ghjexxka 2020-02-17 15:50:47 +08:00
公开 ssr 开启负载均衡和连接 C 的客户端开启前置代理到 ssr 的 socks5/http 吗?模式就选低错误优先好了😂
|
60
chijiao 2020-02-17 23:32:03 +08:00
有一种可能,就是基于数据包的负载均衡,就是说第一个包走节点 1,第二个包走节点 2,但是还是没办法把带宽增加,因为包是连续的。这个用 iptables 就可以实现。
|
61
whyorwhynot OP 楼主自己抽空用 python 写了个蹩脚的聚合 socks5,socks 代理节点搞了 5 个都是内网的,聚合节点也是内网的,speedtest 测速结果才 3Mbps,也是服了。。不过 github 找到了一个 PoorMansBonding 项目,让 tun 流量走多条 tcp 连接,在 vps 汇聚,配合路由器上开个透明代理,自动负载均衡将 tcp 链接分配到多个链路,也算是实现了想法了 😃 😃
|
62
whyorwhynot OP rabbit-tcp 配合 haproxy 负载均衡也类似
|