2つのインターフェイス、2つのアドレス、2つのゲートウェイ?


14

IPアドレスが異なる2つのネットワークインターフェイスがあり、どちらもパブリックアドレスの範囲内にあり(最初のものの場合はNATを介していますが)、両方のゲートウェイが異なるシステムがあります。(長い話、テスト用です)

問題は、現在、2番目のインターフェースでアドレスをpingしようとすると、デフォルトルートが最初のインターフェースを介して指し示すため、正しく到着しないということです。

応答が常に同じネットワークインターフェイス(および同じソースIP)を介して送信されることを確認することは可能ですか?もしそうなら、どのように?


1
おそらく、この上でいくつかの変種:unix.stackexchange.com/questions/4420/...
ショーン・J.ゴフ

回答:


16

あなたは問題を誤解しています。すべてのパケットが応答であるわけではなく、すべてのパケットを他のパケットと照合できるわけではないため、「同じネットワークインターフェースが入ったとき」が理にかなっています。やりたいことは、送信元IPアドレスに基づいてパケットのゲートウェイを選択することです。

これは、ソースベースのルーティングまたはポリシールーティングと呼ばれます。簡単なiptablesルールでそれを行うことができますが、最善の方法は、各パブリック送信元アドレスに1つずつ、2つのルーティングテーブルを設定することです。

最初に、2つのテーブルを作成します(<NAME1>と<NAME2>を、IP1、DEV1などと同じ、2つのプロバイダーの適切な名前に置き換えます)。

echo 200 <NAME1> >> /etc/iproute2/rt_tables
echo 201 <NAME2> >> /etc/iproute2/rt_tables

ゲートウェイを各ルーティングテーブルに追加します(必要な場合):

ip route add <NET1> dev <DEV1> src <SRC1> table <NAME1>
ip route add <NET2> dev <DEV2> src <SRC2> table <NAME2>

次に、デフォルトルート:

ip route add default via <IP1> table <NAME1>
ip route add default via <IP2> table <NAME2>

次に、送信元アドレスに基づいてルートテーブルを選択するルール:

ip rule add from <IP1> table <NAME1>
ip rule add from <IP2> table <NAME2>

詳細については、複数のアップリンク/プロバイダーのルーティングを参照してください。


「すべてのパケットが応答であるとは限らず、すべてのパケットが他のパケットと一致するわけではないため、「同じネットワークインターフェイスが入ったとき」が理にかなっています。'これをさらに説明できますか?すべてのパケットが応答であるわけではなく、すべてのパケットが別の「ソース」パケットと一致できるわけではないことを理解しています。これらのパケットを問題から除外し、問題を起こさず、したがって私たちに関係がないので、残っているパケットを「入ったときと同じネットワークインターフェイス」にルーティングできないのはなぜですか?
アンドリューサビニク

@AndrewSavinykhそれはすべての問題を解決するわけではありません。特に、ローカルで発信された発信パケット(発信ping要求など)が発信元IPアドレスの間違ったインターフェイスを出て、ゲートウェイによってドロップされた場合は常に破損します。問題は、私が説明したように、実際にはパケットが送信元IPアドレスに対応するゲートウェイから出ることを確認することです。
デビッドシュワルツ

David、OPと同じことを達成したいのですが、できません。私はここに質問を掲載しました:serverfault.com/questions/992624/...は、あなたが見てみることができれば、素晴らしいことだ
Housemd

6

David Schwartzの答えは優れていますが、1つだけ余分なテーブルを用意し、他のテーブルにデフォルトルートを使用することで、ルーティングルールを少し簡素化できます。2つのNATゲートウェイの背後にあるサーバーがあり、最近、多数のVM間でそのシナリオを再作成するプロセスを経験しました。私/etc/network/interfacesはこのように見えます:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address 192.168.13.13
    netmask 255.255.255.0
    up ip route add table optus default via 192.168.13.10
    up ip rule add from 192.168.13.213 table optus
    up ip route add default via 192.168.13.11

auto eth0:0
iface eth0:0 inet static
    address 192.168.13.213
    netmask 255.255.255.0

(これは、2つのISPがOptusとiiNetであるため、「optus」のテーブル名です)

これに加えて/etc/iproute2/rt_tables、テーブルを作成する際の行は、必要なものだけです。2つのIPアドレスがあります。192.168.13.13からのトラフィックは192.168.13.11経由で送信され、192.168.13.213からのトラフィックは192.168.13.10経由で送信されます。これらの2つのゲートウェイがポート転送を適切に実行するように構成し(192.168.13.11は192.168.13.13に転送し、192.168.13.10は192.168.13.213に転送します)、残りは自動的に処理する必要があります。

パブリックIPを直接使用しているため、状況に合わせて少し調整する必要があるかもしれませんが、このようなものはまだ機能するはずです。また、/etc/network/interfaces2年後にシステムの再起動が必要になったときに、設定を覚えようとするよりも、これらのことを行ってからそのファイルをgit管理する方がはるかに簡単です!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.