IPv6 в XenServer Guest перестает работать в случайном порядке
Мои виртуальные машины XenServer 7.0, работающие под управлением Ubuntu 16.04 с ядром 4.4.0, решили прекратить прием пакетов IPv6 вскоре после перезапуска всей машины или сброса сетевого интерфейса.
Пока все работает, работает tcpdump
на хосте XenServer обнаруживает следующее при пинге facebook.com:
[root@localhost ~]# tcpdump -i xenbr0 -vv ip6
tcpdump: listening on xenbr0, link-type EN10MB (Ethernet), capture size 65535 bytes
^C
[root@localhost ~]# tcpdump -i eth0 -vv ip6
tcpdump: WARNING: eth0: no IPv4 address assigned
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
09:25:26.063597 IP6 (flowlabel 0xa64ab, hlim 64, next-header ICMPv6 (58) payload length: 64) 2a01:4f8:xxxx:yyyy::3 > edge-star-mini6-shv-01-amt2.facebook.com: [icmp6 sum ok] ICMP6, echo request, seq 1
09:25:26.074727 IP6 (class 0x40, hlim 56, next-header ICMPv6 (58) payload length: 64) edge-star-mini6-shv-01-amt2.facebook.com > 2a01:4f8:xxxx:yyyy::3: [icmp6 sum ok] ICMP6, echo reply, seq 1
09:25:27.070651 IP6 (flowlabel 0xa64ab, hlim 64, next-header ICMPv6 (58) payload length: 64) 2a01:4f8:xxxx:yyyy::3 > edge-star-mini6-shv-01-amt2.facebook.com: [icmp6 sum ok] ICMP6, echo request, seq 2
09:25:27.081839 IP6 (class 0x40, hlim 56, next-header ICMPv6 (58) payload length: 64) edge-star-mini6-shv-01-amt2.facebook.com > 2a01:4f8:xxxx:yyyy::3: [icmp6 sum ok] ICMP6, echo reply, seq 2
^C
Все как положено. Примерно через 15-30 минут виртуальные машины перестают видеть эхо-ответы, и я получаю это от tcpdump
:
[root@localhost ~]# tcpdump -i xenbr0 -vv ip6
tcpdump: listening on xenbr0, link-type EN10MB (Ethernet), capture size 65535 bytes
09:28:23.106447 IP6 (class 0x40, hlim 56, next-header ICMPv6 (58) payload length: 64) edge-star-mini6-shv-01-amt2.facebook.com > 2a01:4f8:xxxx:yyyy::3: [icmp6 sum ok] ICMP6, echo reply, seq 1
09:28:24.113032 IP6 (class 0x40, hlim 56, next-header ICMPv6 (58) payload length: 64) edge-star-mini6-shv-01-amt2.facebook.com > 2a01:4f8:xxxx:yyyy::3: [icmp6 sum ok] ICMP6, echo reply, seq 2
^C
[root@localhost ~]# tcpdump -i eth0 -vv ip6
tcpdump: WARNING: eth0: no IPv4 address assigned
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
09:31:37.437793 IP6 (flowlabel 0x37012, hlim 64, next-header ICMPv6 (58) payload length: 64) 2a01:4f8:xxxx:yyyy::3 > edge-star-mini6-shv-01-fra3.facebook.com: [icmp6 sum ok] ICMP6, echo request, seq 19
09:31:37.442832 IP6 (class 0x40, hlim 57, next-header ICMPv6 (58) payload length: 64) edge-star-mini6-shv-01-fra3.facebook.com > 2a01:4f8:xxxx:yyyy::3: [icmp6 sum ok] ICMP6, echo reply, seq 19
^C
По какой-то причине, когда все перестает работать, эхо-ответы также проходят через интерфейс xenbr0, а не только eth0.
Бег service networking stop && service networking start
на гостя заставляет все снова работать. Отключение и повторное включение сетевого подключения виртуальной машины на XenServer не помогает. Я уже пытался отключить рекламу маршрутизаторов на виртуальных машинах, но это тоже не помогло.
Я понятия не имею, откуда это взялось, и является ли это проблемой XenServer или Ubuntu/Linux. Неудобные пакеты, которые можно увидеть на xenbr0, похоже, указывают на XenServer, а тот факт, что сброс сетевого стека виртуальной машины помогает, похоже, указывает на Linux...
Обновить
После прочтения немного о работе сети XenServer проблема, похоже, заключается в том, что виртуальный коммутатор XenServer направляет пакеты на неправильный интерфейс. Ожидаемый поток будет eth0 -> vif2.0
, но пакеты идут eth0 -> xenbr0
и, таким образом, заканчивается на машине Dom0 вместо правильного DomU. После перезапуска сети на DomU некоторые из отправленных тогда запросов соседей или рекламы соседей, похоже, временно решают эту проблему:
13:50:23.178132 IP6 :: > ff02::16: HBH ICMP6, multicast listener report v2, 1 group record(s), length 28
13:50:23.378089 IP6 :: > ff02::16: HBH ICMP6, multicast listener report v2, 2 group record(s), length 48
13:50:23.442094 IP6 :: > ff02::1:ff00:2: ICMP6, neighbor solicitation, who has example.org, length 24
13:50:23.698108 IP6 :: > ff02::16: HBH ICMP6, multicast listener report v2, 2 group record(s), length 48
13:50:24.050127 IP6 :: > ff02::1:ff00:36ab: ICMP6, neighbor solicitation, who has fe80::250:xxxx:yyyy:36ab, length 24
13:50:25.050149 IP6 fe80::250:xxxx:yyyy:36ab > ff02::16: HBH ICMP6, multicast listener report v2, 2 group record(s), length 48
13:50:25.174116 IP6 fe80::250:xxxx:yyyy:36ab > ff02::16: HBH ICMP6, multicast listener report v2, 2 group record(s), length 48
13:50:27.605989 IP6 fe80::250:xxxx:yyyy:36ab > ff02::1:ff00:1: ICMP6, neighbor solicitation, who has fe80::1, length 32
13:50:27.606801 IP6 fe80::1 > fe80::250:xxxx:yyyy:36ab: ICMP6, neighbor advertisement, tgt is fe80::1, length 32
13:50:27.609480 IP6 fe80::250:xxxx:yyyy:36ab > ff02::1:ff00:1: ICMP6, neighbor solicitation, who has fe80::1, length 32
13:50:27.609488 IP6 example.org > ff02::1:ff00:1: ICMP6, neighbor solicitation, who has fe80::1, length 32
13:50:27.609943 IP6 fe80::1 > fe80::250:xxxx:yyyy:36ab: ICMP6, neighbor advertisement, tgt is fe80::1, length 32
Мои знания об IPv6 еще не настолько глубоки, чтобы понять, что именно заставляет его работать снова.
1 ответ
Проблема была, как это часто бывает, в нестандартной настройке IPv6 моего хостинг-провайдера Hetzner. Насколько я понял, "истинная" мостовая настройка IPv6 невозможна, поскольку моя выделенная подсеть /64 зафиксирована для маршрутизации только на один конкретный MAC-адрес. NA или NS-пакеты, очевидно, могут переопределить это на короткое время, но вскоре вернутся к MAC-адресу хоста. Теперь я решил эту проблему, включив пересылку пакетов IPv6 на хосте и установив его в качестве шлюза IPv6 на DomU.