
ゲートウェイとしてマシン 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 のサービスは追加のネットワーク名前空間で実行する必要があります。また、このネットワーク名前空間は、おそらく最初のネットワーク名前空間を使用してインターネットと通信する必要があります。さまざまな場所で計画する構成もさらにあります。