
Estoy ejecutando un programa en una Raspberry Pi que lee datos de sensores y los envía a un servidor a través de UDP. Para depurar y monitorear estos datos, redirigí estos datos UDP a mi PC usando iptables en 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
Las direcciones IP utilizadas son
192.168.178.10 - Servidor
192.168.178.22 - PC utilizada para la depuración.
Esto funciona bien. Sin embargo, los datos sólo llegan a la PC pero ya no al servidor.
Así que intenté copiar y reenviar los datos UDP tanto a la PC como al servidor usando algo como esto:
sudo iptables -t mangle -A POSTROUTING -p udp -d 192.168.178.10 --dport 4000 -j TEE --gateway 192.168.178.22
He usado diferentes combinaciones de parámetros como mangle/nat, POSTROUTING/OUTPUT/PREROUTING, etc.
Hasta el momento no logré enviar los datos a ambos destinos. Como los datos se generan localmente, supuse que -A OUTPUT debería funcionar. Pero aparentemente me estoy perdiendo algo...
Además, puedo borrar las reglas de iptables usando
sudo iptables -F
sudo iptables -X
Pero la regla aún se ejecuta y tengo que reiniciar la Raspberry Pi para empezar desde cero.
Entonces hay dos preguntas:
¿Cómo funciona la duplicación y el reenvío de datos generados localmente?
¿Cómo se aclaran las reglas de manera efectiva?
Todos los ejemplos que he encontrado hasta ahora se aplican al tráfico entrante/saliente, pero no a los datos generados localmente.
Respuesta1
Ahora, por accidente, encontré una solución:
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
Esto funciona bien, sin embargo, parece innecesariamente complicado ya que esperaba que esto fuera posible con una sola regla.
Quizás alguien tenga una idea sobre cómo simplificar esto.