Назад | Перейти на главную страницу

Ping-ответы на плавающие IP-адреса не доходят до маршрутизатора (iptables / nat)

Я использую 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.