Redirija el puerto 80 al 8080 y haga que funcione en la máquina local.

61

Redirigí el tráfico para el puerto 80 a 8080 en mi máquina con

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

Funciona bien para todo el mundo excepto mi propia máquina. Soy desarrollador y necesito redirigir el puerto 80 al 8080 por mí mismo.

Mi IP es 192.168.0.111

Mi servidor web se ejecuta en el puerto 8080

Deseo abrir el sitio web desde en http://192.168.0.111/lugar de http://192.168.0.111:8080/desde la misma máquina donde se ejecuta el servidor.

Max
fuente
Disculpe la aberración, pero ¿cuál es el propósito de reenviar el puerto 80 al 8080?
ma11hew28
2
@mattdipasquale, los usuarios normales no pueden acceder al puerto 80, por lo que no puede ejecutar un servicio web como Python Frasco como usuario normal.
Christian
¿Por qué no vincula el servidor web al puerto 80?
David Foerster
55
Supongo que es porque el usuario no root no puede vincularse a los puertos 80/443 y no quiere ejecutar su servicio web como root ..
Pavel K.

Respuestas:

80

Debe usar la OUTPUTcadena ya que los paquetes destinados a la interfaz de bucle invertido no pasan a través de la PREROUTINGcadena. Lo siguiente debería funcionar; correr como root:

iptables -t nat -A OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8080
heemayl
fuente
1
¿Se requiere que el puerto 80 sea globalmente accesible? Intenté su solución, mi número de puerto 8080 es accesible pero 80 no lo es, por lo tanto, no funcionó. @heemayl
Alper
2
Esto no funcionó, no estoy seguro de por qué se votó a favor
diyoda_
@Diyoda_ Definir no funcionó .
heemayl
3
Puedo confirmar que esto no funciona en ubuntu 18.04
Ahmed Hamdy
2
No funcionó para mí en Ubuntu 18.10
Christopher Bradshaw
6

Simple, solo use iptables permitiendo tanto el puerto 80 como el 8080, luego redirija 80 a 8080, asegúrese de que está asignando el nic correcto. En ejemplo, 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
tmac
fuente
¡Gracias! Está funcionando en Ubuntu 19
Vladimir Ishenko
1
Después sería bueno guardar los cambios de iptablesudo apt-get install iptables-persistent
Vladimir Ishenko
6

Esto funcionó para mí.

$ sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
Sanket Chaudhari
fuente
+1 funciona para mí en Ubuntu 18.04 (al menos para TCP), el puerto 7000-> 7001 y los servidores que escuchaban en el puerto 7001 recibieron conexiones entrantes desde el puerto 7000 :)
hanshenrik
1
asegúrese de utilizar la interfaz de red correcta, no se llama eth0en todos los sistemas
hanshenrik
4

En lugar de iptables, podría intentar: sudo ssh -gL 80:127.0.0.1:8080 localhost

Gregor
fuente
2
Esa es una opción, pero no es exactamente lo que quiero porque ya tengo un servidor web en el puerto 80. Preferiría hacerlo con iptables y mantener el servidor web en el puerto 80 en funcionamiento. Supongo que solo tengo que aplicar la regla a un paso diferente en lugar dePREROUTING
Max
Sí, esto provocará un conflicto de puertos si tiene algo escuchando que está reenviando puertos como lo sugirió Max. La respuesta anterior es el caso más general.
cgseller
Recibo una "Conexión rechazada" cuando intento esta solución.
mitchus