Ping对浮动IP的响应不会到达路由器(iptables / nat)

我正在运行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 s​​ecgroup-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 

您也可以通过Horizo​​n Web界面设置规则。