Ipv6

多播在 macvtap 設備上不起作用

  • February 17, 2021

我的虛擬網路和 IPv6 網路發現(多播流量)有問題。

(設置似乎有點複雜,我不記得每個設計決策的確切原因。儘管如此,網路被證明是穩定和可維護的。仍然可能存在優化和簡化的空間。)

我的設置是這樣的:

  • qemu/kvm 主機(“qemu”)正在執行 Debian 10;我在可能的情況下使用 virt-manager 進行管理 - 一個 VM(“fw”)正在執行帶有 Ubuntu 18.04 的虛擬防火牆/路由器 - fw 的 NIC 連接到“Bridge br0:Host device eno1”:
# brctl 顯示
網橋名稱 網橋 ID 啟用 STP 的介面
br0 8000.f44d306689b5 沒有 eno1
vnet0
vnet1
  • 在 fw 內部,我為我的不同子網創建了幾個 VLAN 設備,以供防火牆過濾
  • 我的另一個 VM(“伺服器”)連接到“主機設備 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 切換到混雜模式?多播不是應該與VM“開箱即用”的標準網路功能嗎?(或者我的設置是如此不典型,以至於我的案例沒有被涵蓋?)

我在超級使用者處找到了答案: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

IMO 的自然模型是預設允許多播。在您認為您直接連接到的網路上阻止多播接收是一個令人不快的驚喜。特別是因為macvtap似乎仍然允許發送多播數據包(以及欺騙的 MAC 源地址!)。

引用自:https://serverfault.com/questions/1035107