Крошечный UDP-прокси, который может реплицировать трафик на одну или несколько конечных точек.
Нам нужен был способ взять один поток netflow и отправить его на несколько конечных точек. Поскольку это универсальный репликатор UDP, его можно использовать для любого трафика, такого как сетевой поток, системный журнал и т. д.
Вы могли бы использовать iptables, например Zapier, но нам нужно было что-то, что можно было бы легко развернуть в нашем кластере Kubernetes. Существует также ряд существующих UDP-прокси, но ни один из популярных не поддерживает репликацию. Существует также небольшое количество репликаторов, но все они представляют собой в основном неподдерживаемые/непроверенные игрушечные проекты с небольшой документацией.
./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
Приведенная выше команда:
0.0.0.0
(по умолчанию) 9500
192.0.2.1:9500
(использует listen-port
в качестве порта назначения, который не указан в конфигурации).198.51.100.5:9100
Сервер начнет прослушивать 0.0.0.0:9500
, любой полученный пакет будет реплицирован и отправлен как на 192.0.2.1:9500
, так и на 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)
Все параметры конфигурации могут быть переданы в качестве аргументов, как показано выше, или как переменные среды (как показано в примере выше) – где переменные среды имеют змеиный регистр с заглавными буквами, например LISTEN_IP
2019 Том Седдон
Массачусетский технологический институт