通过两个网关对流向单个目的地的出站流量进行负载平衡

通过两个网关对流向单个目的地的出站流量进行负载平衡

在我的局域网中,我有两个路由器,它们使用两个不同的 ISP 提供互联网连接。我可以通过配置适当的路由器作为默认网关来选择使用哪个 ISP。

互联网连接都是异步的 - 两者都具有大量的下行容量和很少的上行容量。不幸的是,我需要大量流量才能将视频上传到 Youtube。我想同时使用这两个互联网连接,以加快我的 Youtube 上传速度。

关于 serverfault 的许多问题链接到这个文件描述了如何设置基于路由的负载平衡。但由于我的大部分流量都流向同一个目的地(Youtube),所以这无济于事。

我认为通过一个或另一个网关交替发送数据包应该非常简单。如果所有数据包都具有相同的 IP 地址作为源地址(意味着传入流量将始终使用相同的接口),那么应该没有问题,对吗?我能想到的唯一障碍是 NAT,它可能会阻止我设置源 IP 地址。不幸的是,我还没有 ipv6 连接,不得不忍受 NAT。

所以问题是:

  1. 如何实现出站流量的负载平衡(Linux)
  2. 使用 NAT 时可以做到这一点吗?

答案1

为了能够利用两个网关的上传带宽,您需要拆分到 Youtube 的单个上传连接的数据包,以便它们通过两个网关,然后重新组合成一个连接以到达 Youtube。

一种方法是,如果您的调制解调器/路由器和 ISP 支持 MLPPP。但由于大多数 ISP 不提供此功能,因此还有另一种方法(不过,在具有不稳定延迟的异步网关上,这种方法不太稳定/可靠)。

您将需要一个具有 2 个公共 IP 的 VPS 服务器。

从路由器设置 2 个到 VPS 的 VPN 连接。每个连接将使用您的每个网关(因此 VPS 上有 2 个公有 IP)。这可以通过简单的静态路由来实现,这样每个 IP 都通过每个网关进行路由。

然后,您在那 2 个 VPN 上进行绑定,以在路由器和 VPS 之间创建单一链接。

然后,您配置路由器以通过绑定接口路由来自 LAN/PC 的所有数据包。

在 VPS 端,您必须配置 SNAT,以便来自绑定接口的数据包能够传出到互联网。

粗略的图表如下:

                            ----- GATEWAY 1 -----
                           /                     \
                          /                       \
LAN/PC-------MODEM/ROUTER-  -  -   BONDING -   -  -VPS SERVER------INTENRET
                          \                       /
                           \                     /
                            ------ GATEWAY 2 ----

我已经使用 MikroTik RouterOS 实现了上述功能,但也可以在 Linux 上实现(因为 MikroTik 也是基于 Linux 的)。

为了使绑定在 VPN 上工作,您需要使用 OpenVPN 或 EoIP(以太网 IP 隧道)。

绑定驱动程序将以 balance-rr 模式(循环模式)配置,以便单个连接的数据包将在 2 个 VPN 之间拆分。

所需的 NAT 只是 VPS 上的简单伪装,以允许来自您的 LAN/PC 的数据包使用 VPS IP 传输到互联网。

相关内容