我正在尝试在 Proxmox 内设置 OPNSense VM,该 VM 在启用了嵌套的 Azure VM 中运行。我有我这样做的理由,所以请不要问我“为什么不选择原生”的问题。
由于 azure VM 不支持 vIOMMU(请注意,vIOMMU 中的“v”代表虚拟化 IOMMU,用于 L2 实例),因此我无法将接口进一步从 Proxmox 传递到 OPNSense,因此我需要使用桥接器。
主机设置为:
桥接接口处于混杂模式。
实际配置为:
iface eth0 inet manual
auto vmbr0
iface vmbr0 inet manual
bridge-ports eth0
bridge-stp off
bridge-fd 0
访客配置为:
在 eth0 或 vmbr0 上运行 dhclient 可以正确发现并分配 IP 地址。
现在,我尝试让虚拟机中的 OPNSense 获取该 IP 地址,并通过 vmbr0 在主机外部透明地中继其流量。我之前在虚拟机和另一个虚拟机中运行的 OpenWRT 之间做过一些非常类似的事情,使用 OpenWRT 的“简单中继”(kmod-trelay,请参阅https://forum.openwrt.org/t/howto-kmod-trelay/49610/ 2,还有https://github.com/openwrt/openwrt/commit/c3bba7f8c61ee98265bcffef8ee86e22aa89bbe9),尽管这个特殊情况要简单得多,但我无法让虚拟机与ISP正确通信。我尝试简单地通过设置 OPNSense VM 的接口来欺骗 eth0 的 MAC 地址,但这还不够。
我还使用 tcpdump 检查了两端的流量,有趣的是,vmbr0 确实看到了来自虚拟机的 DHCP 请求,并且 ISP 确实做出了响应,但该响应永远不会到达虚拟机,也不会到达与该虚拟机对应的 Tap 接口Proxmox 分配给桥。
我在这里缺少什么?