非対称ルーティングの問題のために狂気の地径です!
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からすべての宛先へのすべてのユーザートラフィックを許可する
- eth1を介して10.xxxに向かうトラフィックへのパケットルーティング
- eth2(デフォルトパス)を介して別の宛先にパケットをルーティング
- 着信パケットは eth0 経由でルーティングされません。
eth2:WANを行き来するユーザートラフィック
- 住所:10.99.74.85
- eth1 のすべてのユーザー トラフィックを受け入れ、eth2 のパケットを 10.xxx 以外の宛先に送信します。
- eth2 から応答パケットを受け入れ、eth1 経由で 10.xxx に向かうすべてのトラフィックをルーティングします。
- 着信パケットは eth0 経由でルーティングされません。
rt_tablesに "mgmt"というiproute2テーブルを作成し、このインターフェイスを分離しようとポリシーベースの高い優先順位ルーティングルールを追加しましたが、いくら試してもデフォルトルーティングテーブルはまだデフォルトルーティングであるeth0と呼ばれるようです。 。質問は次のとおりです。
- eth1からの着信パケットはeth0を介してルーティングされます。 (これは欲しくない!)
- eth2 から 10.xxx への着信パケットは eth0 経由でルーティングされます。 (これは欲しくない!)
- デフォルトのeth0パスをデフォルトから削除すると、eth0機能が完全に失われます。パスが mgmt テーブルに存在していても、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なしで実行できます。