Redirecionamento de porta em loopback com IP diferente de 127.0.0.1

Redirecionamento de porta em loopback com IP diferente de 127.0.0.1

Quero redirecionar a porta 80 na interface de rede de loopback para que o acesso a essa porta vá para a porta 8080.

Tentei usar o seguinte comando, mas ele só funciona se o aplicativo estiver escutando em 127.0.0.1:8080, mas não se estiver escutando em 127.1.2.3:8080.

sudo iptables -t nat -I OUTPUT -p tcp -o lo --dport 80 -j REDIRECT --to-ports 8080

Eu também tentei adicionar --source 127.1.2.3/32 --destination 127.1.2.3/32, mas ainda não funciona.

O redirecionamento funciona se eu abrir um aplicativo escutando em 127.0.0.1:8080:

ssh remote -L127.0.0.1:8080:192.168.0.3:80

nc 127.0.0.1 80 # works

Mas não funciona se eu abrir um aplicativo escutando em 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

Como posso redirecionar a porta 8080 em 127.xxx para a porta 80 no mesmo IP?

Atualização: Motivação

Estou tentando usar o SSH para fazer os seguintes encaminhamentos de porta (127.1.2.3:80 → 192.168.0.3:80 e 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

Como a porta 80 é "privilegiada", o ssh não pode abri-la no host local. Existem várias maneiras de contornar isso:

  • sudo ssh, mas não quero copiar minha configuração e chaves ssh na conta root.
  • Use recursos, mas as atualizações de pacotes podem quebrar isso.
  • Use uma porta diferente (por exemplo, 8080), que funciona, mas URLs não relativos são quebrados.
  • Redirecione a porta privilegiada para uma não privilegiada, e é isso que estou tentando fazer. Funciona para um único redirecionamento em 127.0.0.1, mas falha se eu tiver redirecionamentos em IPs diferentes de 127.0.0.1 (veja acima).

informação relacionada