2つの異なるISPがあります。これらのプロバイダにパケットを配布するために、一種のロードバランシング設定を設定したいと思います。他のルーティングテーブルを使用してこれを行うことができることを知っていますが、「マルチパスゲートウェイ」というものを使用したいと思います。
ファイルに2つのインターフェースを設定しました/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 からキャッシュが削除されても、要求はキャッシュされ続けます。これで、送信元アドレスと宛先アドレスが重要です。これがパケットが常に同じインターフェイスを通過する理由です。