iptables: 現在のゲートウェイ IP ごとに異なるルール

iptables: 現在のゲートウェイ IP ごとに異なるルール

ゲートウェイとしてマシン A があるとします。マシン A には 2 つの IP を持つインターフェースが 1 つあります。

マシン A のネットプラン構成は次のようになります。

  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      addresses:
        - 192.168.1.1/24
        - 192.168.1.2/24

ここで、マシンBがゲートウェイを192.168.1.1に設定するか192.168.1.2に設定するかによって、iptablesのREDIRECTルールの動作が異なるようにしたい。

これはマシン A で実行しようとしている iptables コマンドです。

iptables --table nat --append PREROUTING --some-parameter 192.168.1.1 --protocol tcp  --jump REDIRECT --to-ports 9991
iptables --table nat --append PREROUTING --some-parameter 192.168.1.2 --protocol tcp  --jump REDIRECT --to-ports 9992

上記の正しい名前を教えていただけますか--some-parameter ?

答え1

ゲートウェイの同じネットワークインターフェース上の192.168.1.1と192.168.1.2でこれを行う方法はなく、同じMACアドレスに解決されます。これは、iptables実装できる機能ですが、IP ネットワークの仕組み上、実装できない機能です。

192.168.1.1 または 192.168.1.2 をゲートウェイとして使用するクライアントは、インターネットにパケットを送信するときに、192.168.1.1 または 192.168.1.2 を含む単一の IPv4 パケットを送信することはありません。次のようになります。

  • 特定の宛先のルーティングテーブルを参照する
  • この目的地への入り口があることを発見する
  • 使用ARPまたは、ゲートウェイに到達するために必要な L2 アドレス (イーサネット MAC アドレス) を解決するためのキャッシュされたエントリ。

最後のステップでは、イーサネットの宛先は 1 つだけになります。つまり、ゲートウェイの NIC 固有の MAC アドレスです。これは、ゲートウェイ 192.168.1.1 を持つクライアントでも、ゲートウェイ 192.168.1.2 を持つ他のクライアントでも同じです。

したがって、各クライアントは IPv4 送信元アドレスを含むパケットをゲートウェイに送信します。イーサネット フレーム内の意図された IPv4 宛先は、どちらの場合も同じ宛先イーサネット MAC アドレスを持ちます。192.168.1.1/192.168.1.2 はループ外です。

192.168.1.1ゲートウェイは、ルーティングする2つのパケットを認識します。これらのパケットは、ゲートウェイを使用しているか、ゲートウェイとして使用しているかを示唆するものではありません192.168.1.2。情報は回線上に表示されないため、ゲートウェイはどこからも知ることができません。システムがケースを区別する情報を持たない場合、iptablesこの存在しない情報も持つことはできません。


回避策の提案:

使用できるのはマックVLANインターフェースに別のMACアドレスを持つ2番目のNICを用意し、代わりに192.168.1.2/24を割り当てます。これにより、192.168.1.2をゲートウェイとして使用するクライアントからのパケットは、代わりにこのNICに到着するようになります。このケースは、iptables: 別の-i NICフィルター。

しかし、これにより、同じ LAN に複数の NIC が存在するというルーティングの問題が発生し、次のいずれかが必要になります。

  • このケースに適切に対処する高度なポリシールーティングルール

    応答が間違った NIC 経由で送信され、ルーティング動作やファイアウォール ルールに影響する可能性がなくなります。

    • さらに、192.168.1.2 (192.168.1.1 がデフォルトである場合) でクエリされたすべての UDP サービスは、正しい送信元アドレス 192.168.1.2 (デフォルトの 192.168.1.1 ではなく) で応答する方法を知っている必要があります。つまり、マルチホーム対応である必要があります。TCP では特別な注意は必要ありません。
  • または、追加されたインターフェイスを分離するための追加のネットワーク名前空間。ただし、REDIRECT ルールでは、ポート 9992 のサービスは追加のネットワーク名前空間で実行する必要があります。また、このネットワーク名前空間は、おそらく最初のネットワーク名前空間を使用してインターネットと通信する必要があります。さまざまな場所で計画する構成もさらにあります。

関連情報