
Okay, es liegt vielleicht daran, dass ich nicht so bewandert bin oder einfach nicht die richtige Quelle finde, aber ich kann nicht verstehen, warum eines dieser IPTABLES-Setups besser sein soll als das andere.
Hier ist mein Setup:
Ich habe eine Box, die als transparenter Proxy und Router oder so etwas dient. Sie hat zwei Schnittstellen, ETH0 und ETH1, und das folgende Adressschema:
ETH0 = DHCP ETH1 = 192.168.5.1/24 stellt DHCP für das Netzwerk 192.168.5.0/24 für dahinterliegende Clients im LAN bereit
Ich habe Privoxy installiert und lausche auf Port 8080 als transparenter Proxy. Mit diesem Setup erreiche ich, dass ich diese Box mit minimaler Konfiguration und angeschlossenen Clients in ein bestehendes Netzwerk einbinden kann.
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 läuft problemlos hin und her. Ich erhalte die IP-Adresse des ursprünglichen Clients in den Privoxy-Protokolldateien und alles ist in Ordnung.
Ich bin verwirrt, wenn ich mir die Konfigurationen anderer Leute anschaue und sehe, dass sie DNAT statt REDIRECT verwenden. Dann versuche ich, den wirklichen Vorteil des einen gegenüber dem 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 bietet mir alles, was ich aus Protokollierungssicht brauche ...
Welches ist richtig oder vielleicht sogar richtiger als das andere?
Danke, dass Sie sich die Zeit genommen haben, bis hierher zu lesen …
Antwort1
REDIRECT
ändert die Ziel-IP-Adresse, um sie an den Computer selbst zu senden. Mit anderen Worten, lokal generierte Pakete werden der Adresse 127.0.0.1 zugeordnet. Sie dient zur Umleitung lokaler Pakete. Wenn Sie nur den Datenverkehr zwischen Diensten auf dem lokalen Computer umleiten möchten, ist dies eine gute Wahl.
DNAT
ist tatsächlichNetzwerkadressübersetzungWenn Sie möchten, dass das Ziel von Paketen, die außerhalb des lokalen Systems ankommen, geändert wird, ist dies die bessere der beiden Möglichkeiten, da es REDIRECT
nicht funktioniert.
Antwort2
REDIRECT
ändert die Ziel-IP-Adresse, um sie an die Maschine selbst zu senden, wie von Warner@ beantwortet. Aber ich würde sagen, dass diese Antwort nicht ganz richtig oder ein wenig irreführend ist.
REDIRECT
dient nicht nur zum Umleiten lokaler Pakete. Dabei ist DNAT
die zu verwendende Ziel-IP-Adresse implizit, 127.0.0.1, wenn es sich um ein lokales Paket handelt, oder andernfalls die IP-Adresse der Maschinenschnittstelle, 192.168.5.1 im Fall des OP.
Bei dieser Frage ist es also egal, was das endgültige Ziel ist, die Pakete sollten zuerst den Proxy erreichen, also REDIRECT
ist es perfekt geeignet.
Da REDIRECT
Sie bei die IP-Adresse nicht angeben müssen, sondern einfach die richtige nehmen, hat es gegenüber einige Vorteile DNAT
:
DNAT
Wenn sich die IP-Adresse des Computers aus irgendeinem Grund ändert, müssen Sie Ihre Regeln nicht ändern. Dies funktioniert insbesondere nicht bei DHCP-gesteuerten Schnittstellen.Sie können dieselben Regeln für mehrere Systeme (z. B. mehrere Proxy-Instanzen) schreiben und verwalten, ohne dass aufgrund der spezifischen IP-Adressen leicht unterschiedliche Versionen beibehalten werden müssen.
Antwort3
DNAT und REDIRECT sind genau dasselbe, wenn Sie Datenverkehr an die lokale Maschine senden möchten.
In der Dokumentation heißt es dazu: „[Umleitung] ist ein Spezialfall von Destination NAT, der Umleitung genannt wird: Es handelt sich um eine einfache Vereinfachung, die genau dem Ausführen von DNAT auf die Adresse der eingehenden Schnittstelle entspricht.“
https://www.netfilter.org/documentation/HOWTO/NAT-HOWTO-6.html#ss6.2