Quiero redirigir el puerto 80 en la interfaz de red loopback para que los accesos a ese puerto realmente vayan al puerto 8080.
Intenté usar el siguiente comando, pero solo funciona si la aplicación escucha en 127.0.0.1:8080, pero no si escucha en 127.1.2.3:8080.
sudo iptables -t nat -I OUTPUT -p tcp -o lo --dport 80 -j REDIRECT --to-ports 8080
También intenté agregar --source 127.1.2.3/32 --destination 127.1.2.3/32
pero todavía no funciona.
La redirección funciona si abro una aplicación que escucha en 127.0.0.1:8080:
ssh remote -L127.0.0.1:8080:192.168.0.3:80
nc 127.0.0.1 80 # works
Pero no funciona si abro una aplicación escuchando en 127.1.2.3:8080:
ssh remote -L127.1.2.3:8080:192.168.0.3:80
nc 127.1.2.3 80 # fails
nc: connect to 127.1.2.3 port 80 (tcp) failed: Connection refused
nc 127.1.2.3 8080 # works, so the application is still listening on 8080
¿Cómo puedo redirigir el puerto 8080 en 127.xxx al puerto 80 en la misma IP?
Actualización: Motivación
Estoy intentando usar SSH para realizar los siguientes reenvíos de puertos (127.1.2.3:80 → 192.168.0.3:80 y 127.1.2.4:80 → 192.168.0.4:80):
ssh remote -L127.1.2.3:80:192.168.0.3:80 -L127.1.2.4:80:192.168.0.4:80
Dado que el puerto 80 es "privilegiado", ssh no puede abrirlo en localhost. Hay varias formas de evitarlo:
sudo ssh
, pero no quiero tener que copiar mi configuración ssh y mis claves en la cuenta raíz.- Utilice capacidades, pero las actualizaciones de paquetes pueden interrumpir esto.
- Utilice un puerto diferente (por ejemplo, 8080), que funcione pero las URL no relativas se dañan.
- Redirigir el puerto privilegiado a uno no privilegiado, y eso es lo que estoy intentando hacer. Funciona para una única redirección en 127.0.0.1, pero falla si tengo redirecciones en IP distintas a 127.0.0.1 (ver arriba).