Ein winziger UDP-Proxy, der den Datenverkehr an einen oder mehrere Endpunkte replizieren kann.
Wir brauchten eine Möglichkeit, einen einzelnen Netflow-Stream zu nehmen und ihn an mehrere Endpunkte zu senden. Da es sich um einen generischen UDP-Replikator handelt, kann er für jeden Datenverkehr wie Netflow, Syslog usw. verwendet werden.
Sie könnten iptables wie Zapier verwenden, aber wir wollten etwas, das wir einfach in unserem Kubernetes-Cluster bereitstellen können. Es gibt auch eine Reihe bestehender UDP-Proxys, aber keiner der beliebtesten unterstützt die Replikation. Es gibt auch eine kleine Anzahl von Replikatoren, aber diese scheinen allesamt weitgehend ungepflegte/ungetestete Spielzeugprojekte mit wenig Dokumentation zu sein.
./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
Der obige Befehl wird:
9500
0.0.0.0
(Standard) überwacht192.0.2.1:9500
hinzu (verwendet listen-port
als Ziel-Port, da in der Konfiguration nicht angegeben).198.51.100.5:9100
hinzu Der Server beginnt mit der Überwachung von 0.0.0.0:9500
. Jedes empfangene Paket wird repliziert und sowohl an 192.0.2.1:9500
als auch an 198.51.100.5:9100
gesendet
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)
Alle Konfigurationsparameter können wie oben gezeigt als Argumente oder als Umgebungsvariablen (wie oben gezeigt) übergeben werden – wobei Umgebungsvariablen in Großbuchstaben geschrieben werden, z. B. LISTEN_IP
2019 Thom Seddon
MIT