在我的局域网中,我有两个路由器,它们使用两个不同的 ISP 提供互联网连接。我可以通过配置适当的路由器作为默认网关来选择使用哪个 ISP。
互联网连接都是异步的 - 两者都具有大量的下行容量和很少的上行容量。不幸的是,我需要大量流量才能将视频上传到 Youtube。我想同时使用这两个互联网连接,以加快我的 Youtube 上传速度。
关于 serverfault 的许多问题链接到这个文件描述了如何设置基于路由的负载平衡。但由于我的大部分流量都流向同一个目的地(Youtube),所以这无济于事。
我认为通过一个或另一个网关交替发送数据包应该非常简单。如果所有数据包都具有相同的 IP 地址作为源地址(意味着传入流量将始终使用相同的接口),那么应该没有问题,对吗?我能想到的唯一障碍是 NAT,它可能会阻止我设置源 IP 地址。不幸的是,我还没有 ipv6 连接,不得不忍受 NAT。
所以问题是:
- 如何实现出站流量的负载平衡(Linux)
- 使用 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 传输到互联网。