我的虚拟网络和 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 源地址!)。