整个 /24 子网的 Linux iptables NAT

Dje*_*jee 10 linux nat iptables

我的目的是通过这种方式对所有端口和协议上到达 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
Run Code Online (Sandbox Code Playgroud)

但是我找不到一种方法来翻译所有 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
Run Code Online (Sandbox Code Playgroud)

这会导致随机主机转换。用于负载平衡。但是如何获得简单的一对一翻译呢?

谢谢你。

A.B*_*A.B 17

来自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
Run Code Online (Sandbox Code Playgroud)

如果您还希望正确地看到最初从“42”网络开始的连接,请完成第二条规则:

iptables -t nat -A POSTROUTING -s 192.168.42.0/24 -o eth0 -j NETMAP --to 192.168.55.0/24
Run Code Online (Sandbox Code Playgroud)