首页 > 代码库 > 在OpenStack中绕过或停用security group (iptables)
在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/0 0.0.0.0/0 udpspt:68dpt:67
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 udpspt:67dpt:68
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID
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
可见,默认允许通过的流量只有源端口为67而目标端口68的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的维护中,因此,过一段时间后会被清理掉,这时候就需要重新添加。