Назад | Перейти на главную страницу

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

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

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

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


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

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

Во-первых, почему socat не будет работать: соединение потока пакетов с 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.

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

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

Похоже, это именно то, что нам нужно: адрес источника. (Сказав это, я на самом деле не тестировал этот инструмент. В коробке, на которой я тестирую, не установлены компиляторы, и я не собираюсь сейчас что-то раскручивать только для Server Fault.> 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 обеспечивает.