第 10 章. 多接口负载均衡

目录
10.1. 注意事项
10.2. 其他可能性

有几种方法可以做到这一点。其中一种最简单直接的方法是 'TEQL' - "真正" (或 "简单") 链路均衡器。 就像大多数与队列有关的事情一样,负载均衡是双向的。链路的两端可能都需要参与才能发挥全部效果。

想象一下这种情况

                 +-------+   eth1   +-------+
                 |       |==========|       |
 'network 1' ----|   A   |          |   B   |---- 'network 2'
                 |       |==========|       |
                 +-------+   eth2   +-------+

A 和 B 是路由器,目前我们假设两者都运行 Linux。 如果流量从网络 1 流向网络 2,路由器 A 需要将数据包分配到连接到 B 的两条链路上。路由器 B 需要配置为接受此操作。 当数据包从网络 2 流向网络 1 时,情况也是如此,路由器 B 需要通过 eth1 和 eth2 发送数据包。

分配部分由 'TEQL' 设备完成,就像这样 (它再简单不过了)

# tc qdisc add dev eth1 root teql0
# tc qdisc add dev eth2 root teql0
# ip link set dev teql0 up

别忘了 'ip link set up' 命令!

这需要在两台主机上都完成。 设备 teql0 基本上是一个在 eth1 和 eth2 上进行轮询分配器,用于发送数据包。 没有数据通过 teql 设备进入,它只会出现在 '原始' eth1 和 eth2 上。

但是现在我们只有设备,我们还需要正确的路由。 一种方法是将 /31 网络分配给两条链路,并将 /31 分配给 teql0 设备。

FIXME: 这是否需要类似 'nobroadcast' 的东西? /31 太小,无法容纳网络地址和广播地址 - 如果这不能按计划工作,请尝试 /30,并相应地调整 ip 地址。 您甚至可以尝试让 eth1 和 eth2 不使用 IP 地址!

在路由器 A 上
# ip addr add dev eth1 10.0.0.0/31
# ip addr add dev eth2 10.0.0.2/31
# ip addr add dev teql0 10.0.0.4/31

在路由器 B 上
# ip addr add dev eth1 10.0.0.1/31
# ip addr add dev eth2 10.0.0.3/31
# ip addr add dev teql0 10.0.0.5/31

现在路由器 A 应该能够通过 2 条真实链路和 1 个均衡设备 ping 10.0.0.1、10.0.0.3 和 10.0.0.5。 路由器 B 应该能够通过链路 ping 10.0.0.0、10.0.0.2 和 10.0.0.4。

如果这有效,路由器 A 应该将 10.0.0.5 作为其到达网络 2 的路由,路由器 B 应该将 10.0.0.4 作为其到达网络 1 的路由。 对于网络 1 是您家中的网络,而网络 2 是互联网的特殊情况,路由器 A 应该将 10.0.0.5 作为其默认网关。