如何讓我的 libvirt/KVM guest 虛擬機器看到所有 IPv4/UDP 多播流量?

如何讓我的 libvirt/KVM guest 虛擬機器看到所有 IPv4/UDP 多播流量?

我遇到了 IPv4/UDP 多播流量在 KVM 來賓中無法完全可見的問題。

賓客有一個使用 MacVTap 連線的專用 NIC。主機作業系統和來賓作業系統均為 Ubuntu 18.04。這是虛擬機器的網路配置:

 <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/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

這些資料包絕對不足以讓 400 KB/s 的視訊串流運行 20 秒。當我在直接連接的另一台主機上執行相同操作時,我確實得到了預期結果:

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主機作業系統為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

相關內容