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
обеспечивает.