OpenStack: 让虚拟机自己管理DHCP

由于项目需要,我需要把一个装在ATCA中的集群系统移植到OpenStack上。

在这个集群系统中,有两台主备互用的管理机,其他的机器均为计算节点,安装的时候从管理机自动安装。

自动安装使用的是netboot。

netboot需要在管理机上运行DHCP服务,然而,nova和quantum默认都会在security group中禁用虚拟机自己管理DHCP。

用iptables-save可以看到有很多类似下面的内容

-A quantum-linuxbri-o1ea744af-8 -p udp -m udp --sport 67 --dport 68 -j DROP

搜索一下python代码可以发现

# find /usr/lib/python2.7/dist-packages/ -name "*.py"|xargs grep "sport 67"
/usr/lib/python2.7/dist-packages/nova/virt/firewall.py: ipv4_rules.append('-s %s -p udp --sport 67 --dport 68 '
/usr/lib/python2.7/dist-packages/quantum/tests/unit/test_security_groups_rpc.py:-A %(bn)s-i_port1 -j DROP -p udp --dport 68 --sport 67 -s 10.0.0.2
/usr/lib/python2.7/dist-packages/quantum/tests/unit/test_security_groups_rpc.py:-A %(bn)s-o_port1 -p udp --sport 67 --dport 68 -j DROP
/usr/lib/python2.7/dist-packages/quantum/tests/unit/test_security_groups_rpc.py:-A %(bn)s-i_port1 -j DROP -p udp --dport 68 --sport 67 -s 10.0.0.2
/usr/lib/python2.7/dist-packages/quantum/tests/unit/test_security_groups_rpc.py:-A %(bn)s-o_port1 -p udp --sport 67 --dport 68 -j DROP
/usr/lib/python2.7/dist-packages/quantum/tests/unit/test_security_groups_rpc.py:-A %(bn)s-i_port1 -j DROP -p udp --dport 68 --sport 67 -s 10.0.0.2
/usr/lib/python2.7/dist-packages/quantum/tests/unit/test_security_groups_rpc.py:-A %(bn)s-o_port1 -p udp --sport 67 --dport 68 -j DROP
/usr/lib/python2.7/dist-packages/quantum/tests/unit/test_security_groups_rpc.py:-A %(bn)s-i_port2 -j DROP -p udp --dport 68 --sport 67 -s 10.0.0.2
/usr/lib/python2.7/dist-packages/quantum/tests/unit/test_security_groups_rpc.py:-A %(bn)s-o_port2 -p udp --sport 67 --dport 68 -j DROP
/usr/lib/python2.7/dist-packages/quantum/tests/unit/test_security_groups_rpc.py:-A %(bn)s-i_port1 -j DROP -p udp --dport 68 --sport 67 -s 10.0.0.2
/usr/lib/python2.7/dist-packages/quantum/tests/unit/test_security_groups_rpc.py:-A %(bn)s-o_port1 -p udp --sport 67 --dport 68 -j DROP
/usr/lib/python2.7/dist-packages/quantum/tests/unit/test_security_groups_rpc.py:-A %(bn)s-i_port2 -j DROP -p udp --dport 68 --sport 67 -s 10.0.0.2
/usr/lib/python2.7/dist-packages/quantum/tests/unit/test_security_groups_rpc.py:-A %(bn)s-o_port2 -p udp --sport 67 --dport 68 -j DROP
/usr/lib/python2.7/dist-packages/quantum/tests/unit/test_security_groups_rpc.py:-A %(bn)s-i_port1 -j DROP -p udp --dport 68 --sport 67 -s 10.0.0.2
/usr/lib/python2.7/dist-packages/quantum/tests/unit/test_security_groups_rpc.py:-A %(bn)s-o_port1 -p udp --sport 67 --dport 68 -j DROP
/usr/lib/python2.7/dist-packages/quantum/tests/unit/test_security_groups_rpc.py:-A %(bn)s-i_port2 -j DROP -p udp --dport 68 --sport 67 -s 10.0.0.2
/usr/lib/python2.7/dist-packages/quantum/tests/unit/test_security_groups_rpc.py:-A %(bn)s-o_port2 -p udp --sport 67 --dport 68 -j DROP
/usr/lib/python2.7/dist-packages/quantum/tests/unit/test_iptables_firewall.py: '-p udp --sport 67 --dport 68 -j DROP'),
/usr/lib/python2.7/dist-packages/quantum/tests/unit/test_iptables_firewall.py: '-p udp --sport 67 --dport 68 -j DROP'))
/usr/lib/python2.7/dist-packages/quantum/tests/unit/test_iptables_firewall.py: '-p udp --sport 67 --dport 68 -j DROP'),
/usr/lib/python2.7/dist-packages/quantum/tests/unit/test_iptables_firewall.py: 'ofake_dev', '-p udp --sport 67 --dport 68 -j DROP'),
/usr/lib/python2.7/dist-packages/quantum/tests/unit/test_iptables_firewall.py: '-p udp --sport 67 --dport 68 -j DROP'),
/usr/lib/python2.7/dist-packages/quantum/agent/linux/iptables_firewall.py: DROP ['-p udp --sport 67 --dport 68 -j DROP']

可以看到DHCP使用的端口67和68都被iptables禁用掉了。

那么解决办法也很简单了,

可以在安装前把上述文件中的代码中的DROP改成ACCEPT

或者手动删除iptables中的规则

我是直接运行了'iptables -F'把所有的规则都flush掉了。虽然这是很不安全的做法,但至少暂时解决了问题。

posted @ 2013-11-15 13:20  laocius  阅读(637)  评论(0编辑  收藏  举报