Przekieruj port 80 na 8080 i spraw, aby działał na komputerze lokalnym

61

Przekierowałem ruch na port od 80 do 8080 na moim komputerze za pomocą

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

Działa dobrze na całym świecie oprócz mojej własnej maszyny. Jestem programistą i sam muszę przekierować port 80 na 8080.

Moje IP to 192.168.0.111

Mój serwer WWW działa na porcie 8080

Chcę otworzyć stronę internetową http://192.168.0.111/zamiast z tego http://192.168.0.111:8080/samego komputera, na którym działa serwer.

Max
źródło
Przepraszam za abberację, ale jaki jest cel przekierowania portu 80 na 8080?
ma11hew28,
2
@mattdipasquale, normalni użytkownicy nie mogą uzyskać dostępu do portu 80, więc nie można uruchomić usługi sieci Web, takiej jak python flask, jako zwykły użytkownik.
Christian
Dlaczego nie powiążesz serwera WWW z portem 80?
David Foerster
5
zgaduję, że to dlatego, że użytkownik inny niż root nie może połączyć się z portami 80/443 i nie chce uruchamiać swojej usługi internetowej jako root.
Pavel K.,

Odpowiedzi:

80

Musisz użyć OUTPUTłańcucha, ponieważ pakiety przeznaczone dla interfejsu pętli zwrotnej nie przechodzą przez PREROUTINGłańcuch. Następujące powinny działać; działaj jako root:

iptables -t nat -A OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8080
heemayl
źródło
1
Czy port 80 musi być łatwo dostępny? Wypróbowałem twoje rozwiązanie, mój numer portu 8080 jest dostępny, ale 80 nie jest więc nie zadziałało. @heemayl
alper
2
To nie zadziałało, nie jestem pewien, dlaczego zostało to przegłosowane
diyoda_
@Diyoda_ Proszę zdefiniować nie działa .
heemayl
3
Mogę potwierdzić, że to nie działa na Ubuntu 18.04
Ahmed Hamdy
2
Nie działało dla mnie na Ubuntu 18.10
Christopher Bradshaw
6

Prosta wystarczy użyć iptables zezwalając zarówno na port 80, jak i 8080, a następnie przekierować 80 na 8080, aby upewnić się, że przypisujesz do właściwej nic .. w przykładzie używam 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
źródło
Dzięki! Działa na Ubuntu 19
Vladimir Ishenko
1
Później byłoby miło zapisać iptable zmianysudo apt-get install iptables-persistent
Vladimir Ishenko
6

To zadziałało dla mnie.

$ sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
Sanket Chaudhari
źródło
+1 działa dla mnie na Ubuntu 18.04 (przynajmniej dla TCP), czy port 7000-> 7001 i serwery nasłuchujące na porcie 7001 odbierały połączenia przychodzące z portu 7000 :)
hanshenrik
1
upewnij się, że używasz poprawnego interfejsu sieciowego, ponieważ nie jest wywoływany eth0we wszystkich systemach
hanshenrik
4

Zamiast tego iptablesmożesz spróbować: sudo ssh -gL 80:127.0.0.1:8080 localhost

Gregor
źródło
2
Jest to opcja, ale nie jest to dokładnie to, czego chcę, ponieważ mam już serwer WWW na porcie 80. Wolę to robić z iptables i utrzymywać serwer WWW na porcie 80 działający. Chyba muszę po prostu zastosować regułę do innego kroku zamiastPREROUTING
Maks.
Tak - spowoduje to konflikt portów, jeśli masz coś nasłuchującego, do którego przekierowujesz port, jak sugerował Max. Powyższa odpowiedź jest bardziej ogólnym przypadkiem.
cgseller
Podczas próby rozwiązania tego problemu pojawia się komunikat „Odmowa połączenia”.
mitchus