对一个沙箱环境而言,其中最重要的一点就是网络的隔离,OpenStack网络支持Flat、VLAN、VXLAN等模式,配合路由器和防火墙可轻松虚拟一个简单的企业网络。
不同网络区域首先得进行网络划分,主要包含三个区域:
这里使用172.16.x.0/24作为服务器区的IP段,10.0.x.0/24为工作区各部门的IP段,网络拓扑图如下:

注:这里网络、实例、路由器等名称统一使用小写。
使用管理员登录Horizon,【管理员】-【网络】,这里会看见一个为public的网络,其IP段为172.24.4.225/28(有强迫的可以删掉),创建一个名为network_public的外部网络和一个IP地址池为192.168.20.100-200的子网。
有时外部网络和子网有在Web界面会创建失败,使用SSH登录到服务器使用命令创建:

因为只有一张网卡,为了减少去配IP的麻烦,这里将浮动IP地址池(192.168.20.100-200)配到与服务器IP同一个段。
【项目】-【网络】-【网络】,点击【创建网络】,会有三个选项:
这里服务器区和办公区的网段都使用DHCP进行IP分配,分别创建以下网络:

【项目】-【网络】-【路由器】,点击【创建路由器】,创建2个路由router_internal和router_isp,其中router_isp选择外部网络network_public:

router_isp
点击router_isp进入该路由器,切换到【接口】项,分别添加2个接口172.16.0.1和192.168.0.5:

再切换到【静态路由表】项,分别添加办公区和内网服务器区的静态路由:

router_internal
点击router_internal进入该路由器,切换到【接口】项,分别添加以下连接接口:

再切换到【静态路由表】项,添加一条缺省路由:

现在网络已经配置完,回到【项目】-【计算】-【实例】,点击右上角【启动实例】,按照拓朴选择对应网络分别创建以下实例:

这里全部使用CentOS7的映像,创建完后,【项目】-【网络】-【网络拓朴】大概是这样:

这时你会发现,所有实例之间都是能ping得通的,并没有想要之前设定的结果,这时就需要防火墙。
FwaaS(FireWall-as-a-Service),即防火墙服务,防火墙可以在路由器上做策略。
通过yum安装FwaaS:
# yum -y install openstack-neutron-fwaas加载防火墙
在service_plugins后面加上firewall:

添加所需驱动程序:

Horizonz中启用防火墙,修改enable_firewall为True:

将修改更新到数据库:

重启Neutron服务:
# systemctl restart neutron-server重新登录Horizonz,在【项目】-【网络】下的菜单会添加【防火墙】这一项,切换到【防火墙规则】添加以下规则:

切换到【防火墙策略】,添加一条策略,并加入刚才配置的2条规则:

切换到【防火墙】,添加一条记录,选择刚才创建的策略,并关联router_internal路由器:

在外网服务器区使用server_www(172.16.0.5)分别ping互联网、办公区、内网服务器区:

在办公区使用it_pc1(10.0.10.3)分别ping互联网、外网服务器区、内网服务器区、人力资源部:

在内网服务器区使用server_db(172.16.10.4)分别ping互联网、外网服务器区、办公区:

网络隔离效果已经达到了设定要求。
在www_server(172.16.0.5)上启动httpd服务,监听80端口,现在要将该服务器的HTTP服务映射到“互联网”(192.168.20.100-200)。
【项目】-【计算】-【实例】,选择实例【操作】下拉菜单,选择管理浮动IP:

这时在实例列表【IP 地址】列会多出一个浮动IP192.168.20.101:

这时从外部还不能访问该服务器,需要在安全组添加入口规则放行,【项目】-【计算】-【访问 & 安全】新添加一条记录sg_public,然后添加一条规则:

现在访问http://192.168.20.101:

至此,一个简单的虚拟网络环境已经建立起来,其中还存在很多安全上的问题,比如通过实例可以访问192.168.20.7上的服务,一个合适的渗透测试环境还需要逐渐去完善。