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.


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

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

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

+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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.