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

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

我正在运行 OpenStack,除了网络控制器节点之外的任何地方,我都无法从浮动 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 |
+-------+---------+--------+------------------------------+

如果我登录到控制器,我可以从任一 IP ping 和 ssh 到 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 回复数据包没有返回到我的笔记本电脑。事实上,如果我登录到路由器/防火墙(Cisco ASA 5500),即使我进行数据包捕获,它也不会看到 ICMP 回复数据包。但是,它似乎没有过滤掉这些数据包。就好像它们根本无法到达 ASA。我也无法从 ASA ping 10.20.0.3 接口。

控制器直接连接到 ASA,因此问题似乎出在控制器节点或 ASA 上。

即使 tcpdump 显示回复数据包已发出,它们是否可能被丢弃而不是离开控制器?如果是这样,这是因为 iptables 还是因为其他原因?

iptables-save 的输出在 github gist 中。

$ 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

答案1

您可能需要按照[此处]所述设置一些安全规则(http://docs.openstack.org/trunk/openstack-network/admin/content/enabling_ping_and_ssh.html}。

您必须根据所使用的插件类型配置安全组规则。如果您使用的插件:

实现 OpenStack Networking 安全组,您可以使用 neutron security-group-rule-create 直接配置安全组规则。以下示例允许 ping 和 ssh 访问您的虚拟机。

 $ 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 命令配置安全组规则。以下 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 界面设置规则。

相关内容