Umleitung von Iptables zu localhost?

12

Angenommen, ich habe ein Netzwerk mit einem Server, der alle Verbindungen innerhalb des Netzwerks zum Internet weiterleitet. Wie kann ich iptables so einrichten, dass eingehende Verbindungen nicht zum Internet, sondern zum Localhost-Port 8080 weitergeleitet werden?

DankMemes
quelle
Das Problem ist, dass Sie bei einfacher Umleitung (Ziel-IP-Adresse NAT) die ursprüngliche Ziel-IP-Adresse verlieren. Möchten Sie einen transparenten HTTP-Proxy einrichten oder sollten auch andere Protokolle als HTTP verarbeitet werden?
Pabouk
Es spielt keine Rolle, ob es transparent ist oder nicht
DankMemes
Das Umleiten des gesamten Datenverkehrs an einen Proxy ist eine Basis für transparenten Proxy :)
pabouk
Hier ist eine weitere Antwort, die mir wirklich geholfen hat: unix.stackexchange.com/questions/111433/…
Wren T.

Antworten:

5
sysctl net.ipv4.ip_forward=1 
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8080
Alex Antonov
quelle
1
Verwenden Sie nicht fett ....
Vielen Dank! Ich habe das noch nicht ausprobiert, aber ich vermute, dass mir der Befehl zur IP-Weiterleitung gefehlt hat. Und beim nächsten Mal verwenden Sie bitte nicht fett gedruckte Codeblöcke.
DankMemes
@AlexAntonov bitte Code-Blöcke verwenden. Wählen Sie Ihren Text im Bearbeitungsmodus aus und klicken Sie auf das Klammersymbol.
DankMemes
@ZoveGames, sorry, das Problem wurde behoben.
Alex Antonov
2
Ich habe damit experimentiert. Das ip_forward sysctl ist nicht erforderlich. Hier ist jedoch die Option route_localnet . Ich sehe jetzt genau das, was Juan Cespedes in seiner Antwort sagt.
Matt Joiner
29

das geht mit iptables, aber nur mit kernel> = 3.6.

Sie müssen Folgendes tun:

sysctl -w net.ipv4.conf.all.route_localnet=1
iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to 127.0.0.1:8080

ip_forwardist nicht erforderlich, da das Paket nicht weitergeleitet wird. Wenn Sie jedoch nicht sysctl für einschließen route_localnet(was nur in Kerneln> = 3.6 funktioniert), wird das Paket vom Kernel verworfen, da er es als "Marsmensch" ansieht von außen und mit einer Zieladresse von 127.0.0.1

Juan Cespedes
quelle
Ja, das funktioniert
Nick De Greek
Wusste nichts über route_localnet. So altmodisch und konnte nicht herausfinden, warum ip_forward nicht funktionierte (vermutete, dass es nicht benötigt wurde, aber trotzdem ausprobiert wurde).
Dmourati
1
Stellen Sie sicher , dass Sie sparen net.ipv4.conf.all.route_localnet=1in /etc/sysctl.confsonst wird es nicht dauerhaft sein und nach dem Neustart wird die Variable gehen zurück auf 0, wodurch das Paket fallen gelassen. Dann wäre es sehr schwer herauszufinden, warum jetzt alles nicht funktioniert ... es ist mir passiert. ;)
nämlich
Es tut uns leid, eine alte Frage zu beantworten, aber gibt es eine IPv6-Entsprechung net.ipv4.conf.all.route_localnetfür die Verwendung mit ip6tables?
Kebian,