Unterschied zwischen DNAT und REDIRECT in IPTABLES

14

Okay, es mag sein, dass ich dicht besiedelt bin oder einfach nicht die richtige Quelle gefunden habe, aber ich kann nicht verstehen, warum eines dieser IPTABLES-Setups besser wäre als das andere.

Hier ist mein Setup:

Ich habe eine Box, die als transparenter Proxy und als Router oder Sorter dient. Es verfügt über zwei Schnittstellen, ETH0 und ETH1, und das folgende Adressschema:

ETH0 = DHCP ETH1 = 192.168.5.1/24 DHCP für das Netzwerk 192.168.5.0/24 für dahinter stehende Clients im LAN bereitstellen

Ich habe Privoxy installiert und empfange Port 8080 als transparenten Proxy. Mit diesem Setup kann ich diese Box in ein vorhandenes Netzwerk mit minimaler Konfiguration und an den Proxy angeschlossenen Clients einfügen.

Hier ist meine ursprüngliche IPTABLES-Datei

*nat
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-port 8080
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
*filter
COMMIT

Diese Konfiguration funktioniert einwandfrei und der Datenverkehr fließt problemlos hin und her. Ich erhalte die IP-Adresse des Ursprungsclients in den Privoxy-Protokolldateien, und das Leben ist gut.

Meine Verwirrung kommt auf, wenn ich die Konfigurationen anderer Leute betrachte und sehe, dass sie DNAT anstelle von REDIRECT verwenden, und ich versuche, den wahren Nutzen der einen über die anderen zu verstehen. Hier ist eine Beispielkonfiguration:

*nat
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to 192.168.5.1:8080
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
*filter
COMMIT

Auch diese Konfiguration funktioniert wieder und gibt mir alles, was ich aus der Perspektive der Protokollierung brauche ...

Was ist richtig oder vielleicht MEHR richtig als das andere?

Vielen Dank, dass Sie sich die Zeit genommen haben, bis hierher zu lesen ...

QWade
quelle

Antworten:

14

REDIRECTÄndert die Ziel-IP-Adresse, die an das Gerät selbst gesendet werden soll. Mit anderen Worten, lokal generierte Pakete werden der Adresse 127.0.0.1 zugeordnet. Es ist für die Umleitung von lokalen Paketen. Wenn Sie nur den Datenverkehr zwischen Diensten auf dem lokalen Computer umleiten möchten, ist dies eine gute Wahl.

DNATist die tatsächliche Netzwerkadressübersetzung . Wenn Sie möchten, dass Pakete außerhalb des lokalen Systems das Ziel ändern, ist dies die bessere Wahl, da dies REDIRECTnicht funktioniert.

Warner
quelle
Okay, wenn also ein Client hinter dem Proxy sitzt, z. B. auf 192.168.5.234, und ich seine HTTP-Anforderungen über den Proxy auf 192.168.5.1 "verarbeiten" möchte, schlagen Sie vor, ausgehenden Port 80-Datenverkehr auf 192.168 zu DNAT zu verteilen 5.1: 8080 auf dem Proxy. Das kann ich kaufen, aber WARUM ???? Hat das etwas damit zu tun, wie der Datenverkehr behandelt wird, wenn er die ETH0 des Proxys auf dem Weg durch das Standardgateway zum Internet verlässt? Ich muss das grocken, sonst explodiert mein Kopf
QWade
2
DNAT ändert die Adresse, wenn das Paket die Firewall passiert, so dass es beim gewünschten Host ankommt und umgekehrt von der Firewall zu stammen scheint. DNAT gilt fast nie für ausgehenden Datenverkehr, der von der MASQUERADE-Regel behandelt wird. Befand sich der private Proxy auf einem anderen Host, wäre DNAT mit einer entsprechenden Ausnahme für diesen Host angemessen.
BillThor
Bill, danke. Dort ging mein Reptilienhirn hin, aber es ist immer schön, eine Bestätigung zu haben. Wenn ich also ein Paket von 192.168.5.234 an google.com sende und dessen Standard-GW auf 192.168.5.1 (eth1 auf dem Proxy) eingestellt ist, sollte ich dieses Paket an Port 8080 auf dem Proxy "WEITERLEITEN" und Privoxy dies tun lassen der Rest. Der Grund dafür ist, dass privoxy auf 192.168.5.1 und nicht auf einem anderen Host ausgeführt wird. Rauche ich etwas, was ich nicht sollte?
QWade
8

REDIRECTändert die Ziel-IP-Adresse, um sie gemäß der Antwort von Warner @ an den Computer selbst zu senden. Aber ich würde sagen, dass die Antwort nicht ganz richtig oder ein bisschen irreführend ist.

REDIRECTdient nicht nur zum Umleiten lokaler Pakete. In Wirklichkeit ist DNATdie zu verwendende Ziel-IP-Adresse implizit 127.0.0.1, wenn es sich um ein lokales Paket handelt, oder die IP-Adresse der Maschinenschnittstelle, ansonsten 192.168.5.1 im Fall des OP.

Bei dieser Frage sollten die Pakete also unabhängig vom endgültigen Ziel zuerst den Proxy erreichen und sind daher REDIRECTperfekt geeignet.

Da REDIRECTSie keine IP-Adresse angeben müssen, wird nur die richtige verwendet. Dies hat einige Vorteile gegenüber DNAT:

  • Wenn sich die IP-Adresse des Geräts aus irgendeinem Grund ändert, müssen Sie Ihre Regeln nicht ändern. Dies gilt insbesondere DNATnicht für DHCP-gesteuerte Schnittstellen.

  • Sie können die gleichen Regeln für mehrere Systeme (z. B. mehrere Proxy-Instanzen) schreiben und verwalten, ohne aufgrund der spezifischen IP-Adressen unterschiedliche geringfügige Versionen beizubehalten.

Julio Diez
quelle
irgendwie wie snat / maskerade.
Jichao
@Hod, ich habe gehört, dass REDIRECT ein Sonderfall von DNAT ist, aber ich verwende REDIRECT und TOR kennt das tatsächliche Ziel eines Pakets. Daher komme ich zu dem Schluss, dass daddr und dport von iphdr- und tcphdr-Strukturen intakt sind und das Paket gerade von an REDIRECT-Ziel zurückgegeben wurde Kernel. DNAT wird die Strukturen tatsächlich modifizieren. Liege ich falsch?
Docht