iptables 轉送/複製/鏡像本地產生的 UDP 流量

iptables 轉送/複製/鏡像本地產生的 UDP 流量

我正在 Raspberry Pi 上運行一個程序,該程序從感測器讀取數據並通過 UDP 將該數據發送到伺服器。為了調試和監控這些數據,我使用 Raspberry Pi 上的 iptables 將 UDP 數據重定向到我的 PC:

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 - 用於偵錯的 PC。

這效果很好。然而,資料只到達PC,而不再到達伺服器。

所以我嘗試使用以下方式將 UDP 資料複製並轉發到 PC 和伺服器:

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

但規則仍然被執行,我必須重新啟動樹莓派才能從頭開始。

那麼有兩個問題:

本地產生的資料如何複製和轉發?
規則如何有效清理?

到目前為止我發現的範例都適用於傳入/傳出流量,但不適用於本地產生的資料。

答案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

這很有效,但是它似乎不必要地複雜,因為我預計這應該可以透過單一規則實現。

也許有人知道如何簡化它。

相關內容