我有一个 Centos 最低 6.5 作为路由器。eth0 连接到 Cisco 交换机中继端口,允许 VLAN 200-213。
我有几个 VLAN 接口,正如此链接所示:
并具有 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