我正在运行 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 secgroup-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
您也可以通过 Horizon Web 界面设置规则。