
Estou executando um programa em um Raspberry Pi que lê dados de sensores e os envia para um servidor via UDP. Para depurar e monitorar esses dados redirecionei esses dados UDP para meu PC usando iptables no 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
Os endereços IP usados são
192.168.178.10 - Servidor
192.168.178.22 - PC usado para depuração.
Isso funciona bem. No entanto, os dados só chegam ao PC, mas não ao servidor.
Então tentei copiar e encaminhar os dados UDP para o PC e para o servidor usando algo assim:
sudo iptables -t mangle -A POSTROUTING -p udp -d 192.168.178.10 --dport 4000 -j TEE --gateway 192.168.178.22
Usei diferentes combinações de parâmetros como mangle/nat, POSTROUTING/OUTPUT/PREROUTING etc.
Até o momento não consegui enviar os dados para os dois destinos. Como os dados são gerados localmente, presumi que -A OUTPUT deveria funcionar. Mas aparentemente estou faltando alguma coisa ...
Além disso, posso limpar as regras do iptables usando
sudo iptables -F
sudo iptables -X
Mas a regra ainda é executada e tenho que reiniciar o Raspberry Pi para começar do zero.
Portanto, há duas perguntas:
Como funciona a duplicação e o encaminhamento de dados gerados localmente?
Como as regras são limpas de forma eficaz?
Todos os exemplos que encontrei até agora se aplicam ao tráfego de entrada/saída, mas não aos dados gerados localmente.
Responder1
Agora - por acidente - encontrei uma solução:
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
Isso funciona bem, porém parece ser desnecessariamente complicado, pois eu esperava que isso fosse possível com uma única regra.
Talvez alguém tenha uma ideia de como simplificar isso.