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

Дублирование UDP-трафика на два порта на localhost

Мне нужно перенаправить входящий UDP-трафик на две службы, прослушивающие разные UDP-порты на localhost. Я попытался:

iptables -t nat -I PREROUTING -p udp -d 10.11.12.13 --dport 22 -j DNAT --to-destination 127.0.0.1:1234 --to-destination 127.0.0.1:4321

Но ошибка была:

iptables v1.6.0: DNAT: несколько --to-destination не поддерживается

То же самое и с --to-ports вариант:

iptables v1.6.0: REDIRECT: параметр "--to-ports" можно использовать только один раз

Потом попробовал iptables TEE. Но в --gateway вариант подразумевает только IP-адрес, поэтому я даже не могу:

iptables -t mangle -I PREROUTING -p udp -d 10.11.12.13 --dport 22 -j TEE --gw 127.0.0.1:1234

Есть ли способ «дублировать» UDP-трафик с помощью iptables или каким-либо другим удобным способом в Linux?

P.S. Вопрос касается однонаправленного UDP-трафика (например, входящего трафика syslog). Очевидно, что тут к TCP тут никакого отношения не имеет. мошенничествосхема, потому что TCP имеет соединение и невозможно установить соединение с одного порта на два других порта. Но похоже, что это можно сделать с помощью UDP (потому что нет необходимости устанавливать соединение).


Несколько постов, которые прояснили ситуацию, но не помогли: 1, 2 и 3.

Единственное, что я мог придумать, - это захватить трафик с помощью некоторого сниффера пакетов и затем повторно отправить его в другое место назначения.

Проверьте следующие ссылки:

https://linux.die.net/man/1/tcpreplay-edit

https://linux.die.net/man/1/tcpreplay

http://tcpreplay.synfin.net/wiki/tcprewrite

В моем понимании это могло бы выглядеть примерно так: tcpdump -i eth1 -w - 'udp and port 80' | tcprewrite --portmap=80:8080 | tcpreplay -i eth1 - ИЛИ что-то вроде этого на основе статьи "tcpreplay-edit": tcpdump -i eth1 -w - 'udp and port 80' | tcpreplay --portmap=80:8080 -i eth1 -