Wie funktioniert SNAT mit geändertem Zielport?

Wie funktioniert SNAT mit geändertem Zielport?

Ich habe einen Linux-Host, der als Source-NAT (SNAT) dient. Er empfängt alle Pakete für die Standardroute aus dem internen Netzwerk über eine interne Schnittstelle mit der IP 192.168.2.1. Der SNAT-Host hat mehrere ausgehende IP-Adressen (z. B. 3.3.3.3, 3.3.3.4, 3.3.3.5, ...).

Ich möchte iptables (oder ein anderes Tool unter Linux – es muss nicht iptables sein – aber ich denke, das ist das richtige Tool) so konfigurieren, dass der Port, auf dem ein Paket auf der internen, privaten IP ankommt, die IP bestimmt, auf der die Anfrage gesendet wird, und der ausgehende Port konstant ist (z. B. Port 80).

Beispielsweise könnte die folgende Zuordnung prototypisch sein (alle davon würden auf 192.168.2.1 empfangen, aber mit einer Ziel-IP der in der Zuordnung zuerst aufgeführten IP ... -> zeigt das SNAT-Gerät an):

  • (Quelle) 192.168.xy:z (Ziel) 10.10.10.10:8001 -> (Quelle) 3.3.3.3:r (Ziel) 10.10.10.10:80
  • (Quelle) 192.168.xy:z (Ziel) 11.11.11.11:8002 -> (Quelle) 3.3.3.4:r (Ziel) 11.11.11.11:80
  • (Quelle) 192.168.xy:z (Ziel) 12.12.12.12:8003 -> (Quelle) 3.3.3.5:r (Ziel) 12.12.12.12:80
  • (Quelle) 192.168.xy:z (Ziel) 13.13.13.13:8004 -> (Quelle) 4.4.4.3:r (Ziel) 13.13.13.13:80

(192.168.xy könnte jeder beliebige Host im privaten Netzwerk sein. Die Ports z und r sind mit ziemlicher Sicherheit temporäre Ports und sind offensichtlich für jede Sitzung unterschiedlich, aber das SNAT muss diesen Status offensichtlich verwalten, um Antworten an den richtigen Anforderer zurückzusenden.)

Hier ein konkretes Beispiel:

Ein Paket könnte von einer Schnittstelle im privaten Netzwerk stammen (z. B. 192.168.2.5). Die Quell-IP wäre daher „192.168.2.5“. Die Ziel-IP könnte „10.10.10.10“ und der Zielport „8001“ sein. Die Routing-Tabelle weist den lokalen IP-Router an, alle für „0.0.0.0/0“ bestimmten Pakete an 192.168.2.1 zu senden, und es gibt keinen spezifischeren Eintrag in der Routing-Tabelle. Das Paket kommt also bei 192.168.2.1 (dem SNAT) mit einer Ziel-IP von 10.10.10.10 und einem Zielport von 8001 an. Wenn dies geschieht, möchte ich, dass das NAT das Paket über 3.3.3.3:r mit einem Ziel von 10.10.10.10:80 sendet (3.3.3.3 müsste offensichtlich in einer Zuordnung definiert werden und sollte auf dem ursprünglichen Zielport von 8001 basieren).

Ich denke, dass dies mit iptables relativ trivial wäre, wenn der Zielport nicht geändert werden müsste – aber diese Schwierigkeit bringt mich aus der Fassung.

Wie kann ich das erreichen?

verwandte Informationen