LACP 平衡 VPN:好主意还是坏主意?

网络工程 虚拟专用网 IEEE-802.1ax
2022-02-05 19:19:13

想象一下,我有一台计算机,有两个来自 ISP A 和 B 的廉价互联网连接。我在数据中心也有一个 VPS,具有非常高的无限带宽。

我可以制作两个VPN。一个从 A 到 VPS,一个从 B 到 VPS。我可以聚合两个“虚拟” tun 接口,在我的 VPS 上安装一个 DHCP,并且带宽是单独使用 A 或 B 的带宽之和。

通过监控带宽并调整负载(例如使用 ifenslave 模式 5 或 6),一切都可以通过简单的 RR 负载平衡以更好的方式进行平衡。

                 +- TUN: A ---- VPN ------+
                 |                        |
 Host - aggTun --|                        +-- VPS - DHCP--- WWW
                 |                        |
                 +- TUN: B ---- VPN ------+

然而,这似乎好得令人难以置信,我坚信这可能会对 TCP 连接产生不良影响(特别是如果 A 和 B 的延迟不同)。有人知道可能会出现什么问题,我如何在 Linux 环境中解决这些问题?

非常感谢,祝您度过愉快的一周

1个回答

这个和所有其他聚合场景的基本问题是如何完成负载共享。我的意思是,主机将如何确定使用哪个链接将数据包转发出去? 基本上有两种选择:

  1. 每包负载分担。主机/路由器将在两条链路之间交替发送数据包。正如您所提到的,如果数据包由于不相等的延迟而乱序到达,这可能会对吞吐量造成严重影响。
  2. 按流量平衡。主机/路由器将沿一条路径发送特定流的所有数据包。主机/路由器使用散列算法来确定采用哪条路径。通常,该算法使用第 2、3 和 4 层信息的某种组合来选择要使用的路径。这里的问题是,根据环境,流量可能非常不平衡。例如,如果您使用 IP 信息,并且您与一个特定的主机(例如您的 VPS 端点)通信,您将只使用一个链接。您必须根据您的特定用途仔细选择您的算法。

另外,不要忘记您必须在链接的两端执行此操作。如果您的传出流量在多个链接之间共享,但入站流量仅使用一个链接,这并没有太大的好处。