我的目的是通过以下方式对所有到达 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