我在 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 规则之前使用 RETURN。
因此,来自 10.10.20.32/27 的任何数据包都会被发送到 NETMAP_src101020 链中。如果数据包的目的地是 10.0.0.0/8,那么我们从该链返回;如果数据包的目的地是 128.128.196.0/24,则相同。只有这样它才能到达实际的 NETMAP 规则。
希望这有足够的意义;我认为通过向您展示比一些冗长的解释更容易解释。