¿Cómo reenviar el puerto 80 a otro puerto en la misma máquina?

39

¿Cómo puedo reenviar las solicitudes que entran en el puerto 80 a otro puerto en la misma máquina Linux?

Solía ​​hacer esto cambiando nat.conf, pero esta máquina que estoy usando no tiene NAT. Cual es la alternativa?

Nohsib
fuente
¿Sin NAT en absoluto o simplemente sin nat.conf? ¿Has probado alguna regla de iptables usando NAT?
Ben Swinburne

Respuestas:

47

Puede lograr la redirección con iptables:

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
Thomas Vincent
fuente
+1. Haciendo esto por años
Alexander Pogrebnyak
1
¿Qué tal en Windows Server?
Luc
¡Oh hombre, esto es exactamente lo que estaba buscando, felicitaciones!
neurosnap
Al principio no funcionó para mí, pero estaba bien cuando lo usabasudo
mdiscenza
1
¿Qué hacer si no hay interfaz eth0? ¿Por qué no utilizar la interfaz de bucle invertido?
harschware
15

Acabo de encontrarme en esta pregunta y no pude encontrar una manera fácil. No quiero instalar Nginx en mi máquina para hacer este simple reenvío de puertos.

Rinetdno funcionó para mí, no hay paquete de trabajo para mi distribución. Fui por en su socatlugar. Super simple:

socat TCP-LISTEN:80,fork TCP:127.0.0.1:5000

Debe ejecutarse supara poder escuchar en el puerto 80.

alfetopito
fuente
La configuración de Rinetd es más fácil, creo.
johnshen64
¡Socat funciona perfectamente!
viv
10

Debería considerar usar un proxy inverso , como Nginx . Por ejemplo, puede poner algo como esto en su nginx.confarchivo:

server {
    listen         80;

    server_name    your_ip_address your_server_name

    access_log   /var/log/nginx/your_domain/access.log ;
    error_log    /var/log/nginx/your_domain/error.log info ;

    location / {
        proxy_pass  http://127.0.0.1:3000;   # pass requests to the destination
    }
}
Tilo
fuente
2
¿Por qué? No estoy necesariamente en desacuerdo, pero ¿hay alguna buena razón por la que no quieras que esto suceda ™ en la pila de redes?
Oli
@Oli Este método de proxy inverso no afectará a muchos otros hosts virtuales en el servidor, lo que ocurriría si iptables lo hiciera ya que iptables no sabe nada de hosts virtuales.
ceniza