これを実現する方法はいくつか存在します。 簡単で直截的なのは、'TEQL' - "True" (または "trivial") link equalizer です。 キューイングに絡むものはたいていそうですが、負荷分散も両方向に動作します。 完全な効果を得るには、接続の両端の関与が必要です。
このような状況を考えてください。
+-------+ eth1 +-------+ | |==========| | 'network 1' ----| A | | B |---- 'network 2' | |==========| | +-------+ eth2 +-------+ |
A と B はルータで、いまは両方で Linux が動作しているとしましょう。 トラフィックが network 1 から network 2 に向かうと、 ルータ A は B に向かう 2 つの接続に、パケットを分散させる必要があります。 ルータ B では、これを受信できるような設定が必要です。 逆方向についても同じで、パケットが network 2 から network 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 デバイスから入ってくることは決してありません。 データは '生 (raw)' の eth1 と eth2 に到着します。
まだデバイスができただけですから、これらに適切なルーティング設定が必要です。 これを行う方法のひとつは、/31 のネットワークを両接続に割り当て、 teql デバイスにも同じように /31 のネットワークを割り当てるやり方です:
ルータ 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 は 10.0.0.1, 10.0.0.3, 10.0.0.5 に対し、 2 つの実際の接続と、1 つの TEQL デバイス経由で ping できるようになったはずです。ルータ B も、 10.0.0.0, 10.0.0.2, 10.0.0.4 にこれらの接続経由で ping できるはずです。
ここまでが動作したら、ルータ A では 10.0.0.5 を network 2 に向かう経路にし、 ルータ B では 10.0.0.4 を network 1 に向かう経路にします。 特殊な場合として、network 1 が自宅のネットワーク、 network 2 がインターネットとしますと、 ルータ A では 10.0.0.5 を自分のデフォルトゲートウェイになるようにします。