Transparentemente encaminha a porta local para o servidor remoto

1

Eu tenho o daemon StatsD em execução em um servidor remoto ( x.x.x.x ) em 8125 . Gostaria de encaminhar 127.0.0.1:8125 para x.x.x.x:8125 .

Eu já tentei executar o seguinte no localhost

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p udp --dport 8125 -j DNAT --to x.x.x.x:8125
iptables -t nat -A OUTPUT -p udp --dport 8125 -j DNAT --to-destination x.x.x.x:8125
iptables -t nat -A POSTROUTING -d x.x.x.x -j MASQUERADE

Mas não está encaminhando corretamente.

echo "test.test.test:1|c" | nc -w 1 -u localhost 8125

Falha com erro     nc: erro de gravação: conexão recusada

echo "test.test.test:1|c" | nc -w 1 -u 127.0.0.1 8125

Falha sem nenhum erro

echo "test.test.test:1|c" | nc -w 1 -u x.x.x.x 8125

Funciona corretamente

Além disso, esse encaminhamento de porta causará algum problema de segurança?

    
por Joyce Babu 28.11.2014 / 14:19

1 resposta

2

Isso não é possível.

Pacotes gerados por processos locais não estão envolvidos no plano de encaminhamento.

Consequentemente, você não poderá usar PREROUTING e FORWARD cadeias nas tabelas que os pacotes gerados localmente passarão, mas apenas OUTPUT (em raw/mangle/nat/filter tabelas) e POSTROUTING (em mangle/nat tables) chains enquanto a decisão de roteamento já foi feita e você não pode alterá-la .

De fato, com sua configuração atual do iptables, suas regras farão o seguinte, considerando o seu caso de uso:

  • Primeira regra: não alcançada.
  • Segunda regra: DNAT gerou localmente pacotes para x.x.x.x na interface de loopback.
  • Terceira regra: pacotes Masquerade passando pela interface de loopback com o endereço IP da sua interface de loopback.

Portanto, o resultado é: os pacotes locais tentarão alcançar x.x.x.x:8125 em sua interface de loopback.

Este diagrama netfilter pode ajudá-lo a entender a localização dos pacotes gerados localmente no fluxo global. / p>     

por 30.11.2014 / 14:08