宛先ポートを変更して SNAT を実行する方法は?

宛先ポートを変更して SNAT を実行する方法は?

ソース NAT (SNAT) として機能する Linux ホストがあります。このホストは、IP 192.168.2.1 の内部インターフェイスで内部ネットワークからのデフォルト ルートのすべてのパケットを受信します。SNAT ホストには複数の送信 IP アドレスがあります (例: 3.3.3.3、3.3.3.4、3.3.3.5、...)。

パケットが内部のプライベート IP に到着するポートによって、要求が送信される IP が決定され、送信ポートが一定 (例: ポート 80) になるように、iptables (または Linux 上の他のツール - iptables である必要はありませんが、適切なツールだと思います) を構成したいと思います。

たとえば、以下のマッピングは典型的なものになります (これらはすべて 192.168.2.1 で受信されますが、宛先 IP はマッピングの最初にリストされている IP になります... -> SNAT デバイスを示します)。

  • (ソース) 192.168.xy:z (宛先) 10.10.10.10:8001 -> (ソース) 3.3.3.3:r (宛先) 10.10.10.10:80
  • (ソース) 192.168.xy:z (宛先) 11.11.11.11:8002 -> (ソース) 3.3.3.4:r (宛先) 11.11.11.11:80
  • (ソース) 192.168.xy:z (宛先) 12.12.12.12:8003 -> (ソース) 3.3.3.5:r (宛先) 12.12.12.12:80
  • (ソース) 192.168.xy:z (宛先) 13.13.13.13:8004 -> (ソース) 4.4.4.3:r (宛先) 13.13.13.13:80

(192.168.xy はプライベート ネットワーク上の任意のホストである可能性があります。ポート z と r はほぼ間違いなく一時ポートであり、セッションごとに異なりますが、SNAT は正しい要求元に応答を返すためにその状態を管理する必要があります)

具体的な例を以下に示します。

パケットはプライベート ネットワーク上のインターフェイス (例: 192.168.2.5) から発信される可能性があります。したがって、送信元 IP は「192.168.2.5」になります。宛先 IP は「10.10.10.10」、宛先ポートは「8001」になります。ルーティング テーブルは、ローカル IP ルーターに「0.0.0.0/0」宛てのすべてのパケットを 192.168.2.1 に送信するように指示し、これ以上の特定のルート テーブル エントリはありません。したがって、パケットは宛先 IP が 10.10.10.10、宛先ポートが 8001 で 192.168.2.1 (SNAT) に到着します。その場合、NAT は宛先が 10.10.10.10:80 の 3.3.3.3:r でパケットを送信するようにする必要があります (3.3.3.3 は明らかにマッピングで定義する必要があり、元の宛先ポート 8001 に基づく必要があります)。

宛先ポートを変更する必要がない場合は、iptables を使用すると比較的簡単になると思いますが、その問題で困惑しています。

どうすればこれを実現できるでしょうか?

関連情報