UDP Proxy с клонированными пакетами

Периодически отправлять сообщения UDP с динамического общедоступного IP-адреса на общедоступный IP-адрес X:20000.

Нужен прокси-сервер, который прослушивает IP X: 20000, затем перенаправляет дублированные / клонированные пакеты в X:20001 и на другой компьютер, расположенный в IP Y:20000. Теперь, когда приложение, прослушивающее X:20001, отвечает на сообщение X:20001, я хочу, чтобы это сообщение было переслано обратно на ПК A с X:20000.

Как я могу достичь этой функциональности в Linux? (пытаясь избежать пользовательского сценария)


Попытка иметь одно приложение на автономном сервере, отвечающее на сообщения, и один компьютер с монитором для отладки сообщений при необходимости в режиме реального времени.

1 ответ

Решение

Я думаю, что вы могли бы осуществить это с iptables и samplicatorинструмент, если вы используете достаточно новое ядро ​​для поддержкиrawТаблица.

Во-первых, почемуsocatне будет работать: Teeing потока пакетов сsocatэто довольно легко. Вы бы просто сделали это:

socat - udp4-listen:20000,fork | tee >(socat - udp-sendto:X.X.X.X:20001) >(socat - udp-sendto:Y.Y.Y.Y:20000)

Это дублирует трафик наX.X.X.X:20001а такжеY.Y.Y.Y:20000,

Однако это не поможет, потому что служба, прослушивающая XXXX:20001, будет "видеть" 127.0.0.1 в качестве адреса источника. Это гдеsamplicatorможет помочь. Квот samplicator Кодовая страница Google:

Эта простая программа прослушивает UDP-дейтаграммы на сетевом порту и отправляет копии этих дейтаграмм в набор адресатов.... Другой вариант заключается в том, что он может "подделать" IP-адрес источника, так что копии выглядят поступающими из исходного источника, а не с ретранслятора.

Это звучит как то, что нам нужно: адрес источника. (Сказав это, я на самом деле не тестировал этот инструмент. На коробке, на которой я тестирую, не установлены компиляторы, и я не собираюсь сейчас что-то раскручивать только из-за сбоя сервера.> Smile<)

Последнее, что вам нужно, это позаботиться о трафике X.X.X.X:20001создавая впечатление, что это происходит из X.X.X.X:20000,

Затем на NAT ответы от X.X.X.X:20001 приехать из" X.X.X.X:20000:

iptables -t raw -A POSTROUTING -s X.X.X.X -p udp --sport 20001 -j NOTRACK
iptables -t nat -A POSTROUTING -s X.X.X.X -p udp --sport 20001 -j SNAT --to-source :20000

Осторожно: я не проверял все это вместе. Я издевался socat и это работало нормально минус адрес источника "подделка", что samplicator обеспечивает.

Другие вопросы по тегам