Como criar um proxy UDP usando iptables

4

Eu tenho um servidor executando o servidor UDP na porta 50000. Esse servidor recebe atualizações de clientes e envia de volta os clientes a cada 5 segundos para o soquete do qual eles estavam conectados.

Agora, desejo redirecionar todo o tráfego para e a partir desse servidor UDP por meio de outro servidor. Basicamente eu quero configurar um proxy transparente na frente deste servidor. O motivo é que eu quero ser capaz de controlar facilmente qual servidor lida com o tráfego UDP, sem a necessidade de alterar as configurações de DNS.

Primeiro, tentei usar n socat para criar este proxy:

socat UDP-LISTEN:50000,fork UDP:myserver:50000

Mas isso parece funcionar bem para o tráfego de entrada, mas o tráfego de volta do meu servidor para os clientes não alcança seu destino. Também parece que o socat bifurca outro processo para cada conexão, então eu posso acabar com muitos processos e processos mortos quando clientes desconectam / trocam IP.

Percebi que posso usar a funcionalidade NAT do iptables para isso, mas não parece funcionar para mim. A configuração que eu tentei é:

sudo iptables -t nat -A PREROUTING -p udp --dport 50000 -j DNAT --to-destination myserver:50000

Mas parece que não funciona - nem vejo as conexões no meu servidor. Não tenho certeza se é devido a configuração incorreta ou devido a alguns outros problemas.

Algumas perguntas:

  1. Eu preciso de alguma forma reiniciar o iptables depois de adicionar a configuração nat?
  2. Preciso permitir o tráfego para a porta de entrada ou ter a configuração NAT suficiente?

ATUALIZAÇÃO: O servidor que realmente lida com o tráfego está em uma máquina diferente daquela em que estou tentando configurar o iptables.

    
por arikfr 06.03.2012 / 08:42

1 resposta

4

Há alguns pontos que você não mencionou em sua descrição:

  1. Se você estiver encaminhando o tráfego recebido pela máquina iptables para outro. Você precisa ativar o encaminhamento de IP. Veja abaixo para detalhes.
  2. Além disso, você precisa permitir a passagem do tráfego encaminhado. Isso pode ser feito configurando a política padrão de FORWARD chain como ACCEPT ou permitindo o tráfego específico (ip / port).

Para ativar o encaminhamento de IP, descomente a linha a seguir em /etc/sysctl.conf :

net.ipv4.ip_forward=1

Em seguida, execute: sudo sysctl -p .

Adicionar regras usando o comando iptables as adicionará somente na memória (elas serão perdidas após a reinicialização). Você precisa salvá-los em um arquivo de texto usando iptables-save e restaurá-los quando necessário usando iptables-restore .

    
por 06.03.2012 / 09:06