多播在 macvtap 设备上不起作用

多播在 macvtap 设备上不起作用

我的虚拟网络和 IPv6 网络发现(多播流量)出现问题。

(设置可能看起来有点复杂,我不记得每个设计决策的确切原因。尽管如此,网络被证明是稳定和可维护的。仍然有可能有优化和简化的空间。)

我的设置是这样的:

  • qemu/kvm 主机(“qemu”)正在运行 Debian 10;我在可能的情况下使用 virt-manager 进行管理 - 一个虚拟机(“fw”)正在运行带有 Ubuntu 18.04 的虚拟化防火墙/路由器 - fw 的 NIC 连接到“Bridge br0:主机设备 eno1”:
# brctl 显示
桥名称 桥 ID STP 启用接口
br0 8000.f44d306689b5 没有 eno1
                            vnet0
                            虚拟网络1
  • 在 fw 内部,我为不同的子网创建了多个 VLAN 设备,以便通过防火墙进行过滤
  • 我的另一台虚拟机(“服务器”)连接到“主机设备 br0.10:macvtap(源模式:桥接)”(br0.10 是 br0 上 VLAN-id 10 的 VLAN 设备。
  • 我已经配置了一个全局单播 /64 子网(来自 tunnelbroker.net),其中 fw 和服务器都配置了该子网的地址
  • 我可以从 fw ping 服务器的本地链接地址

问题:

  • 我无法从 fw ping 服务器的全局单播地址
  • fw 上的 tcpdump 显示邻居请求已发出,但没有收到回复
  • br0 上 qemu 上的 tcpdump 也显示了邻居请求,但没有回复
  • (解决方法)将 macvtap0 切换为混杂模式解决了问题。邻居请求由服务器接收并回复。

我的问题是:为什么我必须手动将 macvtap0 切换到混杂模式?多播不是应该在虚拟机中“开箱即用”的标准网络功能吗?(或者我的设置太不典型,以至于我的用例没有被涵盖?)

答案1

我在超级用户那里找到了答案:https://superuser.com/questions/944678/how-to-configure-macvtap-to-let-it-pass-multicast-packet-correctly/1033768#1033768我将把sourcejedi的答案复制在这里:

libvirt 的 macvlan 已获得对多播的支持。遗憾的是,默认设置禁用了该功能trustGuestRxFilters="no",并且文档未明确说明这会破坏多播。正如您所观察到的,破坏多播也会破坏 IPv6。

https://bugzilla.redhat.com/show_bug.cgi?id=1035253#c15

您可以通过手动设置来解决这个问题 trustGuestRxFilters="yes"。有一个限制:“支持取决于客户网络设备型号,以及主机上的连接类型”。“目前仅支持virtio设备型号和macvtap主机上的连接”。

https://libvirt.org/formatdomain.html#elementsNICS

我认为,自然模型是默认允许多播。在你认为直接连接的网络上阻止多播接收是一个令人不快的意外。尤其是因为macvtap似乎仍然允许发送多播数据包(以及伪造的 MAC 源地址!)。

相关内容