Proxy UDP com pacotes clonados

2

Tendo mensagens UDP enviadas periodicamente do IP público dinâmico para o IP público X: 20000.

É necessário um proxy que ouça no IP X: 20000 e, em seguida, envie pacotes duplicados / clonados para X: 20001 e uma máquina diferente, localizada no IP Y: 20000. Agora, quando o aplicativo escutando X: 20001, responde a uma mensagem para X: 20001, eu quero que essa mensagem seja encaminhada de volta para o PC A, de X: 20000.

Como eu poderia conseguir essa funcionalidade no Linux? (tentando evitar o script personalizado)

Tentando ter um aplicativo em um servidor sem cabeçalho respondendo a mensagens e um computador com monitor para depurar mensagens quando necessário em tempo real.

    
por jacktrades 15.10.2014 / 22:45

1 resposta

3

Acho que você pode conseguir isso com iptables e a ferramenta samplicator se você estiver usando um kernel novo o suficiente para suportar a tabela raw .

Primeiro, por que socat não funciona: Providenciar um fluxo de pacotes com socat é bastante fácil. Você só faria isso:

socat - udp4-listen:20000,fork | tee >(socat - udp-sendto:X.X.X.X:20001) >(socat - udp-sendto:Y.Y.Y.Y:20000)

Isso duplica o tráfego para X.X.X.X:20001 e Y.Y.Y.Y:20000 .

Isso não ajuda você, porque o serviço que atende no X.X.X.X: 20001 vai "ver" 127.0.0.1 como o endereço de origem. É aí que samplicator pode ajudar. Quoth a página de código samplicator Google:

This simple program listens for UDP datagrams on a network port, and sends copies of these datagrams on to a set of destinations. ... Another option is that it can "spoof" the IP source address, so that the copies appear to come from the original source, rather than the relay.

Parece exatamente o que precisamos re: o endereço de origem. (Dito isto, eu não testei realmente esta ferramenta. A caixa que estou testando não tem compiladores instalados e eu não vou criar algo agora apenas para falha do servidor. > smile <)

A última coisa que você precisa é cuidar do tráfego proveniente de X.X.X.X:20001 , parecendo vir de X.X.X.X:20000 .

Em seguida, para NAT, as respostas de X.X.X.X:20001 a "vêm de" X.X.X.X:20000 :

iptables -t raw -A POSTROUTING -s X.X.X.X -p udp --sport 20001 -j NOTRACK
iptables -t nat -A POSTROUTING -s X.X.X.X -p udp --sport 20001 -j SNAT --to-source :20000

Cuidado: eu não testei tudo isso juntos. Eu zombei dele com socat e funcionou bem menos o endereço de origem "spoofing" que samplicator fornece.

    
por 15.10.2014 / 23:37