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 アドレスは難読化されていることに注意してください。)

を有効にして以来trustGuestRxFilters、mDNS は正常に動作しています。ただし、まだ確認できないマルチキャスト トラフィックが存在します。

これは、問題のある 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

これにより、約 400 KB/秒の一定のビデオ ストリームが作成されます。ここでは意図的にマルチキャストを使用しているため、ネットワーク上の複数のホストがストリームを再生または記録できます (WiFi 経由で接続されたソース コンピューターが複数のストリームを送信する必要はありません)。KVM ゲストのホストは、ビデオに動きがあるたびにストリームを分析して記録することになっています。

問題は次の通りです:すべてのホストは直接ネットワークに接続されている (= KVM ゲストではない) は、KVM ホスト自体も含め、UDP トラフィックを受信できます。ただし、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 秒間実行される 400 KB/秒のビデオ ストリームには明らかにパケット数が足りません。直接接続されている別のホストで同じことを実行すると、期待どおりの結果が得られました。

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

関連情報