首先配置参考的是https://docs.openstack.org/ocata/networking-guide/fwaas-v1-scenario.htmlhtml
原理性的东西就不在这里介绍了,网上有不少参考资料。简单的概括一下,openstack的fwaas是基于router namespace的iptables来实现的,配置、重启服务、添加FireWall 规则以后,若是没有新的iptables规则出现,那就会致使配置FireWall rules没法生效,我在实际测试过程当中就遇到了这个问题。研究了一下代码发现,问题的核心出在了这段代码上:python
/usr/lib/python2.7/site-packages/neutron_fwaas/services/firewall/drivers/linux/iptables_fwaas.pylinux
研究了一下,这段代码总以为很奇怪。通常来讲,ovs版本的route都会配置为DVR类型,因此按照这段代码的逻辑,只有route配置了外部网关,才会在controller节点出现相似snat-0411a7ef-7aa8-4584-ad40-6d1e7be9a309这样的namespace;只有虚机绑定了浮动ip,才会在compute节点出现相似fip-fd5962ff-2177-402e-bec6-6a307e890868这样的namespace。也就是这分布式路由的场景下,FireWall只能控制南北向的流量,没法控制东西向的流量(由于没有用到router_info.iptables_manager)。python2.7
因此若是想控制东西向流量,只能将“if not router_info.router.get('distributed'):”这行代码去掉,这样FireWall的rules才会下发到每一个节点的qrouter-xxxxxx的namespace中。分布式
以上,若有不妥之处请指正,谢谢!ide