Периодическая потеря пакетов в мостовой сети Linux (контекст KVM)

У меня есть стандартная настройка моста между реальным миром и гостевой виртуальной машиной KVM.

Мостовое соединение выглядит нормально:

[root@t ~]# brctl show
bridge name bridge id       STP enabled interfaces
br0     8000.40f2e9c6033d   no      eno2
                                    vnet0
virbr0  8000.000000000000   no      

Шлюз по умолчанию - br0 на хосте.

Я могу пропинговать виртуальную машину с хоста, а хост - с виртуальной машины.

Если я пингую что-нибудь за пределами виртуальной машины или сам хост, я вижу периодическую потерю пакетов:

[root@locoxen2 ~]# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=55 time=4.59 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=55 time=4.59 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=55 time=4.67 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=55 time=4.75 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=55 time=4.69 ms
64 bytes from 8.8.8.8: icmp_seq=15 ttl=55 time=1224 ms
64 bytes from 8.8.8.8: icmp_seq=16 ttl=55 time=224 ms
64 bytes from 8.8.8.8: icmp_seq=17 ttl=55 time=4.49 ms
64 bytes from 8.8.8.8: icmp_seq=18 ttl=55 time=4.48 ms
64 bytes from 8.8.8.8: icmp_seq=19 ttl=55 time=4.54 ms
64 bytes from 8.8.8.8: icmp_seq=20 ttl=55 time=4.52 ms
64 bytes from 8.8.8.8: icmp_seq=21 ttl=55 time=4.55 ms
64 bytes from 8.8.8.8: icmp_seq=22 ttl=55 time=4.70 ms
64 bytes from 8.8.8.8: icmp_seq=23 ttl=55 time=4.57 ms
64 bytes from 8.8.8.8: icmp_seq=24 ttl=55 time=4.88 ms
64 bytes from 8.8.8.8: icmp_seq=25 ttl=55 time=4.65 ms
64 bytes from 8.8.8.8: icmp_seq=26 ttl=55 time=4.53 ms
64 bytes from 8.8.8.8: icmp_seq=36 ttl=55 time=1430 ms
64 bytes from 8.8.8.8: icmp_seq=37 ttl=55 time=430 ms
64 bytes from 8.8.8.8: icmp_seq=38 ttl=55 time=4.57 ms
64 bytes from 8.8.8.8: icmp_seq=39 ttl=55 time=4.53 ms

Это особенно происходит, если трафик покидает виртуальную машину и хост в одно и то же время.

Если я выключу виртуальную машину (т.е. гарантирую отсутствие трафика с этой стороны моста), Я не вижу потери пакетов, если я пингую с хоста, как указано выше.

Запуск tcpdump на физическом порту (eno2) хоста при одновременном пинге с хоста и виртуальной машины показывает мне такие вещи (40: f2) - хост, 52:54 - это ВМ):

17:53:26.382679 40:f2:e9:c6:03:3d > e8:f7:24:49:49:ee, ethertype IPv4 (0x0800), length 98: 192.168.0.191 > 8.8.8.8: ICMP echo request, id 27485, seq 23, length 64
17:53:27.200397 52:54:00:16:f5:f4 > e8:f7:24:49:49:ee, ethertype IPv4 (0x0800), length 98: 192.168.0.221 > 8.8.8.8: ICMP echo request, id 11460, seq 2, length 64
17:53:27.382244 40:f2:e9:c6:03:3d > e8:f7:24:49:49:ee, ethertype IPv4 (0x0800), length 98: 192.168.0.191 > 8.8.8.8: ICMP echo request, id 27485, seq 24, length 64
17:53:28.200304 52:54:00:16:f5:f4 > e8:f7:24:49:49:ee, ethertype IPv4 (0x0800), length 98: 192.168.0.221 > 8.8.8.8: ICMP echo request, id 11460, seq 3, length 64

т.е. пакеты уходят, но ответы не приходят.

То же, но без трафика от ВМ, или ВМ отключена:

17:53:05.346226 40:f2:e9:c6:03:3d > e8:f7:24:49:49:ee, ethertype IPv4 (0x0800), length 98: 192.168.0.191 > 8.8.8.8: ICMP echo request, id 27485, seq 2, length 64
17:53:05.350936 e8:f7:24:49:49:ee > 40:f2:e9:c6:03:3d, ethertype IPv4 (0x0800), length 98: 8.8.8.8 > 192.168.0.191: ICMP echo reply, id 27485, seq 2, length 64
17:53:06.348159 40:f2:e9:c6:03:3d > e8:f7:24:49:49:ee, ethertype IPv4 (0x0800), length 98: 192.168.0.191 > 8.8.8.8: ICMP echo request, id 27485, seq 3, length 64
17:53:06.352855 e8:f7:24:49:49:ee > 40:f2:e9:c6:03:3d, ethertype IPv4 (0x0800), length 98: 8.8.8.8 > 192.168.0.191: ICMP echo reply, id 27485, seq 3, length 64

iptables и ebtables не показывают правил - все установлено в ACCEPT. Я отключил все функции разгрузки на портах. Склеивание не используется. MAC-адреса уникальны - я не могу различить совпадений.

Обратите внимание, что я вижу это для установок как CentOS6, так и 7.

Что я упускаю из виду?

1
задан 17 December 2017 в 21:00
2 ответа

В конце концов, в моей настройке не было ничего неправильного.

Проблема заключалась в том, что вышестоящий сетевой коммутатор не был настроен на использование статической VLAN на соответствующем порте коммутатора. Несколько MAC-адресов, которые он видел, вызвали путаницу относительно того, какие сети VLAN следует назначить порту.

Как раздражает!

1
ответ дан 3 December 2019 в 23:22

Я столкнулся с той же проблемой, но основная проблема была другой. Я натолкнулся на этот вопрос, пытаясь диагностировать проблему, и решил, что оставлю ответ с другим возможным виновником, особенно при запуске KVM / qemu из командной строки, для всех, кому эта информация может пригодиться.

не устанавливайте явно MAC-адрес для виртуального сетевого интерфейса, qemu назначит ему адрес по умолчанию. Если вы запускаете несколько виртуальных машин и не установили MAC-адреса на их сетевых интерфейсах, qemu почти наверняка предоставит им одинаковый MAC-адрес. (Обратите внимание, что большинство GUI-оболочек KVM, таких как virt-manager, назначат вам случайный MAC-адрес.)

Очевидно, это наносит ущерб маршрутизации уровня 2 между виртуальными машинами, и они будут бороться за то, кому принадлежит адрес.

] Предоставление каждому хосту другого MAC-адреса решило проблему для меня.

0
ответ дан 3 December 2019 в 23:22

Теги

Похожие вопросы