首先配置參考的是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