ZStack云平台上的私有网络创建的云主机不能上外网,如果底层物理机的管理网口可以访问外网,如何实现私有网络的云主机通过物理机上的iptables SNAT规则来访问互联网?
云平台环境:ZStack 企业版3.8.5版本
主存储环境:本地存储
镜像服务器环境:镜像仓库
网络环境:扁平网络(私有网络)
云主机操作系统:Centos7.6
计算节点网卡情况:至少两块网卡
从下图中可以看出,ZStack云平台上的云主机数据包流向宿主机上的eth0物理网卡,在物理机上通过iptables规则,将172.21.20.1/24(私有网络)网段的数据包源地址转换成10.0.39.217(管理IP),然后经过管理汇聚交换机和核心路由器,最终实现访问互联网。
(图1 数据流向原理图)
1、环境检查
云主机所在的宿主机需要有两张物理网卡,如下图:
网卡eth0 ip地址为172.21.20.3(私有网络IP)
网卡eth1 ip地址为10.0.39.217(管理IP)
(图2 物理机网卡信息)
检查云平台的二层网络,网卡名称是否为eth0,vlan类型是否为novlan(云平台上需要设置novlan类型的二层网络,云主机上行不带vlan标签)
(图3 云平台上二层网络信息)
检查三层网络,网络段设置是否正确(IP地址段,子网掩码和网关)
(图4 云平台上三层网络信息)
创建测试云主机,三层网络选择172.21.20.1/24的三层网络,然后进入云主机操作内部ping 114.114.114.114测试云主机能否访问外网。
(图5 未做snat前虚机不能访问外网)
2、配置SNAT规则
在物理机上,更改配置文件,/etc/sysctl.conf 中改为 net.ipv4.ip_forward = 1
执行sysctl -p 使其生效。
在物理机上,执行
iptables -t nat -A POSTROUTING -s 172.21.20.1/24 -j SNAT --to 10.0.39.217(物理机的管理IP)
(图6 开启数据转发功能并做数据包snat转换)
查看snat规则是否写入正确
iptables -t nat -nL
(图7 查看iptables规则是否写入正确)
3、验证能否访问外网
刚刚在云主机内测试ping 114.114.114.114不通,再次测试能否访问外网
(图8 做snat后虚机能访问外网)