
是否可以将多个Internet通道组合成一个通道? 关于此主题有很多误解和神话,即使是有经验的网络工程师也常常不知道这是可能的。 在大多数情况下,链路聚合被错误地称为NAT或故障转移。 但是实际求和允许
在所有Internet通道 (例如,视频广播)
上同时启动一个TCP连接 ,以便在任何Internet通道断开时,广播都不会中断。
存在用于视频广播的昂贵的商业解决方案,但是这种设备花费了很多千金。 本文介绍了免费的开放包OpenMPTCPRouter的配置,并分析了有关信道聚合的流行神话。
渠道总结神话
有许多支持多WAN功能的家用路由器。 有时制造商称这种渠道总和,这并非完全正确。 许多网络人员认为,除了
LACP和L2级别的求和之外,没有其他
链路聚合存在。 我经常听到,电信行业的人们通常不可能做到这一点。 因此,我们将尝试了解流行的神话。
IP连接平衡
这是同时使用多个Internet渠道的最实惠和最受欢迎的方式。 为简单起见,假设您有三个Internet提供商,每个Internet提供商都为您提供了网络中的真实IP地址。 所有这些提供程序都连接到支持Multi-WAN的路由器。 它可以是带有mwan3,mikrotik,ubiquiti软件包或任何其他家用路由器的OpenWRT,因为现在此选项并不罕见。
为了模拟这种情况,请想象提供者给了我们以下地址:
WAN1 — 11.11.11.11 WAN2 — 22.22.22.22 WAN2 — 33.33.33.33
也就是说,通过每个提供程序连接到远程
example.com服务器,该远程服务器将看到三个独立的源ip客户端。 平衡允许您分担通道上的负载,并同时使用所有这三个通道。 为简单起见,假设我们在所有通道之间均分负载。 结果,当客户打开一个站点上通常有三个图像的站点时,他会通过单独的提供程序上传每个图像。 在站点方面,看起来像是来自三个不同IP的连接。
在连接级别进行平衡时,每个TCP连接都要经过一个单独的provider 。
这种平衡模式通常会给用户带来麻烦。 例如,许多站点将Cookie和令牌紧密地附加到客户端的IP地址,如果突然更改,则该请求将被拒绝或客户端在该站点上注销。 这通常在具有严格用户会话规则的客户银行系统和其他站点上复制。 这是一个简单的说明性示例:VK.com中的音乐文件仅具有与IP绑定的有效会话密钥,并且使用这种平衡的客户端通常不会播放音频,因为请求没有经过与会话绑定的提供者。
下载种子时,连接级别的平衡求和所有通道的带宽通过这种平衡,您可以在使用多个连接时获得Internet通道速度的总和。 例如,如果三个提供者中的每个提供者的速度为100兆比特,那么在下载种子时,我们将获得300兆比特。 因为洪流打开了许多连接,这些连接分布在所有提供商之间,并最终利用了整个渠道。
重要的是要理解,单个TCP连接将始终仅通过一个提供程序。 也就是说,如果我们通过HTTP下载一个大文件,则将通过其中一个提供程序建立此连接,并且如果与此提供程序的连接中断,则下载也将中断。
一个连接将始终仅使用一个Internet通道对于视频广播来说是这样。 如果将视频流传输到某种条件的Twitch,则IP连接级别的平衡不会带来任何特别的好处,因为视频流将在同一IP连接中进行广播。 在这种情况下,如果WAN 3提供程序开始出现通信问题,例如数据包丢失或速度降低,您将无法立即切换到另一个提供程序。 广播将必须停止并重新连接。
真通道求和
通道的实际总和使得可以立即通过所有提供者开始与条件Twitch的一个连接,以使得如果任何提供者断开,连接都不会断开。 这是一个非常困难的任务,仍然没有最佳解决方案。 许多人甚至不知道这是可能的!
从前面的插图中,我们记得有条件的Twitch服务器只能从一个源IP地址接收来自我们的视频流,这意味着它应该始终与我们保持不变,无论哪个提供商掉线,哪个提供商在工作。 为此,我们需要一个汇总服务器,该服务器将终止所有连接并将它们合并为一个。
求和服务器将所有通道聚合到一个隧道中。 所有连接均来自求和服务器的地址在此方案中,将使用所有提供程序,并且禁用任何提供程序都不会导致与Twitch服务器的通信中断。 实际上,这是一个特殊的VPN隧道,在它的引擎盖下一次有多个Internet通道。 这种方案的主要任务是获得最高质量的通信信道。 如果问题从提供商之一开始出现,即丢包,增加的延迟,则这不会影响通信质量,因为负载将通过其他更好的可用渠道自动分配。
商业解决方案
长期以来,这个问题一直困扰着那些直播现场事件并且无法访问高质量Internet的人们。 有多种商业解决方案可用于此类任务,例如,Teradek公司制造了这样的怪异路由器,其中插入了USB调制解调器包:
具有频道求和功能的视频广播路由器在此类设备中,通常具有通过HDMI或SDI捕获视频的能力。 与路由器一起,出售对频道求和服务的订阅,以及处理视频流,对其进行转码和进一步中继。 带有一套调制解调器的此类设备的价格从2k美元起,外加对该服务的单独订购。
有时看起来很吓人:

配置OpenMPTCPRouter
发明
MP-TCP协议 (MultiPath TCP)的目的是能够一次跨多个通道进行连接。 例如,它
支持iOS,并可以通过WiFi和蜂窝网络同时连接到远程服务器。 重要的是要理解,这些连接不是两个单独的TCP连接,而只是在两个通道上立即建立的一个连接。 为此,远程服务器也必须支持MPTCP。
OpenMPTCPRouter是一个开源路由器项目,可让您真正添加通道。 作者声明该项目处于alpha状态,但已经可以使用。 它由两部分组成-位于Internet上的汇总服务器和路由器,几个Internet提供商和客户端设备本身连接到它们:计算机,电话。 作为自定义路由器,Raspberry Pi,某些WiFi路由器或常规计算机都可以起作用。 有适合各种平台的现成组件,非常方便。
OpenMPTCPRouter的工作方式配置汇总服务器
求和服务器位于Internet上,并终止来自客户端路由器所有通道的连接。 通过OpenMPTCPRouter访问Internet时,此服务器的IP地址将是外部地址。
对于此任务,我们将在Debian 10上使用VPS服务器。
汇总服务器要求:
- MPTCP在OpenVZ虚拟化上不起作用
- 应该可以安装自己的Linux内核
通过执行单个命令来部署服务器。 该脚本将安装具有mptcp支持和所有必要软件包的内核。 安装脚本可用于Ubuntu和Debian。
wget -O - http://www.openmptcprouter.com/server/debian10-x86_64.sh | sh
成功安装服务器的结果。

我们保存了密码,我们将需要它们来配置客户端路由器,然后重新启动。 重要的是要记住,安装后,SSH将在端口65222上可用。重新启动后,您需要确保我们使用新内核启动
uname -a Linux test-server.local 4.19.67-mptcp
我们在版本号旁边看到mptcp,这表示内核已正确安装。
设置客户端路由器
在
项目站点上 ,可以为某些平台使用现成的程序集,例如Raspberry Pi,Banana Pi,Lynksys路由器和虚拟机。
openmptcprouter的这一部分基于OpenWRT,使用LuCI作为界面,这对曾经接触过OpenWRT的每个人都是熟悉的。 该分发套件重约50MB!

作为测试平台,我将使用Raspberry Pi和几个具有不同操作员的USB调制解调器:MTS和Megaphone。 我想,如何将图像写入SD卡无需说明。
最初,Raspberry Pi中的以太网端口被配置为具有静态IP地址
192.168.100.1的局域网。 为了不弄乱桌子上的电线,我将Raspberry Pi连接到了WiFi接入点,并在计算机的WiFi适配器上设置了静态地址
192.168.100.2 。 默认情况下,DHCP服务器未启用,因此您需要使用静态地址。
现在您可以转到Web界面
192.168.100.1首次登录时,系统会要求您设置root密码,SSH可以使用相同的密码。

在LAN设置中,您可以设置所需的子网并启用DHCP服务器。
我使用的调制解调器被定义为具有单独DHCP服务器的USB以太网接口,因此这需要安装
其他软件包 。 该过程与在通常的OpenWRT中设置调制解调器相同,因此在此不再赘述。
接下来,您需要配置WAN接口。 最初,在系统中创建了两个虚拟接口WAN1和WAN2。 需要为它们分配一个物理设备,在我的情况下,这些是USB调制解调器接口的名称。
为了避免混淆接口名称,我建议您通过SSH连接来观看dmesg消息。
由于我的调制解调器本身充当路由器,并且它们本身具有DHCP服务器,因此我不得不更改其内部网络范围的设置并禁用DHCP服务器,因为最初两个调制解调器都从同一网络发出地址,这会引起冲突。
OpenMPTCPRouter要求WAN接口的地址是静态的,因此我们为子网设置了调制解调器,并在菜单系统→openmptcprouter→接口设置中对其进行了配置。 在这里,您需要指定在安装汇总服务器期间获得的IP地址和服务器密钥。

如果成功安装,状态页上将出现类似的图片。 可以看出,路由器能够到达求和服务器,并且两个通道都正常工作。

默认模式是shadowsocks + mptcp。 这是包装所有连接的代理。 最初,它被配置为仅处理TCP,但是您可以启用UDP。

如果状态页上没有错误,则可以认为该设置已完成。
对于某些提供程序,当mptcp标志在流量路由上被切断时,可能会出现这样的情况:

在这种情况下,您可以在不使用MPTCP的情况下使用其他操作模式,有关更多信息,请参见
此处 。
结论
OpenMPTCPRouter项目非常有趣且重要,因为这可能是解决通道求和问题的唯一开放式综合解决方案。 其他所有内容都是紧密封闭且专有的,或者只是普通人无法处理的单独模块。 在目前的开发阶段,该项目还很粗糙,文档非常差,许多事情根本没有描述。 但是他仍然在工作。 我希望它将继续发展,并且我们将获得能够正常使用组合通道的家用路由器。

订阅我们的Instagram开发人员
