Un pequeño proxy UDP que puede replicar el tráfico a uno o más puntos finales.
Necesitábamos una forma de tomar un único flujo de red y enviarlo a múltiples puntos finales. Como se trata de un replicador UDP genérico, se puede utilizar para cualquier tráfico, como netflow, syslog, etc.
Podrías usar iptables, como Zapier, pero queríamos algo que pudiéramos implementar fácilmente en nuestro clúster de Kubernetes. También existen varios servidores proxy UDP, pero ninguno de los más populares admite la replicación. También hay una pequeña cantidad de replicadores, pero todos parecen ser en su mayoría proyectos de juguetes sin mantenimiento o no probados con poca documentación.
./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
El comando anterior:
9500
0.0.0.0
(el predeterminado)192.0.2.1:9500
(usa listen-port
para el puerto de destino, ya que no se especifica en la configuración)198.51.100.5:9100
El servidor comenzará a escuchar en 0.0.0.0:9500
, cualquier paquete que reciba será replicado y enviado tanto a 192.0.2.1:9500
como 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 los parámetros de configuración se pueden pasar como argumentos como se muestra arriba, o como variables de entorno (como se muestra en el uso anterior), donde las variables de entorno están en mayúsculas, por ejemplo, LISTEN_IP
2019 Thom Seddon
MIT