在这种嵌套虚拟化情况下如何桥接网络?

在这种嵌套虚拟化情况下如何桥接网络?

这是我之前的问题根据 Daniel B 和 Deltic 的反馈,我从 VirtualBox 切换到 QEMU,它可以在虚拟机上作为主机(在我的情况下是 Hyper-V)处理 64 位客户机 - 这种场景称为嵌套虚拟化

在安装 QEMU 并阅读一些文档后,我成功地将给定的 OVA 映像转换为(QEMU 原生的)QCOW2 格式。我注意到生成的映像比原始映像大得多(6.4G vs. 1.3G),但也许这是正常的。然后我学习了如何使用 QEMU 启动虚拟机,并尝试这样做:

qemu -nographic -hda <IMAGE_NAME>.qcow2 &

然后我意识到(后来通过进一步阅读 QEMU 文档证实)默认网络方案意味着主机和客户操作系统之间缺乏桥接。我尝试启用桥接,如下所示,但失败了(基于这篇博文):

qemu -nographic -net bridge:br0 -hda <IMAGE_NAME>.qcow2 &

我犹豫是否使用该方法,因为使用bridge-utils描述这里因为它可能会扰乱主机操作系统的网络。此外,基于这个文件,我尝试重定向端口(见下文),但它对我来说也不起作用。如果TAP 接口是解决方案,那么我应该如何将其应用到我的情况中。

我的情况是客户虚拟机启动一个 Web 应用程序,可以通过导航到 URL 以本地模式访问http://192.168.xx.yy/<APPLICATION_NAME>该应用程序。基本上,我需要向世界公开该应用程序(在嵌套虚拟化模式下运行)。因此,我的问题具有双重意义:

1)在我的环境中,启用网络桥接的最佳方法(并且希望也是最简单的方法)是什么?

2)我应该吗?如果是,我究竟如何重定向端口以允许用户访问应用程序https://<FQDN of the host VM>/<APPLICATION_NAME>,最好是通过非标准端口?

答案1

您的主机本身已经是虚拟机,听起来您无法访问物理服务器或网络。根据您的托管提供商,桥接可能有效,也可能无效。


桥接先决条件

连接到虚拟机网桥需要能够获取自己的 IP 地址,并使用自己唯一的 MAC 地址。您需要咨询您的托管服务提供商,了解您的 Hyper-V 虚拟机的 MAC 地址和 IP 地址限制。

MAC 地址

特别是,如果您的托管服务提供商阻止 MAC 地址欺骗(通常是为了防止劫持其他虚拟机的网络),那么您可能无法在没有托管服务提供商的特殊支持的情况下使用桥接。

IP 地址

如果您能克服这个障碍,您的嵌套虚拟机需要能够获取 IP 地址。如果您的托管服务提供商为您分配了多个 IP 地址或 IP 地址范围,您就可以这样做。

替代方案:NAT

如果您无法满足桥接的两个先决条件,则可以设置 NAT,然后通过主机的唯一网络路由从嵌套虚拟机转发所需的端口。

端口转发有点麻烦,但绝对可行。我已经成功使用过libvirt 的说明前。


搭建桥梁

建造桥梁的多种方法,但由于您使用的是 Debian,我将为您提供一个/etc/network/interfaces在启动时实现桥接的示例配置:

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
        address 192.168.0.111
        netmask 255.255.255.0
        gateway 192.168.0.1
        metric 0
        bridge_ports eth0
        bridge_stp on
        bridge_fd 0
        bridge_maxwait 0
        dns-nameservers 8.8.8.8 8.8.4.4
iface br0 inet6 dhcp

上述配置假定从属接口是eth0并且您的主机位于192.168.0.111192.168.0.0/24网上。

理想的情况是,如果您可以配置这样的桥接器,并且嵌套的虚拟机可以自由地在该子网上使用另一个地址。

我假设您有一个私有/固定 IP 网络,因为在您的问题中,您写了“ 192.168.xx.yy”,因此要让您的嵌套虚拟机可供外界访问,剩下要做的就是将公共/浮动 IP 地址附加到该私有/固定 IP 地址。

再次强调,如果您只有一个 IP 地址和/或一个 MAC 地址可用,您可能不得不接受 NAT 和端口转发。否则,您应该能够调整此网络配置以适合您的网络并根据需要配置桥接。

相关内容