Мне нужно перенаправить входящий 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 -