libvirt/KVM 게스트가 모든 IPv4/UDP 멀티캐스트 트래픽을 볼 수 있도록 하려면 어떻게 해야 합니까?

libvirt/KVM 게스트가 모든 IPv4/UDP 멀티캐스트 트래픽을 볼 수 있도록 하려면 어떻게 해야 합니까?

KVM 게스트 내에서 IPv4/UDP 멀티캐스트 트래픽이 완전히 표시되지 않는 문제가 있습니다.

게스트에는 MacVTap을 사용하여 연결된 전용 NIC가 있습니다. 호스트 OS와 게스트의 OS는 모두 Ubuntu 18.04입니다. 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>

(실제 MAC 주소는 난독화했습니다.)

을 활성화했기 때문에 trustGuestRxFiltersmDNS가 제대로 작동하고 있습니다. 그러나 아직 볼 수 없는 특정 멀티캐스트 트래픽이 있습니다.

문제가 있는 UDP 멀티캐스트 트래픽을 생성하는 명령은 다음과 같습니다.

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

이는 약 400KB/s의 지속적인 비디오 스트림을 생성합니다. 여기서는 의도적으로 멀티캐스트를 사용하고 있으므로 네트워크의 여러 호스트가 스트림을 재생하거나 녹음할 수 있습니다(WiFi를 통해 연결된 원본 컴퓨터에서 여러 스트림을 보내지 않고도). KVM 게스트의 호스트는 스트림을 분석하고 비디오에 움직임이 있을 때마다 이를 녹화해야 합니다.

문제는 다음과 같습니다.모든 호스트는곧장네트워크에 연결된(= KVM 게스트 아님)은 UDP 트래픽을 수신할 수 있으며 KVM 호스트 자체도 마찬가지입니다. 그러나 KVM 게스트는 그렇게 할 수 없습니다. 매우 적은 수의 패키지만 볼 수 있습니다.

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

이는 20초 동안 실행되는 400KB/s 비디오 스트림에 대한 패킷이 충분하지 않습니다. 직접 연결된 다른 호스트에서 동일한 작업을 수행하면 예상된 결과를 얻습니다.

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

KVM 호스트의 OS는 Ubuntu 18.04입니다. QEMU 버전:

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

KVM 게스트가 모든 트래픽을 볼 수 없게 만드는 원인이 무엇인지 아시나요?

답변1

아마도 rnxrx' 답변도움이 될까요?

ip link set dev macvtap*n* allmulticast on

관련 정보