Linux-Networking

如何在同一個 Linux 上為同一個數據包結合出站 NAT 和埠轉發?

  • November 15, 2020

我想用 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 工具載入新規則集。

引用自:https://serverfault.com/questions/1042643