2つのISPとマルチパスゲートウェイ構成

2つのISPとマルチパスゲートウェイ構成

私は 2 つの異なる ISP を持っています。これらのプロバイダーにパケットを分配する、ある種の負荷分散設定をしたいと考えています。異なるルーティング テーブルを使用してこれを行うことができることは知っていますが、「マルチパス ゲートウェイ」と呼ばれるものを使用したいと考えていました。

ファイルで両方のインターフェースを設定しました/etc/network/interfaces。両方の接続は別々に動作します。デフォルト ゲートウェイを以下のものに置き換えました。

# ip route add default \
    nexthop via 192.168.1.1 dev bond0 weight 1 \
    nexthop via 10.143.105.17 dev wwan0 weight 1

iptables両方のインターフェースにマスカレード ターゲットを追加しました。

iptables -t nat -A POSTROUTING -o wwan0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o bond0 -j MASQUERADE

また、次のようにして(部分的に)リバース パス フィルタリングを有効にしましたsysctl

net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2

この設定は機能します。パケット (接続) は両方のインターフェースを介して送信されます。理解できない問題が 1 つだけあります。

次のコマンドを使用して IP アドレスを確認したい場合:

$ curl text.whatisyourip.org
$ curl eko.one.pl/host.php

どちらの場合も IP アドレスが異なっています。つまり、メカニズムは正常に機能しています。 また、 で動作しているのもわかりますwireshark。 しかし、たとえば、上記のドメインの最初のドメインに複数のリクエストを送信しようとすると、常に同じ IP アドレスが応答として返されます。 つまり、特定の IP アドレス宛てのパケットは常に同じインターフェイスを通過するようです。 なぜか疑問に思います。 以前のリクエストの宛先 IP アドレスを記憶し、同じアドレスへの次のリクエストが同じインターフェイスを通過するようにするメカニズムはありますか?

答え1

私はなんとか問題を解決しました。このリンク以下をお読みください:

IPv4: ハッシュベースのマルチパスルーティング。3.6 でルーティングキャッシュが削除されたとき、IPv4 マルチパスアルゴリズムは、宛先ベースから準ランダムなパケットごとのスケジューリングに変更されました。これにより、順序が乱れたパケットのリスクが高まり、マルチパスをエニーキャストサービスと一緒に使用できなくなりました。このリリースでは、マルチパスルーティングの実装は、送信元と宛先のアドレスのハッシュに基づくフローベースの負荷分散に置き換えられました。マージコミット

したがって、カーネル 3.6 でキャッシュが削除されたにもかかわらず、リクエストは引き続きキャッシュされます。送信元アドレスと送信先アドレスが重要になります。そのため、パケットは常に同じインターフェイスを通過します。

関連情報