我正在运行OpenStack,并且在从networking控制器节点以外的任何位置访问浮动IP实例时遇到问题。
我使用FlatDHCP进行Folsom部署,不运行多主机,运行在Ubuntu 12.04上。
例如,下面是一个运行实例,其固定IP为10.40.0.2,浮动IP为10.20.0.3:
$ nova list +-------+---------+--------+------------------------------+ | ID | Name | Status | Networks | +-------+---------+--------+------------------------------+ | 3d292 | quantal | ACTIVE | private=10.40.0.2, 10.20.0.3 | +-------+---------+--------+------------------------------+
如果我login到控制器,我可以ping通ssh到任一IP的VM实例。 但是,我不能ping或SSH到外部机器的实例。
如果我尝试从我的笔记本电脑(192.168.3.8)ping,并且在公共接口(eth3)上做了一个tcpdump,我可以看到请求并回复:
# tcpdump -i eth3 icmp tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth3, link-type EN10MB (Ethernet), capture size 65535 bytes 17:26:54.004746 IP 192.168.3.8 > 10.20.0.3: ICMP echo request, id 47116, seq 0, length 64 17:26:54.005383 IP 10.20.0.3 > 192.168.3.8: ICMP echo reply, id 47116, seq 0, length 64
但是,ICMP回复数据包不会回到我的笔记本电脑。 事实上,如果我login到路由器/防火墙(Cisco ASA 5500),如果我执行数据包捕获,它也不会看到ICMP回复数据包。 但是,它似乎没有过滤数据包。 就好像他们只是没有到达ASA。 我也无法ping从ASA的10.20.0.3接口。
控制器直接连接到ASA,所以问题似乎是在控制器节点或ASA上。
即使tcpdump显示回复数据包出去,是否有可能被丢弃,而不是离开控制器? 如果是这样,这是因为iptables,还是由于别的?
iptables-save的输出在github中。
$ ip addr show eth3 5: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000 link/ether 33:44:55:66:77:88 brd ff:ff:ff:ff:ff:ff inet 10.20.0.2/24 brd 10.20.0.255 scope global eth3 inet 10.20.0.3/32 scope global eth3 inet 10.20.0.4/32 scope global eth3 inet 10.20.0.5/32 scope global eth3 inet6 fe80::6273:5cff:fe68:b4b7/64 scope link valid_lft forever preferred_lft forever
您可能需要按照此处所述设置一些安全规则( http://docs.openstack.org/trunk/openstack-network/admin/content/enabling_ping_and_ssh.html )。
您必须根据您使用的插件types来configuration安全组规则。 如果您使用的插件是:
实现OpenStack Networking安全组,您可以使用neutron security-group-rule-create直接configuration安全组规则。 以下示例允许ping和ssh访问您的VM。
$ neutron security-group-rule-create --protocol icmp --direction ingress default $ neutron security-group-rule-create --protocol tcp --port-range-min 22 --port-range-max 22 --direction ingress default不执行OpenStack Networking安全组,您可以使用nova secgroup-add-rule或euca-authorize命令来configuration安全组规则。 以下nova命令允许ping和ssh访问您的虚拟机。
$ nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0 $ nova secgroup-add-rule default tcp 22 22 0.0.0.0/0
您也可以通过Horizon Web界面设置规则。