对多个私有子网进行 NAT 时,正确的 iptables 规则是什么?

对多个私有子网进行 NAT 时,正确的 iptables 规则是什么?

我有一个 Centos 最低 6.5 作为路由器。eth0 连接到 Cisco 交换机中继端口,允许 VLAN 200-213。

我有几个 VLAN 接口,正如此链接所示:

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/s2-networkscripts-interfaces_802.1q-vlan-tagging.html

并具有 IPv4 转发功能,因此来自网络 200-213 的所有网络设备都可以使用此 Linux 机箱作为路由器相互通信。

问题是,我需要它们访问互联网,因此我添加了以下规则:

iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -j SNAT --to 1.1.1.56

1.1.1.56 是“外部”地址。这样可以正常工作,连接到内部网络的设备可以 ping 通互联网地址,但它们无法跨子网相互通信,因此 192.168.211.55 可以 ping 通 8.8.8.8,但无法与 192.168.213.5 通信。

一旦我执行 service iptables restart 来删除该规则,我就可以再次开始跨内部子网进行通信。

为多个私有子网设置 NAT 的正确方法是什么?或者设置转发的正确方法是什么?

答案1

您还需要在防火墙规则中指定要进行 NAT 的流量的目标接口。否则,它只会尝试对所有内容进行 NAT,而正如您所见,这是行不通的。您只应对发往外部世界的流量进行 NAT。

因此,假设您所有 Internet 流量的默认路由都通过 VLAN 200(因为您没有指定)传出,这是专用于外部流量的 VLAN。在这种情况下,您需要将其添加-o eth0.200到防火墙规则中。

iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o eth0.200 -j SNAT --to 1.1.1.56

相关内容