Como posso fazer com que meu convidado libvirt/KVM veja todo o tráfego multicast IPv4/UDP?

Como posso fazer com que meu convidado libvirt/KVM veja todo o tráfego multicast IPv4/UDP?

Tenho um problema com o tráfego multicast IPv4/UDP que não é totalmente visível em um convidado KVM.

O convidado possui uma NIC dedicada que é conectada usando MacVTap. Tanto o sistema operacional host quanto o sistema operacional convidado são Ubuntu 18.04. Esta é a configuração de rede da 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>

(Observe que ofusquei o endereço MAC real.)

Desde que habilitei trustGuestRxFilters, o mDNS está funcionando bem. No entanto, ainda há certo tráfego multicast que não consigo ver.

Este é o comando que gera o tráfego multicast 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

Isso cria um fluxo de vídeo constante de aproximadamente 400 KB/s. Estou usando multicast deliberadamente aqui, para que vários hosts na rede possam reproduzir ou gravar o stream (sem exigir que o computador de origem, que está conectado via WiFi, envie vários streams). O host do convidado KVM deve analisar o fluxo e gravá-lo sempre que houver movimento no vídeo.

Aqui está o problema:Todos os hosts que sãodiretamenteconectado à rede (= não é um convidado KVM) pode receber o tráfego UDP, até mesmo o próprio host KVM. No entanto, o convidado KVM não pode — ele vê apenas poucos pacotes:

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, esses pacotes não são suficientes para um fluxo de vídeo de 400 KB/s executado por 20 segundos. Quando faço o mesmo em outro host conectado diretamente, obtenho os 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

O sistema operacional no host KVM é Ubuntu 18.04. Versão do QEMU:

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

Alguma ideia do que está impedindo o convidado KVM de ver todo o tráfego?

Responder1

Talvez resposta rnxrx'Poderia ajudar?

ip link set dev macvtap*n* allmulticast on

informação relacionada