Linux上のマルチホームIPv4

内容:コンピューターがすべてのインターフェイス上のすべてのIPアドレスにインターネット上で応答する方法。各インターフェイスにはデフォルトゲートウェイがあります。 サーバーとデスクトップの両方に適用されます。



キーワード:ポリシールーティング、ソースベースルーティング



歌詞:Linuxでのポリシールーティングに関する記事が十分にあります。 しかし、彼らはほとんどの場合、一般的でより微妙で複雑なケースを分析します。 次の形式の簡単なシナリオを分析します。







コンピューター(サーバー)には3つのインターフェイスがあります。 各インターフェースで、ゲートウェイは彼にIP(静的またはdhcpのどちらでも構いません)を与え、「すべてのトラフィックが私に向かった」と言いました。



この構成をそのままにすると、「最後に立ち上がった人、それ、そしてデフォルトゲートウェイ」の原則が使用されます。 上の図では、下部のインターフェースが最後に上昇すると(241)、すべてのトラフィックがそこに送信されます。 最初のインターフェイス(188)のリクエストがサーバーに送信された場合、それに対する答えは引き続き下に移動します。 ルーター/プロバイダーが少なくともアドレススプーフィングに対する最小限の保護を持っている場合、答えは無効として単純にドロップします(241.241.241.1の観点から、彼らは彼にsrc 188.188.188.188のパケットをネットワーク241.241.241.0/24から送信しましたが、明らかにそうではありません)する必要があります)。



つまり、通常のバージョンでは、1つのインターフェイスのみが機能します。 状況を悪化させるために、アドレスがdhcp経由で受信された場合、他のインターフェイスのリースを更新するとデフォルトゲートウェイが上書きされる可能性があります。 いわば、サーバーの安定した動作です。



解決策



一般的なソリューションはポリシールーティングです。 あらゆる種類の奇跡を解決することができる、非常に膨大で興味深いもの。 これらの奇跡のうち、(この記事のフレームワーク内で)1つだけ残しておきます。「インターフェイスから」各ルーターにトラフィックを送信します。 つまり、最も原始的な形式の古典的なソースベースのルーティングです。



ソリューションの概要鳥瞰図:



トラフィックをルーティングするための3つのオプション「eth0のすべて」、「eth1のすべて」、「eth2のすべて」を設定し、ルールを作成します。最初のオプションのIPからトラフィックを送信します。 -3番目まで。



その結果、次の構造が得られます。

ソース:188.188.188.188 eth0-routeテーブルへ 188.188.1を介したデフォルト eth0経由
ソース:75.75.75.75 eth1-routeテーブルへ 75.75.75.1経由のデフォルト eth1経由
ソース:241.241.241.241 eth2-routeテーブルへ デフォルトは241.241.241.1経由 eth2経由




要約:

  1. 設定を使用してiproute2ユーティリティを設定します(突然、設定があります!)-3つのルーティングテーブルに名前を付けます
  2. 3つのルーティングテーブルでルートを設定します-より正確には、デフォルトルートを設定します
  3. トラフィックを3つのルートテーブルに分散するルールを指定する




さらにステップ



ipユーティリティ(正式名称はiproute2)には特別なコマンドがあります-ポリシールーティングを管理するためのipルール。 また、ルートの追加(ip route add)は、テーブルの名前を持つ引数を取ることができます。 カーネルはテーブルの名前については何も知りませんが、iproute2では、config- /etc/iproute2/rt_tables



から名前を使用する必要があります(これは、名前がカーネルが理解できる抽象番号に一致します)。 値「0」と255未満の値(254、253)が使用され、残りは使用できます。



Iroute2のセットアップ



ルーティングテーブルにeth0-route、eth1-route、eth2-routeという名前を付けます。 100、101、102-ランダムなシンボリック数を取ります。

 echo 100 eth0-route >> / etc / iproute2 / rt_tables
 echo 101 eth1-route >> / etc / iproute2 / rt_tables
 echo 102 eth2-route >> / etc / iproute2 / rt_tables




3つのルーティングテーブルでのルートの構成



各テーブルに対して、デフォルトルートを設定します(デフォルトではなく可能であり、ファンタジーはあなたの手にあります)。 これらのルールはサーバー上で何も破壊せず、ライブで実行できます。 これらのテーブルを使用するまで、これらはメモリ内の単なるバイトであり、ルーティング操作に影響しません(つまり、プロセスの途中で突然接続性が失われることはありません)。

 188.188.188.1 dev eth0 table eth0-routeを介したip route add default
 ipルートは、75.75.75.1 dev eth1テーブルeth1-routeを介してデフォルトを追加します
 ipルートは、241.241.241.1 dev eth2テーブルeth2-routeを介してデフォルトを追加します




さて、親密な瞬間:文書を注意深く読み直してください。 ルールを有効にした後、テーブル内のタイプミスにより、サーバーに接続できなくなる場合があります。



ポリシールーティングを有効にする



 188.188.188.188ルックアップeth0-routeからのipルールの追加
 75.75.75.75ルックアップeth1-routeからのipルールの追加
 IPルールは241.241.241.241ルックアップeth2-routeから追加します




それだけです この瞬間から、サーバーは3つのアドレスすべてに応答し始めます。 良いニュース:ポリシールーティングの優先順位はdhcpのデフォルトルートよりも高いため、リースの更新によってルーティングが中断されることはありません。

不快なニュース:リースの更新時に別のアドレスが与えられると、リースは機能しなくなります。 これは、マスク( from 241.241.241.0/24



)を使用してルールを作成するか、dhcpサーバー構成で釘を使用してアドレスを釘付けにすることで修正できます(一般的に、サーバーはDHCP経由で動的アドレスを発行することを受け入れられません...)



設定でのキャスト



(debian / ubuntu)

これらのルールの最適な場所は、/ etc / network / interfacesです。 目的のインターフェイスについて、次のように記述します。

 iface eth0 inet static
   アドレス188.188.188.188
   ネットマスク255.255.255.0
   放送:188.188.188.255
    188.188.188.1 dev eth0 table eth0-routeを介したデフォルトのIPルート追加後
    188.188.188.188ルックアップeth0-routeからのIPルールの追加後




注釈



ルーティングに関する注意:ソースルーティングは、一般にシステムに脆弱性を開きます(偽のソースを持つパケットが送信され、それがあるべきであるようにあなたはそれを渡します)が、これは直接接続されています。 さらに、ルールでfromからのアドレスのみに制限されている場合、Linuxはこれを見逃しません。また、ルーティングを有効にする必要があります。 通常のサーバーでは、このような構成は完全に安全であり、かなり信頼できます。



負荷分散に関する注意:DNSゾーンのAレコードに3つのアドレスをすべて登録すると、ボンディングや詩人なしで、3つのすべてのインターフェイスで無料のラウンドロビンを受け取ります。 それらは同じサーバーと同じアプリケーションによって処理されるため、ステートフルセッションのバランスを取ることもできます。



All Articles