LINUX における非対称ルーティングの問題

LINUX における非対称ルーティングの問題

非対称ルーティングの問題で気が狂いそうです!

3 つの NIC を備えたマルチホーム サーバーを構築しようとしています。各 NIC は 3 つの異なるサブネットに接続されています。

eth0: LAN 接続、10.99.72.38; 機能: 管理トラフィック
eth1: LAN 接続、10.99.70.150; 機能: ユーザー トラフィック
eth2: WAN 接続、10.99.74.85; 機能: ユーザー トラフィック

私は Amazon Linux イメージ (Linux 3.14.20-20.44.amzn1.x86_64 x86_64) を使用していますが、本当に違いがある場合は CentOS に切り替えることができます。

実装しようとしている機能:

eth0: 管理トラフィック

  • アドレス: 10.99.72.38
  • これを「分離された」インターフェースにして、10.0.0.0/8 のアドレスのみを受け入れて応答するようにしたい
  • これは「ローカル LAN からの ssh のみ」の NIC と考えてください。
  • eth0経由でのみ応答できます
  • 他のすべての宛先はブロックされており、このインターフェースを介して他の宛先に到達することはできません。
  • eth0 に到着するトラフィックの応答トラフィックには eth1 または eth2 を使用しません。

eth1: LANとの間のユーザートラフィック

  • 住所: 10.99.70.150
  • LANから任意の宛先へのあらゆるユーザートラフィックを受け入れます
  • 10.xxx宛のトラフィックのパケットをeth1経由でルーティングします。
  • 他の宛先へのパケットを eth2 経由でルーティングします (デフォルト ルート)
  • 受信パケットをeth0経由でルーティングしません

eth2: WANとの間のユーザートラフィック

  • アドレス: 10.99.74.85
  • eth1 からのすべてのユーザートラフィックを受け入れ、10.xxx 以外の宛先にパケットを eth2 から送信します。
  • eth2 で応答パケットを受け入れ、10.xxx 宛てのトラフィックは eth1 経由でルーティングします。
  • 受信パケットをeth0経由でルーティングしません

rt_tables に「mgmt」という iproute2 テーブルを作成し、このインターフェイスを分離するために高い優先度のポリシー ベースのルーティング ルールを追加しましたが、何を試しても、メイン ルーティング テーブルは依然として eth0 がデフォルト ルートとして呼び出されているようです。問題は次のとおりです。

  • eth1 からの受信パケットは eth0 を経由してルーティングされます (これは望ましくありません)
  • eth2 から 10.xxx 宛てに着信するパケットは eth0 を経由してルーティングされます (これは望ましくありません)。
  • メインからデフォルトの eth0 ルートを削除すると、mgmt テーブルにルートがあっても eth0 の機能が完全に失われますが、eth1 は正しく応答します。

最初から、変更されていないルート テーブル (route -n) は次のとおりです。

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface  
0.0.0.0         10.99.72.1      0.0.0.0         UG    0      0        0 eth0  
0.0.0.0         10.99.70.1      0.0.0.0         UG    10001  0        0 eth1  
0.0.0.0         10.99.74.1      0.0.0.0         UG    10002  0        0 eth2  
10.99.70.0      0.0.0.0         255.255.255.0   U     0      0        0 eth1  
10.99.72.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0  
10.99.74.0      0.0.0.0         255.255.255.0   U     0      0        0 eth2  

変更されていない IP ルールは次のとおりです。

0:      from all lookup local  
32766:  from all lookup main  
32767:  from all lookup default  

特定のルーティング ルール、テーブル、ルートを正しく定式化し、最終的なルーティング テーブルとルールがどのようになるかを示していただけると助かります。

答え1

eth0およびのデフォルト ゲートウェイ設定を削除する必要がありますeth1。その方法はディストリビューションによって異なります。

おそらく、ポリシー ルーティングは必要ありません。必要なことは、Netfilter / で実現するのが最適だと思いますiptables

iptables -I INPUT 1 -i eth0 ! -s 10.99.72.0/24 -j DROP
iptables -I FORWARD 1 -i eth0 -j DROP
iptables -I FORWARD 2 -o eth0 -j DROP

iptables -I INPUT 2 -i eth1 ! -s 10.0.0.0/8 -j DROP
iptables -I FORWARD 3 -i eth1 -j ACCEPT

iptables -I INPUT 3 -i eth2 -m conntrack --ctstate NEW -j DROP
iptables -I FORWARD 4 -i eth2 -j ACCEPT

これはおそらく、Netfilter を使用せずに、代わりにポリシー ルーティングを使用して実行できます。

関連情報