Периодическая отправка 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
обеспечивает.