適切なゲートウェイで要求に応答する

適切なゲートウェイで要求に応答する

非常に単純なシナリオがあります。残念ながら、この問題に一致する答えは見つかりませんでした。異なる WAN (192.168.0.70 と 192.168.0.80) 用に 2 つの Linux ルーター (= ゲートウェイ) があります。どちらもポート 50000 を Linux サーバー 192.168.0.60 に転送しています。サーバーには、デフォルト ゲートウェイ 192.168.0.70 を持つインターフェイスが 1 つだけあります。追加の構成がない場合、次の動作になります。

192.168.0.70 経由の受信リクエスト -> 応答が機能している (デフォルト ゲートウェイのため)

192.168.0.80 経由の受信リクエスト -> 応答に 192.168.0.70 がかかるため動作しません

192.168.0.80 経由のリクエストが 192.168.0.80 経由で送り返されるようにするにはどうすればよいでしょうか?

答え1

新しい接続にマーカーを付け、そのマーカーに基づいて送信パケットを区別し、2つのルーティングテーブルのいずれかを使用して適切なゲートウェイにルーティングする必要があります。CONNTRACKモジュールをロードする必要がある可能性があります。

          modprobe ip_conntrack

MAC70をゲートウェイ192.168.0.70のMACアドレス、MAC80を192.168.0.80のMACアドレスとします。

       iptables -A INPUT -m state --state NEW -m mac --mac-source MAC70 -p tcp --dport 50000 -j CONNMARK --set-mark 1
       iptables -A INPUT -m state --state NEW -m mac --mac-source MAC80 -p tcp --dport 50000 -j CONNMARK --set-mark 2

これらの2つのルールは、2つの単純なマーカーで新しい着信接続(TCPプロトコルの場合、必要に応じて変更してください)をマークします。マーカーは接続全体用です。つまりこの最初のパケットに属する、ESTABLISHED、RELATED タイプの後続のすべてのパケットには、同じマークが付きます。

各パケットの送信元IPアドレスは接続を開始したクライアントのIPアドレスであるため、ゲートウェイのMACアドレスに基づいてのみ区別することができます。ないゲートウェイのものです。したがって、WiFi フレームは MAC アドレスを伝送しないため、これはイーサネット接続にのみ適用されます。

       ip rule add fwmark 1 table router70
       ip rule add fwmark 2 table router80

これら 2 つのコマンドは、接続/パケット マークに応じて、使用するルーティング テーブル (2 つのうち) を指定します。

ここで、2 つのルーティング テーブルを設定します。

        echo 200 router70 >> /etc/iproute2/rt_tables
        echo 201 router80 >> /etc/iproute2/rt_tables
        ip route add 192.168.0.0/24 dev eth0 table router70
        ip route add 192.168.0.0/24 dev eth0 table router80
        ip route add default via 192.168.0.70 table router70
        ip route add default via 192.168.0.80 table router80

これは、イーサネット NIC が eth0 と呼ばれていることを前提としています。そうでない場合は、それに応じて変更してください。他のすべてのポートおよび/またはプロトコルのルーティングは、それが何であれ、既存のもののままです。

完了です。

関連情報