整个 /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

相关内容