整個 /24 子網路的 Linux iptables NAT

整個 /24 子網路的 Linux iptables NAT

我的目的是以這種方式對所有連接埠和協定上到達eth0 的所有IP 位址進行NAT(轉換): 192.168.55.x -> 192.168.42.x (我啟用了ip 轉發,並且192.168.42.0/ 24 子網路位於eth1 上)。我可以為每對線路的一個主機執行此操作,例如 x=20:

iptables -t nat -A PREROUTING -i eth0 -d 192.168.55.20 -j DNAT --to 192.168.42.20
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.42.20 -j SNAT --to 192.168.55.20

但我無法找到一種方法來翻譯所有 253 個可能的主機。我試過這個:

iptables -t nat -A PREROUTING -i eth0 -d 192.168.55.0/24 -j DNAT --to 192.168.42.0-192.168.42.255
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.42.20/24 -j SNAT --to 192.168.55.0-192-168.55.255

這會導致隨機主機翻譯。對於負載平衡很有用。但如何獲得簡單的一對一翻譯呢?

謝謝。

答案1

man iptables-extensions

NETMAP
此目標可讓您將整個位址網路靜態對應到另一個位址網路。它只能從 nat 表中的規則中使用。

因此只需要一條規則:

iptables -t nat -A PREROUTING -d 192.168.55.0/24 -i eth0 -j NETMAP --to 192.168.42.0/24

如果您也希望正確地看到最初從「42」網路啟動的連接,請完成第二個規則:

iptables -t nat -A POSTROUTING -s 192.168.42.0/24 -o eth0 -j NETMAP --to 192.168.55.0/24

相關內容