在OpenStack中繞過或停用security group (iptables)
眼下。OpenStack中默認採用了security group的方式。用系統的iptables來過濾進入vm的流量。這個本意是為了安全,可是往往給調試和開發帶來一些困擾。
因此,暫時性的禁用它能夠排除由於iptables規則錯誤問題帶來的網絡不通等情況。
在H版本號中,能夠通過改動neutron plugin.ini中的firewall配置來禁用security group。
但在I版本號中。類似的操作僅僅會讓vm出來的流量都無法通過安全網橋。
因此,在正常配置啟用security group的情況下,我們須要想辦法來讓流量繞過它。
通過《深入理解OpenStack中的網絡實現》中的分析。我們知道。從vm出來的流量被過濾的規則在 neutron-openvswi-o9LETTERID鏈上。而到vm裏面的規則在neutron-openvswi-i9LETTERID鏈上。
因此,我們僅僅須要相應在鏈上加入同意通過的規則就可以。
首先。查看vm出來的安全規則鏈上的規則
iptables -nvL neutron-openvswi-o9LETTERID
普通情況下,類似於以下幾條
Chain neutron-openvswi-o4430511a-6 (2 references)
pkts bytes target prot opt in out source destination
6 1968 RETURN
udp -- * *
0.0.0.0
1437 121K neutron-openvswi-s4430511a-6 all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 DROP udp -- * * 0.0.0.0/0 0.0.0.0/0 udp spt:67 dpt:68
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0
278 23352 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
1159 97356 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 neutron-openvswi-sg-fallback all -- * * 0.0.0.0/0 0.0.0.0/0
可見,默認同意通過的流量僅僅有源port為67而目標port68的dhcp請求流量,另外就是neutron-openvswi-s4430511a-6鏈中,會對源地址和源mac進行檢查,假設跟分配到的一致,則同意通過。
比如,我們讓全部的ping包(無論源地址和源mac)都同意從vm發出來,則須要加入
iptables -I neutron-openvswi-o9LETTERID -p icmp -j RETURN
更簡單粗暴的,同意全部的從vm出來的流量。不進行不論什麽檢查。則須要加入
iptables -I neutron-openvswi-o9LETTERID -j RETURN
須要註意的是,這樣加入的規則,不在neutron的維護中。因此,過一段時間後會被清理掉,這時候就須要又一次加入。
在OpenStack中繞過或停用security group (iptables)