Um pequeno proxy UDP que pode replicar o tráfego para um ou mais endpoints.
Precisávamos de uma maneira de pegar um único fluxo de rede e enviá-lo para vários endpoints. Como este é um replicador UDP genérico, ele pode ser usado para qualquer tráfego, como netflow, syslog etc.
Você poderia usar iptables, como Zapier, mas queríamos algo que pudéssemos implantar facilmente em nosso cluster Kubernetes. Existem também vários proxies UDP existentes, mas nenhum dos mais populares oferece suporte à replicação. Há também um pequeno número de replicadores, mas todos parecem ser, em sua maioria, projetos de brinquedos não mantidos/não testados e com pouca documentação.
./replicator --listen-port=9500 --forward=192.0.2.1 --forward=198.51.100.5:9100
time="2019-09-23T14:29:50+01:00" level=info msg="Server started" ip=0.0.0.0 port=9500
time="2019-09-23T14:29:50+01:00" level=info msg="Forwarding target configured" addr="192.0.2.1:9500" num=1 total=2
time="2019-09-23T14:29:50+01:00" level=info msg="Forwarding target configured" addr="198.51.100.5:9100" num=2 total=2
O comando acima irá:
0.0.0.0
(o padrão) 9500
192.0.2.1:9500
(usa listen-port
para a porta de destino, conforme não especificado na configuração)198.51.100.5:9100
O servidor começará a escutar em 0.0.0.0:9500
, qualquer pacote recebido será replicado e enviado para 192.0.2.1:9500
e 198.51.100.5:9100
docker run -e FORWARDS=$'192.0.2.1n198.51.100.5:9100' thomseddon/udp-replicator:1
version: '3'
services:
udp-replicator:
run: thomseddon/udp-replicator:1
environment:
DEBUG: "true"
FORWARD: "192.0.2.1n198.51.100.5:9100"
usage: replicator [<flags>]
Flags:
--help Show context-sensitive help (also try --help-long and --help-man).
--debug Enable debug mode
--listen-ip=0.0.0.0 IP to listen in
--listen-port=9000 Port to listen on
--body-size=4096 Size of body to read
--forward=ip:port ... ip:port to forward traffic to (port defaults to listen-port)
Todos os parâmetros de configuração podem ser passados como argumentos, conforme mostrado acima, ou como variáveis de ambiente (conforme mostrado no uso acima) - onde as variáveis de ambiente são maiúsculas, por exemplo, LISTEN_IP
2019 Thom Seddon
MIT