Я использую OpenStack, и у меня возникают проблемы с доступом к своим экземплярам с плавающих IP-адресов из любого места, кроме узла сетевого контроллера.
У меня есть развертывание Folsom с FlatDHCP, а не с несколькими хостами, работающее на 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 |
+-------+---------+--------+------------------------------+
Если я вошел в контроллер, я могу выполнить ping и ssh для экземпляра виртуальной машины с любого из IP-адресов. Однако я не могу выполнить ping или ssh для экземпляра с внешнего компьютера.
Если я попытаюсь выполнить эхо-запрос со своего ноутбука (192.168.3.8) и сделаю tcpdump в общедоступном интерфейсе (eth3), я увижу запрос и ответ:
# 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. Я также не могу пропинговать интерфейс 10.20.0.3 от ASA.
Контроллер подключен непосредственно к 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
Возможно, вам потребуется настроить некоторые правила безопасности, как описано [здесь] (http://docs.openstack.org/trunk/openstack-network/admin/content/enables_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.