Encaminhando um Localhost: Port para um ExternalIP: NewPort

7

Temos um aplicativo em execução no nosso servidor linux. A partir desse aplicativo, quando tentamos acessar o host local (127.0.0.1): localport, ele deve ser encaminhado para um IP externo. Os usuários só tentarão acessar o host local em uma determinada porta que será automaticamente encaminhada. Eu li na tabela iptables nat, mas PREROUTING e POSTROUTING não serão aplicáveis se estiverem corretos, já que estou acessando uma porta no localhost do próprio localhost que não toca na interface de rede. Perguntar a tabela OUTPUT pode ser útil, mas quando tentei algumas combinações, não funcionou. Estou usando a coisa certa ou não é possível fazê-lo?

Alguém pode me apontar na direção certa?

    
por keerthi 02.02.2015 / 11:11

2 respostas

9

Eu já imaginei fazer isso sozinho.

2 regras e um sinalizador devem ser definidos para isso.

Exemplo usado aqui é para "telnet localhost XXXX", deve encaminhar pacotes para Ext.er.nal.IP: YYYY.

sysctl -w net.ipv4.conf.all.route_localnet = 1

Este flag infelizmente existe apenas nos kernels linux mais recentes e não está disponível em um kernel antigo (também não existe nenhum sinalizador alternativo no kernel antigo). Não estou certo de qual kernel exato é a bandeira disponível. Eu acredito que esteja disponível nas versões do kernel 3.XX. Esse sinalizador é considerar os endereços de loopback como um endereço de origem ou de destino adequado. Fonte: link

iptables -t nat -A OUTPUT -p tcp --dportar XXXX -j DNAT - para o destino Ext.er.nal.IP: AAAA

O comando acima irá alterar os pacotes que são para localhost: XXXX com o IP de destino como Ext.er.nal.IP: YYYY

iptables -t nat -A POSTROUTANDO -j MASQUERADE

O comando irá alterar o IP de origem como o ip público da sua máquina.

Você poderia tornar suas regras um pouco mais rígidas, adicionando IP e interfaces de origem e destino apropriados usando -s, -d, -i e -o. Veja "man iptables".

Obrigado a John WH Smith e Wurtel. Sugestões foram muito úteis.

    
por 06.02.2015 / 17:42
6

A maneira mais fácil de fazer isso é instalar netcat e inetd (o Debian tem isso em openbsd-inetd ).

Adicione uma linha a /etc/inetd.conf :

127.0.0.1:1234 stream tcp nowait root /bin/nc nc ex.ter.nal.ip 1234

Substitua o 1234 pelo número da porta real e ex.ter.nal.ip pelo endereço IP externo real. Você pode precisar acrescentar .1000 ou algum número maior à opção nowait se mais de 128 conexões por minuto precisarem ser feitas; isso é para evitar que conexões descontroladas carreguem seu sistema desnecessariamente.

Eu também tenho as opções -q 4 -w 10 as nc , pois isso ajuda na minha situação, mas talvez você não precise delas.

Recarregue inetd depois de modificar o arquivo inetd.conf .

Fazer isso desta maneira usa nc iniciado por inetd como um processo de retransmissão, que funciona muito bem.

    
por 02.02.2015 / 14:34