Reindirizzare la porta da 80 a 8080 e farla funzionare sul computer locale


61

Ho reindirizzato il traffico per la porta da 80 a 8080 sulla mia macchina con

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

Funziona bene per tutto il mondo tranne la mia macchina. Sono uno sviluppatore e devo reindirizzare la porta da 80 a 8080 per me stesso.

Il mio IP è 192.168.0.111

Il mio server Web funziona sulla porta 8080

Vorrei aprire il sito Web http://192.168.0.111/anziché http://192.168.0.111:8080/dalla stessa macchina su cui è in esecuzione il server.


Mi scusi per l'aberrazione, ma qual è lo scopo di inoltrare la porta da 80 a 8080?
ma11hew28,

2
@mattdipasquale, gli utenti normali non possono accedere alla porta 80, quindi non è possibile eseguire un servizio Web come Python Flask come utente normale.
Christian

Perché non associ semplicemente il server Web alla porta 80?
David Foerster,

5
immagino che sia perché l'utente non root non può collegarsi alle porte 80/443 e non vuole eseguire il suo servizio web come root ..
Pavel K.

Risposte:


80

È necessario utilizzare la OUTPUTcatena poiché i pacchetti previsti per l' interfaccia di loopback non passano attraverso la PREROUTINGcatena. Quanto segue dovrebbe funzionare; correre come root:

iptables -t nat -A OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8080

1
La porta 80 deve essere globalmente accessibile? Ho provato la tua soluzione, il mio numero di porta 8080 è accessibile ma 80 non lo è, quindi non ha funzionato. @heemayl
Alper

2
Questo non ha funzionato, non sono sicuro del perché sia ​​stato votato
diyoda_

@Diyoda_ Si prega di definire non ha funzionato .
heemayl

3
Posso confermare che questo non funziona su Ubuntu 18.04
Ahmed Hamdy,

2
Non ha funzionato per me su Ubuntu 18.10
Christopher Bradshaw il

6

Semplicemente basta usare iptables che consenta entrambe le porte 80 e 8080, quindi reindirizzare 80 a 8080 assicurati di assegnarlo al nic corretto ... ad esempio io uso 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

Grazie! Funziona su Ubuntu 19
Vladimir Ishenko il

1
Dopo sarebbe bello salvare le modifiche iptablesudo apt-get install iptables-persistent
Vladimir Ishenko il

6

Questo ha funzionato per me.

$ sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

+1 funziona per me su Ubuntu 18.04 (almeno per TCP), la porta 7000-> 7001 e i server in ascolto sulla porta 7001 hanno ricevuto connessioni in entrata dalla porta 7000 :)
hanshenrik

1
assicurati di utilizzare l'interfaccia di rete corretta, tuttavia non viene richiamata eth0su tutti i sistemi
hanshenrik,

4

Invece di iptables, Potresti provare: sudo ssh -gL 80:127.0.0.1:8080 localhost


2
Questa è un'opzione ma non è esattamente quello che voglio perché ho già un server web sulla porta 80. Preferirò farlo con iptables e far funzionare il web server sulla porta 80. Immagino che devo solo applicare la regola a un passaggio diverso invece diPREROUTING
Max

Sì, questo causerà un conflitto di porte se hai qualcosa in ascolto che stai port forwarding come suggerito da Max. La risposta sopra è il caso più generale.
cgseller,

Ottengo una "Connessione rifiutata" quando provo questa soluzione.
mitchus,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.