web-dev-qa-db-ja.com

特定のインターフェースを介して着信接続をルーティングする方法は?

2つの異なるネットワークセットが構成された複数のイーサネットカードがあります。

route -nの出力は次のとおりです::

     Kernel IP routing table 
      Destination  Gateway        Genmask        Flags Metric Ref Use Iface
   0.0.0.0         192.168.3.1     0.0.0.0         UG    0      0        0 eth0
   169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth1
   192.168.1.0     0.0.0.0         255.255.255.0   U     1      0        0 eth1
   192.168.3.0     0.0.0.0         255.255.255.0   U     1      0        0 eth0

発信接続は問題ありません。問題は着信接続にあります:192.168.1.Xを通過するように着信トラフィックをルーティングするにはどうすればよいですか?

追加したいもう1つのことは、192.168.3.1を経由する発信接続が必要なことです。

2
rahul

私はこれに対する解決策を自分で見つけました: 複数のアップリンク/プロバイダーのルーティング

一般的な構成は次のとおりです。ローカルネットワーク(または1台のマシン)を大規模なインターネットに接続するプロバイダーが2つあります。

                                                               ________
                                          +------------+        /
                                          |            |       |
                            +-------------+ Provider 1 +-------
        __                  |             |            |     /
    ___/  \_         +------+-------+     +------------+    |
  _/        \__      |     if1      |                      /
 /             \     |              |                      |
| Local network -----+ Linux router |                      |     Internet
 \_           __/    |              |                      |
   \__     __/       |     if2      |                      \
      \___/          +------+-------+     +------------+    |
                            |             |            |     \
                            +-------------+ Provider 2 +-------
                                          |            |       |
                                          +------------+        \________

特定のプロバイダー、たとえばプロバイダー1を介して着信するパケットへの応答をルーティングする方法は、同じプロバイダーを介して再度バックアウトします。

まず、いくつかの象徴的な名前を設定しましょう。 $ IF1を最初のインターフェースの名前(上の図のif1)とし、$ IF2を2番目のインターフェースの名前とします。次に、$ IP1を$ IF1に関連付けられたIPアドレスとし、$ IP2を$ IF2に関連付けられたIPアドレスとします。次に、$ P1をプロバイダー1のゲートウェイのIPアドレス、$ P2をプロバイダー2のゲートウェイのIPアドレスとします。最後に、$ P1_NETを$ P1が存在するIPネットワークとし、$ P2_NETをIPネットワーク$とします。 P2はにあります。

1つは、T1とT2などの2つの追加ルーティングテーブルを作成します。これらは/ etc/iproute2/rt_tablesに追加されます。次に、これらのテーブルで次のようにルーティングを設定します。

  ip route add $P1_NET dev $IF1 src $IP1 table T1
  ip route add default via $P1 table T1
  ip route add $P2_NET dev $IF2 src $IP2 table T2
  ip route add default via $P2 table T2

目を見張るようなことは何もありません。単一のアップストリームプロバイダーの場合と同じように、ゲートウェイへのルートを作成し、そのゲートウェイを介してデフォルトルートを作成しますが、プロバイダーごとに別々のテーブルにルートを配置します。上記で指定したように、ゲートウェイを含むそのネットワーク内のホストを見つける方法が示されているため、ネットワークルートで十分であることに注意してください。次に、メインルーティングテーブルを設定します。その隣人に接続されたインターフェースを介して直接隣人に物事をルーティングすることは良い考えです。 `src '引数に注意してください。これらは、正しい送信IPアドレスが選択されていることを確認します。

    ip route add $P1_NET dev $IF1 src $IP1
    ip route add $P2_NET dev $IF2 src $IP2

次に、デフォルトルートの設定:ip route add default via $ P1

次に、ルーティングルールを設定します。これらは実際にルーティングするルーティングテーブルを選択します。対応する送信元アドレスがすでにある場合は、特定のインターフェイスを確実にルーティングする必要があります。iprule add from $ IP1 table T1 ip rule add from $ IP2 table T2

2
rahul

着信を特定にルーティングするのではなく、発信をルーティングします...

ターゲットとするラストホップ(ルーターなど)によって、接続先のインターフェイスが決まります...例: 192.168.1.xから接続が確立された場合、192.168.3.xに接続されたNICにはルーティングされません。

ここで何かが足りないかもしれません...これが聞きたいものでない場合は、ネットワークトポロジを描画するか、さらに情報を提供する必要があると思います。

1
William Hilsum