OpenStack Neutron的安全组默认会对每个网口开启MAC/IP过滤功能(防arp欺骗),不是该网口的MAC/IP发出的包会被宿主机丢弃。这种限制会导致vNF的上行网口转发的数据包被丢弃,无法到达vRouter。关闭安全组有两种方法
第一种是整体关闭
# /etc/neutron/plugins/ml2/openvswitch_agent.ini
firewall_driver=None
整体关闭的弊端是所有的端口不在受安全组保护,私有云尚且可以,公有云会带来安全隐患
局部关闭
OpenStack Neutron的MAC/IP过滤是利用宿主机的iptables实现的,因此可以通过修改iptables配置来达到局部关闭的效果,具体步骤如下:
为每个租户创建完毕vNF后,从后台进入宿主机,找到对应网口的tap设备,记下tap后面的id,例如sc5695d00-9。
iptables --line-numbers -nvL | grep ${id}
利用iptables -D ...删除掉对应条目
另一种比较优雅的局部关闭方法是使用OpenStack Cli,可以关闭指定的port的安全组:
opnestack port set --no-security-group <port>
openstack port set --disable-port-security <port>
也可以为port添加允许通过的MAC/IP
openstack port set --allowed-address ip=address=<ip-address>, mac-address=<mac-address> <port>