¿Cómo puedo hacer que mi invitado libvirt/KVM vea todo el tráfico de multidifusión IPv4/UDP?

¿Cómo puedo hacer que mi invitado libvirt/KVM vea todo el tráfico de multidifusión IPv4/UDP?

Tengo un problema con el tráfico de multidifusión IPv4/UDP que no es completamente visible desde un invitado KVM.

El invitado tiene una NIC dedicada que se conecta mediante MacVTap. Tanto el sistema operativo anfitrión como el sistema operativo invitado son Ubuntu 18.04. Esta es la configuración de red de la VM:

 <interface type='direct' trustGuestRxFilters='yes'>
   <mac address='XX:XX:XX:XX:XX:XX'/>
   <source dev='enp1s0f1' mode='passthrough'/>
   <model type='virtio'/>
   <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
 </interface>

(Tenga en cuenta que oculté la dirección MAC real).

Desde que lo habilité trustGuestRxFilters, mDNS está funcionando bien. Sin embargo, todavía hay cierto tráfico de multidifusión que no puedo ver.

Este es el comando que genera el tráfico de multidifusión UDP problemático:

raspivid -ae 40,0xff -a 1036 -t 0 -w 1280 -h 720 -ih -fps 30 -mm spot \
  -o udp://239.255.0.1:5000

Esto crea un flujo de vídeo constante de aproximadamente 400 KB/s. Estoy usando deliberadamente multidifusión aquí, para que varios hosts en la red puedan reproducir o grabar la transmisión (sin necesidad de que la computadora de origen, que está conectada a través de WiFi, envíe múltiples transmisiones). Se supone que el anfitrión del invitado KVM analiza la transmisión y la graba cada vez que hay movimiento en el video.

Aquí está el problema:Todos los hosts que sondirectamenteconectado a la red (= no un invitado KVM) puede recibir el tráfico UDP, incluso el propio host KVM. Sin embargo, el invitado KVM no puede: sólo ve muy pocos paquetes:

sudo timeout 20 tcpdump -i ens3 host 239.255.0.1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens3, link-type EN10MB (Ethernet), capture size 262144 bytes
20:53:10.361355 IP vogelhaus.internal.example.com.48146 > 239.255.0.1.5000: UDP, length 4096
#
# omitted 5 lines
#
20:53:12.081881 IP vogelhaus.internal.example.com.48146 > 239.255.0.1.5000: UDP, length 4096

7 packets captured
16 packets received by filter
9 packets dropped by kernel

Definitivamente estos no son suficientes paquetes para una transmisión de video de 400 KB/s que se ejecuta durante 20 segundos. Cuando hago lo mismo en otro host que está conectado directamente, obtengo los resultados esperados:

sudo timeout 20 tcpdump -i enp1s0f0 host 239.255.0.1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp1s0f0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:54:41.264709 IP vogelhaus.internal.example.com > 239.255.0.1: udp
#
# ... many, many more! ...
#
20:55:00.912257 IP vogelhaus.internal.example.com > 239.255.0.1: udp
20:55:00.912446 IP vogelhaus.internal.example.com.48146 > 239.255.0.1.5000: UDP, bad length 4096 > 1472

7205 packets captured
7231 packets received by filter
26 packets dropped by kernel

El sistema operativo del host KVM es Ubuntu 18.04. Versión QEMU:

QEMU emulator version 2.11.1(Debian 1:2.11+dfsg-1ubuntu7.21)

¿Alguna idea de qué impide que el invitado KVM vea todo el tráfico?

Respuesta1

Tal vez respuesta de rnxrx¿podría ayudar?

ip link set dev macvtap*n* allmulticast on

información relacionada