iptables для пересылки/дублирования/зеркалирования локально сгенерированного UDP-трафика

iptables для пересылки/дублирования/зеркалирования локально сгенерированного UDP-трафика

Я запускаю программу на Raspberry Pi, которая считывает данные с датчиков и отправляет их на сервер через UDP. Для отладки и мониторинга этих данных я перенаправил эти UDP-данные на свой ПК с помощью iptables на Raspberry Pi:

sudo iptables -t nat -A OUTPUT -p udp -d 192.168.178.10 --dport 4000 -j DNAT --to-destination 192.168.178.22:4000

Используемые IP-адреса:
192.168.178.10 - сервер,
192.168.178.22 - ПК, используемый для отладки.

Это работает хорошо. Однако данные попадают только на ПК, но не на сервер.

Поэтому я попытался скопировать и переслать данные UDP как на ПК, так и на сервер, используя что-то вроде этого:

sudo iptables -t mangle -A POSTROUTING -p udp -d 192.168.178.10 --dport 4000 -j TEE --gateway 192.168.178.22

Я использовал различные комбинации параметров, такие как mangle/nat, POSTROUTING/OUTPUT/PREROUTING и т. д.

Пока мне не удалось отправить данные в оба пункта назначения. Поскольку данные генерируются локально, я предположил, что -A OUTPUT должен работать. Но, видимо, я что-то упускаю...

Также я могу очистить правила iptables с помощью

sudo iptables -F
sudo iptables -X

Но правило все равно выполняется, и мне приходится перезагружать Raspberry Pi, чтобы начать с нуля.

Итак, есть два вопроса:

Как работает дублирование и пересылка локально сгенерированных данных?
Как эффективно очищаются правила?

Все найденные мной примеры применимы к входящему/исходящему трафику, но не к локально сгенерированным данным.

решение1

Теперь — случайно — я нашел решение:

sudo sysctl -w net.ipv4.ip_forward=1

sudo iptables -t nat -A OUTPUT -p udp -d 192.168.178.10 --dport 4000 -j DNAT --to-destination 192.168.178.22:4000

sudo iptables -t mangle -A POSTROUTING -p udp -d 192.168.178.22 --dport 4000 -j TEE --gateway 192.168.178.10

Это работает хорошо, однако кажется излишне сложным, поскольку я ожидал, что это можно сделать с помощью одного правила.

Может быть, у кого-то есть идеи, как это упростить.

Связанный контент