Un petit proxy UDP capable de répliquer le trafic vers un ou plusieurs points de terminaison.
Nous avions besoin d'un moyen de prendre un seul flux Netflow et de l'envoyer à plusieurs points de terminaison. Comme il s'agit d'un réplicateur UDP générique, il peut être utilisé pour n'importe quel trafic tel que netflow, syslog, etc.
Vous pouvez utiliser iptables, comme Zapier, mais nous voulions quelque chose que nous puissions facilement déployer dans notre cluster Kubernetes. Il existe également un certain nombre de proxys UDP existants, mais aucun des plus populaires ne prend en charge la réplication. Il existe également un petit nombre de réplicateurs, mais ceux-ci semblent tous être pour la plupart des projets de jouets non entretenus/non testés avec peu de documentation.
./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
La commande ci-dessus :
0.0.0.0
(par défaut) 9500
192.0.2.1:9500
(utilise listen-port
pour le port de destination comme non spécifié dans la configuration)198.51.100.5:9100
Le serveur commencera à écouter sur 0.0.0.0:9500
, tout paquet qu'il recevra sera répliqué et envoyé à la fois à 192.0.2.1:9500
et 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)
Tous les paramètres de configuration peuvent être transmis comme arguments comme indiqué ci-dessus, ou comme variables d'environnement (comme indiqué dans l'utilisation ci-dessus) - où les variables d'environnement sont en majuscules, par exemple LISTEN_IP
2019 Thomas Seddon
MIT