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

Эхо и ответы ICMP приходят, но нет пинга (узлы kvm и гости)

Вот шаги, которые я предпринял при создании своей установки:

  1. У меня 2 компьютера (оба x86 с Ubuntu 14.04 LTS).
  2. Я устанавливаю 2 виртуальные машины (ВМ) - по одной на каждую машину.
  3. Обе виртуальные машины - это Ubuntu Server 14.04 LTS.
  4. На одном x86 я запускаю одну виртуальную машину с помощью kvm. На другом x86 я запускаю другую виртуальную машину с помощью VirtualBox.
  5. Я подключаю оба x86 через роутер.

================================================== ==

(ubuntu1) [KVM] (X86,1) ------ {Маршрутизатор} ------ (X86,2) [VirtualBox] (ubuntu2)

================================================== ==

Теперь я разрешаю пересылку IPv4 на всех 4 машинах (изменить на /etc/sysctl.conf, и используя sysctl -p), и установите на всех 4 машинах одну сетевую карту (eth0) и установите ее в /etc/network/interfaces к руководству).

Затем я начинаю с назначения адресов сетевым адаптерам двух x86, устанавливаю шлюзы по умолчанию и ping вокруг. Все отлично работает. После этого я назначаю адрес одной виртуальной машине (вместо x86, на которой эта виртуальная машина работает). Опять же - отлично работает. И, наконец, установите IP-адрес второй ВМ (опять же, вместо x86, на котором работает вторая ВМ).

В определенный момент - ping не работает. Когда я проверяю пакеты, я вижу, что одна виртуальная машина отвечает, а другая - нет. Я проверял это следующими способами:

  1. Я выбираю одну виртуальную машину (скажем, ubuntu1) и ping и tcpdump на этой машине (ping [IP_ADDRESS_ubuntu2] & с последующим tcpdump -i eth0)
  2. Подключите провод между x86 к концентратору (дублируя пакеты) и wireshark- это.

Результат всегда один и тот же - я вижу, что одна виртуальная машина регистрирует эхо-сигналы ICMP-пакетов для другой (это тот, который отвечает), а другая виртуальная машина регистрирует эхо-сигналы и ответы от другой виртуальной машины.

Итак - пакеты ICMP фактически прибыла машина, но ping ничего не показывает!

Вот пример последней настройки:

================================================== ==

(55.55.55.55) [KVM] ----------- {Маршрутизатор} ----------- [VirtualBox] (22.22.22.22)

================================================== ==

Бег ping и tcpdump на 55.55.55.55:

root@55.55.55.55:/home# ping 22.22.22.22 &
root@55.55.55.55:/home# PING 22.22.22.22 (22.22.22.22) 56(84) bytes of data.
root@55.55.55.54:/home# tcpdump -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
07:10:11.758872 IP 55.55.55.55 > 22.22.22.22: ICMP echo request, id 5499, seq 6, length 64
07:10:12.758785 IP 55.55.55.55 > 22.22.22.22: ICMP echo request, id 5499, seq 7, length 64
07:10:13.766994 IP 55.55.55.55 > 22.22.22.22: ICMP echo request, id 5499, seq 8, length 64
07:10:14.767637 IP 55.55.55.55 > 22.22.22.22: ICMP echo request, id 5499, seq 9, length 64

Бег ping и tcpdump 22.22.22.22:

root@22.22.22.22:/home# ping 55.55.55.55 &
root@22.22.22.22:/home# PING 55.55.55.55 (55.55.55.55) 56(84) bytes of data.
root@22.22.22.22:/home# tcpdump -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
15:58:01.883915 IP 22.22.22.22 > 55.55.55.55: ICMP echo request, id 4099, seq 8, length 64
15:58:01.884390 IP 55.55.55.55 > 22.22.22.22: ICMP echo reply, id 4099, seq 8, length 64
15:58:02.885795 IP 22.22.22.22 > 55.55.55.55: ICMP echo request, id 4099, seq 9, length 64
15:58:02.886298 IP 55.55.55.55 > 22.22.22.22: ICMP echo reply, id 4099, seq 9, length 64

Однако обратите внимание, что машина «знает», где находится другая машина:

root@55.55.55.55:/home/rad# ip route get 22.22.22.22
22.22.22.22 via 55.55.55.1 dev eth2  src 55.55.55.55
    cache

Идеи?

ОБНОВЛЕНИЕ 1

вывод различных команд:

root@55.55.55.55:/home# iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

root@55.55.55.55:/home# iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT

root@55.55.55.55:/home# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         55.55.55.1      0.0.0.0         UG        0 0          0 eth0
55.55.55.0      0.0.0.0         255.255.255.0   U         0 0          0 eth0

ОБНОВЛЕНИЕ 2

Изменение IP-адреса на одной стороне (55.55.55.55 -> 55.55.55.54) получает ответ ICMP, что означает ping работает.

Смена IP-адреса на другой стороне не имеет значения.

root@55.55.55.55:/home/rad# ifconfig eth0 55.55.55.54/24
root@55.55.55.55:/home/rad# ping 22.22.22.22
PING 22.22.22.22 (22.22.22.22) 56(84) bytes of data.
64 bytes from 22.22.22.22: icmp_seq=1 ttl=63 time=1.05 ms
64 bytes from 22.22.22.22: icmp_seq=2 ttl=63 time=0.568 ms
64 bytes from 22.22.22.22: icmp_seq=3 ttl=63 time=0.692 ms
64 bytes from 22.22.22.22: icmp_seq=4 ttl=63 time=0.597 ms

переключение обратно на IP-адрес 55.55.55.55, снова отклоняет ответ ICMP.

Направления

Несколько направлений я думаю, но до сих пор не нашел ответа: