Redirección de puertos en loopback con IP distinta a 127.0.0.1

Redirección de puertos en loopback con IP distinta a 127.0.0.1

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/32pero 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).

información relacionada