Linux-Networking
如何在同一個 Linux 上為同一個數據包結合出站 NAT 和埠轉發?
我想用 Linux 替換舊的 ASA 盒子。我需要為同一個數據包組合出站 NAT 和埠轉發 - 別名兩次 NAT(如此處所述)。我必須在同一個數據包中一起更改:
- 目標 IP 到 172.16.0.200:5252/udp 和
- 源 IP 依賴於源數據包中的目標 IP。
我需要重複這個翻譯,以獲得更多原始目標 -> 翻譯源/翻譯目標的組合。
例子:
+---------------------------+ | | IoT clients | eth0 eth1 | IoT portal ORIGINAL PACKET | 192.168.0.1 172.16.0.1 | TRANSLATED PACKET src:* dst:192.168.0.5+-> 192.168.0.5 |-->src:10.254.0.5 dst:172.16.0.200:5252/udp src:* dst:192.168.0.6+-> 192.168.0.6 |-->src:10.254.0.6 dst:172.16.0.200:5252/udp | | +---------------------------+
我無法更改 IoT 門戶或 IP 地址架構 :( 我必須替換 1:1。
我找不到解決此問題的方法。
您應該為每個這樣的翻譯添加兩條規則:第一條規則用於埠轉發 (
DNAT
),第二條規則用於重寫源地址 (SNAT
)iptables -t nat -A PREROUTING -i eth0 --dst 192.168.0.5 -p udp --dport <N> -j DNAT --to 172.16.0.200:5252 iptables -t nat -A PREROUTING -i eth0 --dst 192.168.0.6 -p udp --dport <N> -j DNAT --to 172.16.0.200:5252 iptables -t nat -A POSTROUTING -o eth1 -m conntrack --ctstate DNAT --ctorigdst 192.168.0.5 -j SNAT --to 10.254.0.5 iptables -t nat -A POSTROUTING -o eth1 -m conntrack --ctstate DNAT --ctorigdst 192.168.0.6 -j SNAT --to 10.254.0.6
而是直接執行這些命令,使用 iptables-save 將完整的規則集寫入文件,然後編輯文件,並使用 iptables-apply 工具載入新規則集。