iptables zum Weiterleiten/Duplizieren/Spiegeln von lokal generiertem UDP-Verkehr

iptables zum Weiterleiten/Duplizieren/Spiegeln von lokal generiertem UDP-Verkehr

Ich führe ein Programm auf einem Raspberry Pi aus, das Daten von Sensoren liest und diese Daten über UDP an einen Server sendet. Um diese Daten zu debuggen und zu überwachen, habe ich diese UDP-Daten mithilfe von iptables auf dem Raspberry Pi auf meinen PC umgeleitet:

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

Die verwendeten IP-Adressen sind
192.168.178.10 – Server
192.168.178.22 – PC zum Debuggen.

Das funktioniert gut. Allerdings gelangen die Daten nur noch auf den PC und nicht mehr auf den Server.

Ich habe also versucht, die UDP-Daten zu kopieren und sowohl an den PC als auch an den Server weiterzuleiten, und zwar mit etwas wie Folgendem:

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

Ich habe verschiedene Parameterkombinationen wie Mangle/Nat, POSTROUTING/OUTPUT/PREROUTING usw. verwendet.

Bisher habe ich es nicht geschafft, die Daten an beide Ziele zu senden. Da die Daten lokal generiert werden, ging ich davon aus, dass -A OUTPUT funktionieren sollte. Aber anscheinend übersehe ich etwas...

Außerdem kann ich die iptables-Regeln löschen mit

sudo iptables -F
sudo iptables -X

Aber die Regel wird immer noch ausgeführt und ich muss den Raspberry Pi neu starten, um von vorne zu beginnen.

Es gibt also zwei Fragen:

Wie erfolgt die Duplizierung und Weiterleitung lokal erzeugter Daten?
Wie werden Regeln effektiv freigegeben?

Die Beispiele, die ich bisher gefunden habe, beziehen sich alle auf eingehenden/ausgehenden Datenverkehr, jedoch nicht auf lokal generierte Daten.

Antwort1

Nun bin ich - durch Zufall - auf eine Lösung gestoßen:

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

Das funktioniert gut, scheint jedoch unnötig kompliziert zu sein, da ich erwartet hatte, dass dies mit einer einzigen Regel möglich sein sollte.

Vielleicht hat jemand eine Idee, wie man das vereinfachen kann.

verwandte Informationen