Leiten Sie den Port 80 auf den 8080 um, damit er auf dem lokalen Computer funktioniert

61

Ich habe den Datenverkehr für Port 80 auf 8080 auf meinem Computer mit umgeleitet

sudo iptables -A PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-ports 8080

Es funktioniert gut für die ganze Welt, außer für meine eigene Maschine. Ich bin Entwickler und muss Port 80 auf 8080 umleiten.

Meine IP ist 192.168.0.111

Mein Webserver läuft auf Port 8080

Ich wünsche Webseite zu öffnen , aus , http://192.168.0.111/anstatt http://192.168.0.111:8080/von demselben Computer , auf dem Server ausgeführt wird .

Max
quelle
Entschuldigen Sie den Misserfolg, aber wozu wird Port 80 nach 8080 weitergeleitet?
ma11hew28
2
@mattdipasquale, normale Benutzer können nicht auf Port 80 zugreifen, sodass Sie als normaler Benutzer keinen Webdienst wie Python Flask ausführen können.
Christian
Warum binden Sie den Webserver nicht einfach an Port 80?
David Foerster
5
Ich denke, es liegt daran, dass Benutzer ohne Rootberechtigung nicht an die Ports 80/443 binden können und er seinen Webdienst nicht als Root ausführen möchte.
Pavel K.,

Antworten:

79

Sie müssen die OUTPUTKette verwenden, da die für die Loopback- Schnittstelle bestimmten Pakete nicht über die PREROUTINGKette übertragen werden. Folgendes sollte funktionieren; Laufen als root:

iptables -t nat -A OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8080
heemayl
quelle
1
Muss Port 80 leicht zugänglich sein? Ich habe deine Lösung ausprobiert, meine Portnummer 8080 ist zugänglich, aber 80 ist nicht, daher hat es nicht funktioniert. @heemayl
alper
2
Dies hat nicht funktioniert, nicht sicher, warum dies gewählt wird
diyoda_
@Diyoda_ Bitte definieren hat nicht funktioniert .
Heemayl
3
Ich kann bestätigen, dass dies auf Ubuntu 18.04
Ahmed Hamdy
2
Funktionierte nicht für mich auf Ubuntu 18.10
Christopher Bradshaw
6

Verwenden Sie einfach iptables, indem Sie sowohl Port 80 als auch 8080 zulassen und dann 80 auf 8080 umleiten. Stellen Sie sicher, dass Sie die richtige NIC zuweisen. In Beispiel verwende ich eth0

iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
tmac
quelle
Vielen Dank! Es arbeitet an Ubuntu 19
Vladimir Ishenko
1
Nach wäre schön, iptable Änderungen zu speichernsudo apt-get install iptables-persistent
Vladimir Ishenko
6

Das hat bei mir funktioniert.

$ sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
Sanket Chaudhari
quelle
+1 funktioniert für mich unter Ubuntu 18.04 (zumindest für TCP), hat Port 7000-> 7001 und Server, die auf Port 7001 lauschen, eingehende Verbindungen von Port 7000 erhalten :)
Hanshenrik
1
eth0
Stellen
4

Anstelle der iptableskönnten Sie versuchen: sudo ssh -gL 80:127.0.0.1:8080 localhost

Gregor
quelle
2
Das ist eine Option, aber es ist nicht genau das, was ich will, weil ich bereits einen Webserver auf Port 80 habe. Ich werde es vorziehen, dies mit iptables zu tun und den Webserver auf Port 80 laufen zu lassen. Ich denke, ich muss die Regel nur auf einen anderen Schritt anwenden alsPREROUTING
Max
Ja - dies führt zu einem Portkonflikt, wenn Sie eine Empfangsfunktion haben, zu der Sie einen Port weiterleiten, wie von Max vorgeschlagen. Die obige Antwort ist der allgemeinere Fall.
cgseller
Ich erhalte die Meldung "Verbindung abgelehnt", wenn ich diese Lösung versuche.
Mitchus