真正的互联网信道汇总 - OpenMPTCPRouter

真正的互联网信道汇总 - OpenMPTCPRouter

是否有可能将多个互联网渠道合而为一? 围绕这个主题有很多误解和神话;即使是经验丰富的网络工程师也常常不知道这是可能的。 在大多数情况下,链路聚合被错误地称为 NAT 级别的平衡或故障转移。 但实数求和允许 通过所有 Internet 通道同时启动一个 TCP 连接例如,视频广播,这样如果任何互联网频道中断,广播都不会中断。

视频广播有昂贵的商业解决方案,但此类设备的成本高达数千美元。 本文介绍了如何配置免费的开源 OpenMPTCPRouter 包,并解决了有关通道求和的常见误解。

关于通道求和的误解

现在有很多家用路由器都支持多WAN功能。 有时制造商将此称为通道求和,但这并不完全正确。 不少网友认为,除了 LACP 以及 L2 级别的求和,不存在其他信道聚合。 我经常从电信工作人员那里听说这通常是不可能的。 因此,让我们尝试了解流行的神话。

IP 连接级别的平衡

这是同时利用多个互联网渠道的最实惠和流行的方式。 为简单起见,我们假设您有三个 Internet 提供商,每个提供商都为您提供来自其网络的真实 IP 地址。 所有这些提供商都连接到支持多 WAN 功能的路由器。 这可以是带有 mwan3 软件包的 OpenWRT、mikrotik、ubiquiti 或任何其他家用路由器,因为这样的选项已不再罕见。

为了模拟这种情况,我们假设提供商给了我们以下地址:

WAN1 — 11.11.11.11
WAN2 — 22.22.22.22
WAN2 — 33.33.33.33

即连接到远程服务器 example.com 通过每个提供商,远程服务器将看到三个独立的源 IP 客户端。 平衡允许您跨通道分配负载并同时使用所有三个通道。 为简单起见,我们假设我们在所有通道之间平均分配负载。 因此,当客户打开包含三个图像的网站时,他会通过单独的提供商下载每个图像。 在站点方面,它看起来像是来自三个不同 IP 的连接。

真正的互联网信道汇总 - OpenMPTCPRouter
在连接级别进行平衡时,每个 TCP 连接都通过单独的提供程序。

这种平衡模式常常会给用户带来问题。 例如,许多网站将cookie和令牌严格绑定到客户端的IP地址,如果它突然改变,请求将被拒绝或客户端从网站注销。 这通常会在客户银行系统和其他具有严格用户会话规则的站点中重现。 这是一个简单的说明性示例:VK.com 上的音乐文件仅在使用与 IP 绑定的有效会话密钥的情况下才可用,并且使用这种平衡的客户端通常不会播放音频,因为请求没有通过提供者会话已平局。

真正的互联网信道汇总 - OpenMPTCPRouter
下载种子时,连接级别平衡会汇总所有通道的带宽

这种平衡允许您在使用多个连接时获得 Internet 通道的速度总和。 例如,如果三个提供商的速度均为 100 兆比特,那么下载种子时我们将获得 300 兆比特。 因为一个 torrent 会打开许多​​连接,这些连接分布在所有提供商之间,并最终利用整个通道。

重要的是要理解,一个 TCP 连接始终只经过一个提供商。 也就是说,如果我们通过 HTTP 下载一个大文件,那么该连接将通过其中一个提供者建立,如果与该提供者的连接断开,下载也会中断。

真正的互联网信道汇总 - OpenMPTCPRouter
一个连接将始终仅使用一个 Internet 通道

对于视频广播来说也是如此。 如果您将流媒体视频广播到某种有条件的 Twitch,则 IP 连接级别的平衡不会带来任何特别的好处,因为视频流将在一个 IP 连接内广播。 在这种情况下,如果 WAN 3 提供商开始出现通信问题(例如数据包丢失或速度降低),那么您将无法立即切换到另一个提供商。 广播必须停止并重新连接。

真正的通道求和

真实通道求和使得可以通过所有提供商同时运行与条件 Twitch 的一个连接,这样即使任何提供商发生故障,连接也不会中断。 这是一个令人惊讶的难题,至今仍没有最佳解决方案。 很多人甚至不知道这是可能的!

从前面的插图中,我们记得条件 Twitch 服务器只能从我们的一个源 IP 地址接收视频流,这意味着它必须始终对我们来说是恒定的,无论哪些提供商已停止运行以及哪些提供商正在运行。 为了实现这一目标,我们需要一台求和服务器来终止所有连接并将它们合并为一个。

真正的互联网信道汇总 - OpenMPTCPRouter
求和服务器将所有通道聚合到一条隧道中。 所有连接均源自求和服务器地址

在此方案中,使用所有提供程序,禁用其中任何一个都不会导致与 Twitch 服务器的通信丢失。 本质上,这是一个特殊的 VPN 隧道,在其背后同时存在多个互联网通道。 这种方案的主要任务是获得最高质量的通信信道。 如果其中一个提供商开始出现问题、数据包丢失、延迟增加,那么这不会以任何方式影响通信质量,因为负载将自动分配到其他更好的可用信道上。

商业解决方案

这个问题长期以来一直困扰着那些直播赛事且无法访问高质量互联网的人。 对于此类任务,有几种商业解决方案,例如,Teradek 公司制造了这种巨大的路由器,其中插入了 USB 调制解调器包:

真正的互联网信道汇总 - OpenMPTCPRouter
具有频道求和功能的视频广播路由器

此类设备通常具有通过 HDMI 或 SDI 捕获视频信号的内置功能。 与路由器一起出售频道汇总服务的订阅,以及处理视频流、转码并进一步转发。 此类设备的价格从 2 美元起,配有一组调制解调器,再加上单独的服务订阅。

有时看起来很可怕:

真正的互联网信道汇总 - OpenMPTCPRouter

设置 OpenMPTCPRouter

协议 多点TCP (多路径 TCP)的发明是为了能够同时通过多个通道进行连接。 例如,他的 支持iOS 并且可以同时通过 WiFi 和蜂窝网络连接到远程服务器。 重要的是要理解,这些不是两个单独的 TCP 连接,而是同时通过两个通道建立的一个连接。 为此,远程服务器也必须支持 MPTCP。

OpenMPTCP路由器 是一个开源软件路由器项目,可实现真正的通道汇总。 作者表示该项目处于 alpha 版本状态,但已经可以使用。 它由两部分组成 - 位于互联网上的求和服务器和路由器,多个互联网提供商和客户端设备本身连接到:计算机、电话。 定制路由器可以是 Raspberry Pi、某些 WiFi 路由器或普通计算机。 各种平台都有现成的组件,非常方便。

真正的互联网信道汇总 - OpenMPTCPRouter
OpenMPTCPRouter 的工作原理

设置摘要服务器

求和服务器位于互联网上,并将来自客户端路由器的所有通道的连接终止为一个。 通过 OpenMPTCPRouter 访问互联网时,该服务器的 IP 地址将是外部地址。

对于此任务,我们将使用 Debian 10 上的 VPS 服务器。

对求和服务器的要求:

  • MPTCP 不适用于 OpenVZ 虚拟化
  • 应该可以安装你自己的Linux内核

通过执行一条命令即可部署服务器。 该脚本将安装支持 mptcp 的内核以及所有必需的软件包。 安装脚本适用于 Ubuntu 和 Debian。

wget -O - http://www.openmptcprouter.com/server/debian10-x86_64.sh | sh

服务器安装成功的结果。

真正的互联网信道汇总 - OpenMPTCPRouter

我们保存密码,我们将需要它们来配置客户端路由器并重新启动。 请务必记住,安装后,SSH 将在端口 65222 上可用。重新启动后,我们需要确保使用新内核启动

uname -a 
Linux test-server.local 4.19.67-mptcp

我们在版本号旁边看到了 mptcp 字样,这意味着内核已正确安装。

设置客户端路由器

项目网站 现成的构建可用于某些平台,例如 Raspberry Pi、Banana Pi、Lynksys 路由器和虚拟机。
openmptcprouter的这一部分是基于OpenWRT的,使用LuCI作为接口,对于任何接触过OpenWRT的人来说都是熟悉的。 该发行版大约有50MB!

真正的互联网信道汇总 - OpenMPTCPRouter

作为测试平台,我将使用 Raspberry Pi 和几个具有不同运营商的 USB 调制解调器:MTS 和 Megafon。 我想我不需要告诉你如何将图像写入 SD 卡。

最初,Raspberry Pi 中的以太网端口配置为具有静态 IP 地址的 lan 192.168.100.1。 为了避免摆弄桌子上的电线,我将 Raspberry Pi 连接到 WiFi 接入点,并将计算机的 WiFi 适配器设置为静态地址 192.168.100.2。 默认情况下未启用 DHCP 服务器,因此您必须使用静态地址。

现在您可以登录网页界面了 192.168.100.1

当您第一次登录时,系统会要求您设置root密码;使用相同的密码即可使用SSH。

真正的互联网信道汇总 - OpenMPTCPRouter
在 LAN 设置中,您可以设置所需的子网并启用 DHCP 服务器。

我使用的调制解调器被定义为带有单独 DHCP 服务器的 USB 以太网接口,因此需要安装 附加套餐。 该过程与在常规 OpenWRT 中设置调制解调器相同,因此我不会在这里介绍它。

接下来您需要配置 WAN 接口。 最初,系统创建了两个虚拟接口 WAN1 和 WAN2。 需要为它们分配一个物理设备,在我的例子中,这些是 USB 调制解调器接口的名称。

为了避免与接口名称混淆,我建议在通过 SSH 连接时查看 dmesg 消息。

由于我的调制解调器本身充当路由器,并且本身具有 DHCP 服务器,因此我必须更改其内部网络范围的设置并禁用 DHCP 服务器,因为最初两个调制解调器都从同一网络发出地址,这会导致冲突。

OpenMPTCPRouter 要求 WAN 接口地址是静态的,因此我们为调制解调器设置子网,并在系统 → openmptcprouter → 接口设置菜单中配置它们。 此处需要指定安装求和服务器时获取的IP地址和服务器密钥。

真正的互联网信道汇总 - OpenMPTCPRouter

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

真正的互联网信道汇总 - OpenMPTCPRouter

默认模式是shadowsocks + mptcp。 这是一个将所有连接包装在其内部的代理。 它最初配置为仅处理 TCP,但也可以启用 UDP。

真正的互联网信道汇总 - OpenMPTCPRouter

如果状态页面上没有错误,则可以认为设置已完成。
对于某些提供商,当流量路径上的 mptcp 标志被切断时,可能会出现以下情况,然后会出现以下错误:

真正的互联网信道汇总 - OpenMPTCPRouter

在这种情况下,您可以使用不同的操作模式,而不使用 MPTCP,更多关于此 这里.

结论

OpenMPTCPRouter 项目非常有趣且重要,因为它可能是解决通道求和问题的唯一开放式综合解决方案。 其他一切要么是严格封闭和专有的,要么只是普通人无法理解的独立模块。 在目前的开发阶段,该项目还相当粗糙,文档极其贫乏,很多东西根本就没有描述。 但同时它仍然有效。 我希望它能够继续发展,我们将获得能够正确组合开箱即用的频道的家用路由器。

真正的互联网信道汇总 - OpenMPTCPRouter

在 Instagram 上关注我们的开发者

真正的互联网信道汇总 - OpenMPTCPRouter

来源: habr.com

添加评论