我在iptables中有一个静态的1:1的NAT设置,这个设置排除了一个更大的子网(这样NETMAP主机仍然可以到达非静态NAT的其他本地主机),像这样:
*nat -A PREROUTING --destination 128.128.196.32/27 -j NETMAP --to 10.10.20.32/27 -A POSTROUTING --source 10.10.20.32/27 ! -d 10.0.0.0/8 -j NETMAP --to 128.128.196.32/27
我也想排除面向公众的IP地址,这样静态NAT主机仍然可以达到机器上另一个静态NAT主机的公有IP地址。 但是多个否定的目的地似乎不被支持。 这会引发一个错误:
*nat -A PREROUTING --destination 128.128.196.32/27 -j NETMAP --to 10.10.20.32/27 -A POSTROUTING --source 10.10.20.32/27 ! -d 10.0.0.0/8 ! -d 128.128.196.0/24 -j NETMAP --to 128.128.196.32/27
我如何设置iptables允许静态NAT NETMAPed主机到达iptables机器上的其他公共地址?
您需要使用额外的链,并在NETMAP规则之前返回。
*nat -N NETMAP_src101020 -A NETMAP_src101020 -d 10.0.0.0/8 -j RETURN -A NETMAP_src101020 -d 128.128.196.0/24 -j RETURN -A NETMAP_src101020 -j NETMAP --to 128.128.196.32/27 -A PREROUTING --source 10.10.20.32/27 -j NETMAP_src101020 -A PREROUTING --destination 128.128.196.32/27 -j NETMAP --to 10.10.20.32/27
所以从10.10.20.32/27开始的任何数据包都被发送到NETMAP_src101020链中。 如果数据包的目的地址是10.0.0.0/8,那么我们从那个链路返回; 如果数据包的目的地是128.128.196.0/24,则一样。 只有这样才能达到实际的NETMAP规则。
希望这有足够的道理。 我觉得通过展示你比解释一些冗长的解释更容易解释。