Warum kommt SNAT in der POSTROUTING-Kette und DNAT in der PREROUTING-Kette vor?

8

Warum SNAT(ändert die Quell-IP und / oder die Ports) tritt in der natTabellenkette auf POSTROUTING, dh nach dem Routing? Und warum DNAT(ändert die Ziel-IP-Ant / oder Ports) in der PREROUTINGKette? Ich denke, letzteres liegt daran, dass es in einem PC mit unterschiedlichen privaten Netzwerken möglicherweise mehrere Netzwerkkarten gibt und der PC nicht weiß, wie das Paket weitergeleitet werden soll, wenn die Ziel-IP-Adresse immer noch eine öffentlich routbare Adresse ist. Doch für SNATIch kann keinen Grund sehen , warum dies nicht stattfinden könnte in PREROUTING.

Martin
quelle

Antworten:

4

Normalerweise ist das Hauptkriterium für SNAT "Verkehr, der über eine bestimmte Schnittstelle ausgeht" (dh -o eth0). Welche Schnittstelle ein Paket ausgibt, wird durch das Routing bestimmt. Um dieses Kriterium anzuwenden, müssen Sie es in einem POSTROUTINGKontext ausführen .

DNAT schreibt die Zieladresse eines Pakets neu, was bedeutet, dass dies Auswirkungen darauf haben kann, wohin ein Paket geht. Beispielsweise kann ein Paket, das für das Gateway bestimmt ist, neu geschrieben werden, um stattdessen zu einem Computer im Netzwerk zu gelangen. Da das Routing dieses umgeschriebene Ziel bei seiner Entscheidung berücksichtigen soll, damit das Paket tatsächlich dorthin gelangt, wo es benötigt wird, sollte DNAT in einem PREROUTINGKontext ausgeführt werden.

Hobbs
quelle
1
In der Tat gute Punkte! Könnte also SNATnicht in der PREROUTINGKette passieren , weil dies bedeuten würde, dass alle Pakete SNATempfangen werden, während dies tatsächlich nur zum Beispiel für eine Internet-Schnittstelle erwünscht wäre? Und DNATmuss dies geschehen, PREROUTINGweil die Ziel-IP geändert wird und daher vor der Routing-Entscheidung erfolgen muss, um über die richtige (LAN-zugewandte) Schnittstelle weitergeleitet zu werden?
Martin
5

Ich bin mir ziemlich sicher, dass alles, was von der lokalen Maschine kommt, niemals durch den PREROUTINGTisch geht, wie in dieser fantastischen ASCII-Figur zu sehen ist .

Aaron D. Marasco
quelle
Ja, aber ist das wichtig? Ich meine, Sie würden dies DNATnur tun, wenn der PC als Router fungiert und mindestens eines der LAN-Netzwerke private IP-Adressen verwendet.
Martin
Es ist wichtig , weil Sie gefragt , warum Sie nicht tun können , SNATin preroutingund ich antwortete - Pakete , deren Quelle die lokale Maschine nie die Tabelle besuchen. Deshalb kann es nicht.
Aaron D. Marasco
Ok, aber in welchem ​​Szenario würden Sie SNATeinen Datenverkehr vom lokalen Computer ausführen? eth1Angenommen , es gibt einen PC mit gegenüberliegendem LAN (IP-Adresse 10.10.10.1/24) und eth0gegenüberliegendem Internet (IP-Adresse 198.51.100.1/24). Der gesamte Datenverkehr von diesem Computer zum Internet verwendet einfach 198.51.100.1 als Eine Quell-IP-Adresse und keine SNATwird benötigt. IMHO SNATwird nur benötigt, wenn der Datenverkehr durch den PC fließt und dann durch den PC fließt PREROUTING. Oder fehlt mir etwas?
Martin
2

Wie die Kettennamen andeuten, PREROUTINGerfolgt dies zunächst, wenn ein Paket empfangen wird, und wird daher basierend darauf weitergeleitet, wohin es geht (Ziel). Nachdem alle anderen Routing-Regeln angewendet wurden, bestimmt die POSTROUTINGKette anhand der Herkunft (Quelle), wohin sie führt.

Auf meinem Server werden beispielsweise alle eingehenden Ports, die weitergeleitet werden sollen (NAT), in der PREROUTINGKette als definiert DNAT, und alle Pakete, die von den NAT-Schnittstellen stammen, durchlaufen die POSTROUTINGKette als SNATund folglich (in diesem Fall) gehen durch die Filterkette FORWARD.

Julie Pelletier
quelle
0

Wenn Sie eine Paketmanipulation unter Linux durchführen, ist der aus Kettenperspektive übliche Pfad PREROUTING als erste Kette und POSTROUTING die letzte Kette im Paketpfad. Es gibt viele Konfigurationen, die ein Router normalerweise hat, die sogar einige Transformationen wie die Auswahl eines IPSec-VPN-Tunnels für einen bestimmten Fluss enthalten. Normalerweise besteht bei SNAT die Absicht, das Paket mit einer Adresse zu senden, die von Hosts erreicht werden kann, die in einem öffentlichen Netzwerk verbunden sind. Solche Änderungen werden am Paket vorgenommen, wenn es den Router verlassen soll, dh POSTROUTING-Level kurz vor dem OUTPUT, um ein Vermischen der IP-Adressen zu vermeiden. In ähnlicher Weise erwartet der Router in umgekehrter Richtung zunächst den tatsächlichen Fluss, damit alle Entscheidungen gemäß den Konfigurationen angewendet werden können, wenn das Paket den Stapel durchläuft.

Sandeep Malik
quelle