- 嵌套虚拟化允许虚拟机管理程序和虚拟机在其他虚拟机内部运行,从而最大限度地利用硬件,并促进复杂的实验室和测试。
- 启用嵌套功能之前,主机上必须安装兼容的处理器(Intel VT-x 或 AMD-V/SEV)、最新版本的 Windows 和 Hyper-V。
- 必须仔细配置网络和 MAC 地址欺骗,以确保嵌套虚拟机的稳定连接,尤其是在 IoT Edge 环境和使用 VMware ESXi 或 Azure 的场景中。
- 多层备份和资源监控是维护安全、可恢复和性能可控的嵌套环境的关键。

在现代硬件上,嵌套虚拟化已成为IT团队、开发人员和培训人员几乎不可或缺的工具。他们无需在数据中心部署大量物理服务器,即可搭建复杂的实验室、测试环境或安全场景。简而言之,它允许您在其他虚拟机内部运行虚拟机,从而保持可接受的性能并优化资源管理。
除了常见的“将一个虚拟机嵌套在另一个虚拟机中”之外,嵌套虚拟化还为灵活的 DevOps 流水线、逼真的培训环境、隔离的安全测试以及跨各种平台(从本地 Hyper-V 到 Azure 或 VMware ESXi 上的虚拟机)的 IoT 边缘部署打开了大门。然而,为了确保一切正常运行,硬件和虚拟机管理程序配置必须满足非常具体的要求。
嵌套虚拟化究竟是什么?它为什么如此重要?
嵌套虚拟化是指虚拟机能够作为其他内部虚拟机的虚拟化主机。换句话说,物理硬件上有一个顶层虚拟机管理程序(例如 Windows Server 或 Azure 本地的 Hyper-V),在其中一台虚拟机内部,我们安装 Hyper-V 或其他兼容的虚拟机管理程序来创建更多虚拟机。
以 Hyper-V 为例,嵌套虚拟化允许将 Hyper-V 角色安装在客户虚拟机中,而该客户虚拟机又运行在安装了 Hyper-V 的物理主机上。这个“中间”虚拟机将处理器的虚拟化扩展功能暴露给内部虚拟机,使内部虚拟机表现得好像更接近硬件一样,尽管实际上它们下面还有好几层。
此功能最初出现在Windows Server 2016 和 Windows 10 中,支持 Intel 处理器,此后支持范围扩展到更新版本的 Windows Server、Windows 11 以及 AMD 处理器。如今,它已成为一项成熟的功能,微软已将其集成到官方文档中,第三方解决方案也纷纷采用。
其实际价值显而易见:借助嵌套虚拟化,我们可以复制生产环境、创建完整的集群、测试高风险配置或模拟多层网络,而无需投资新的机架或预留数据中心空间。对于许多公司而言,它带来的成本节约和敏捷性足以弥补轻微的性能损失。
嵌套虚拟化的常见用例
最常见的应用场景之一是搭建复杂的测试实验室。开发和测试团队可以在单个主虚拟机内构建多层应用堆栈(数据库、中间服务、前端),并在该主虚拟机内托管所有复制生产环境所需的内部虚拟机。
它在技术培训和开发环境中也非常有用。教师可以设置一个主机虚拟机,每个学生都可以在其中创建自己的客户虚拟机、配置网络、测试服务器角色或部署容器,而无需接触公司“真实”的基础设施。所有操作都包含在一个易于销毁的沙箱环境中。
另一个典型用途是评估和测试新软件版本。管理员无需直接在物理主机上更改敏感配置,而是可以在嵌套的虚拟化虚拟机上复制该场景,并在部署到生产环境之前验证补丁、新版本或安全变更。
嵌套虚拟化在实现高级安全功能方面也发挥着关键作用,例如基于虚拟化的安全 (VBS) 或依赖于不同层级虚拟机管理程序功能的特定隔离。这使得在无需额外硬件的情况下强化某些环境成为可能。
在物联网领域,嵌套虚拟化是Azure IoT Edge for Linux on Windows场景的关键,它需要在不同的虚拟化层上结合 Windows、Linux 容器和虚拟机管理程序功能,既可以在本地进行,也可以在 VMware ESXi 或 Azure 中的虚拟机等第三方平台上进行。
嵌套虚拟化的硬件和软件要求
为了确保所有功能正常运行,首要筛选条件是兼容的硬件和最低操作系统版本。例如,在 Azure 本地环境中,需要 2411.3 或更高版本,以及配置版本为 10.0 或更高的虚拟机,从而确保支持必要的虚拟化扩展。
在处理器层面,如果您使用的是英特尔处理器,则必须在 BIOS/UEFI 中启用英特尔 VT-x 虚拟化技术。对于 AMD 架构,则需要 AMD-V 支持;对于更高级的应用场景,还必须启用安全加密虚拟化 (SEV) 技术,该技术可为虚拟机添加加密功能,并提高隔离性和底层安全性。
主机操作系统必须是最新版本的 Windows Server 或 Windows 10/11,并已正确更新至最新补丁。必须先在物理机上安装 Hyper-V,才能尝试启用嵌套功能;仅拥有兼容的 CPU 并不会自动启用此功能。
另一个关键点是虚拟机的状态。要修改处理器参数并启用虚拟化扩展,作为嵌套主机的虚拟机必须完全关闭电源,而不能处于暂停或保存状态。只有这样,Hyper-V 才允许您更改高级虚拟处理器选项。
最后,网络连接必须精心规划。嵌套虚拟机可能需要外部访问或其他层级的访问,因此建议从一开始就明确是否使用内部交换机、NAT、MAC地址欺骗或其他虚拟网络技术,以避免通信和过滤问题。
使用 PowerShell 在 Hyper-V 中启用嵌套虚拟化
在 Hyper-V 中启用嵌套虚拟化的最直接、最精细的方法是使用PowerShell cmdlet。此方法适用于 Windows Server 和兼容的客户端版本,并允许您跨多个主机或虚拟机自动执行一致的配置。
第一步是确保我们要安装 Hyper-V 作为客户机的虚拟机是 从 Hyper-V 管理器中关闭 (关闭选项)或使用 PowerShell 中的相应命令,例如 Stop-VM -Name 'NombreVM'如果处理器保持挂起或保存状态,则处理器更改将无法正确应用。
虚拟机停止后,您必须使用Set-VMProcessor cmdlet将处理器虚拟化扩展暴露给客户操作系统,并将 ExposeVirtualizationExtensions 选项设置为 true。此设置允许系统从虚拟机内部访问安装虚拟机管理程序角色所需的功能。
为了验证操作是否正确执行,我们可以使用Get-VMProcessor 命令,并结合 Select 选项检查ExposeVirtualizationExtensions 字段。这将检查目标虚拟机的虚拟处理器配置中该字段的值是否设置为 true,从而防止启动部分配置的环境。
如果在任何时候需要还原配置(例如,在诊断任务期间或不再需要嵌套虚拟机时),只需重复相同的处理器 cmdlet,但将值更改为 false,即可再次禁用对客户虚拟机的虚拟化扩展。
虚拟处理器配置完成后,可以使用Start-VM 命令或 Hyper-V 管理器启动虚拟机。然后在客户操作系统中,使用常用方法安装完整的 Hyper-V 角色,例如:服务器管理器(添加角色和功能)、DISM、PowerShell 等。此后,从管理员的角度来看,该虚拟机就如同一个独立的 Hyper-V 主机。
嵌套环境中的网络配置和 MAC 地址欺骗
处理器部分完成后,下一步是为嵌套虚拟机配置网络连接。如果我们希望内部虚拟机与其他网络、互联网或更高级别的计算机通信,则必须调整中间虚拟机虚拟适配器中的某些参数。
在 Hyper-V 中,一种常见的做法是在充当嵌套主机的虚拟机的网络适配器上启用MAC 地址欺骗。此功能允许内部虚拟机使用自己的 MAC 地址通过同一适配器发送流量,从而绕过物理主机虚拟交换机上的阻止或过滤。
可以通过 PowerShell 使用 Set-VMNetworkAdapter cmdlet 进行此调整,并将 MacAddressSpoofing 参数设置为 On,然后将其应用于虚拟机的相应网络适配器。这样可以确保来自更深层虚拟机的流量不会被顶层虚拟机管理程序丢弃。
对于更高级的配置,建议预先设计每一层的虚拟交换机和NAT实例的拓扑结构。例如,我们可以组合使用内部交换机来隔离实验环境,在各层之间配置路由规则或防火墙,并在中间主机上部署NAT,从而为多个嵌套虚拟机提供互联网访问,而无需直接暴露它们。
在使用多层虚拟化环境时,连接问题通常与MAC 地址欺骗功能被禁用、NAT 规则链设置不当或防火墙限制过严格有关。检查这些问题并重启每一层网络适配器或服务通常可以解决嵌套环境中的大多数连接问题。
使用图形界面执行相关任务
虽然嵌套虚拟化的严格激活完全由 PowerShell 控制,但在实践中,许多相关任务通过Hyper-V 管理器图形界面会更方便,尤其是在管理多个主机或想要直观地查看配置时。
典型的工作流程包括打开Hyper-V 管理器,找到目标虚拟机,并使用“关机”选项确保其已关闭。这与 PowerShell 的使用相辅相成,可防止意外启动尚未正确配置所有参数的虚拟机。
执行完用于公开虚拟化扩展的必要 cmdlet 后,我们可以返回图形环境并打开虚拟机配置窗口。从这里,可以轻松查看和修改网络适配器属性、分配的虚拟处理器数量或嵌套主机虚拟机的可用内存。
启用 MAC 地址欺骗的选项位于网络适配器的高级设置中。对于喜欢可视化操作或尚未记住所有 cmdlet 参数的管理员来说,通过图形界面启用此功能既快捷又方便。
配置完成后,日常环境管理可以通过物理主机上的 Hyper-V 控制台或在嵌套虚拟机内交替进行,使用标准工具创建新虚拟机、配置交换机、添加角色或根据每个实验室的需求拍摄快照。
Azure 本地部署和 IoT Edge 场景中的嵌套虚拟化
在 Azure 本地环境中,嵌套虚拟化遵循相同的原理,但增加了特定的版本要求,并支持AMD SEV 或安全扩展等高级功能。系统版本必须达到最低要求(2411.3 或更高版本),虚拟机必须使用兼容的配置版本(10.0 或更高版本)。
在 Windows 上使用适用于 Linux 的 Azure IoT Edge 时,支持三种嵌套虚拟化部署选项。每种选项都满足不同的基础架构需求,以及组织希望对底层环境和虚拟机管理程序保持的控制级别。
第一种方法是在本地主机上使用 Hyper-V 的 Windows 虚拟机上部署 IoT Edge 。这是最直接的方法:在该 Windows 虚拟机上启用嵌套虚拟化,然后根据微软的文档在 Windows 上安装和配置 Azure IoT Edge for Linux。
在这种情况下,确保Hyper-V 角色正确安装在本地主机(Windows Server 或 Azure 本地)上至关重要。如果主机上没有激活 Hyper-V,则来宾虚拟机将无法充当嵌套虚拟机管理程序,也无法在附加层中公开 IoT Edge 所需的功能。
当您需要在现有的 Windows 基础架构中集成 IoT 设备、Linux 容器和 Azure 服务时,这些类型的部署非常有用,可以在灵活性、性能和易于管理之间保持合理的平衡。
使用 VMware ESXi 和 Azure IoT Edge 实现嵌套虚拟化
另一个有趣的场景是,当我们想在托管于 VMware ESXi 上的 Windows 虚拟机中运行适用于 Linux 的 Azure IoT Edge 时。在这种情况下,嵌套虚拟化依赖于 VMware 管理程序的功能,而不是直接依赖于硬件上的 Hyper-V。
VMware ESXi 6.7 和 7.0 版本明确支持客户机中的硬件辅助虚拟化,从而实现 Windows 虚拟机成为 Hyper-V 主机所需的嵌套结构。VMware 在其知识库中详细记录了此功能,包括相关要求和潜在的性能注意事项。
一般流程首先是在 ESXi 主机上创建一个 Windows 虚拟机,并遵循 VMware 的标准处理器、内存、存储和网络适配器配置建议。创建完成后,关闭虚拟机以便修改其高级 CPU 设置。
在 ESXi 或 vSphere Client 界面中,选择 Windows 虚拟机,转到“编辑设置”,然后在 CPU 设置部分找到“硬件虚拟化”选项。启用“向客户操作系统公开硬件辅助虚拟化”选项,这样即使 Windows 运行在 ESXi 环境中,也能识别 VT-x/AMD-V 扩展。
保存更改并重启虚拟机后,继续在 Windows 上安装 Hyper-V 管理程序,可以在客户端版本(Windows 10/11)或 Windows Server 上安装,确保包含管理工具以及 IoT Edge 将使用的容器或服务所需的任何其他组件。
Azure虚拟机中的嵌套虚拟化
当我们把场景提升到一个更高的层次,直接在 Azure 中将虚拟机作为嵌套虚拟化主机进行操作时,平台特性就会发挥作用,尤其是在虚拟交换机和 Azure VM 使用的默认网络方面。
除非运行特定脚本以启用合适的虚拟交换机,否则Azure IoT Edge for Linux on Windows 在任何运行服务器 SKU 的 Azure VM 上均不被视为原生支持。此脚本会打开一个默认交换机,使 IoT Edge 环境能够与额外的虚拟化层正常工作。
微软官方文档描述了在 Azure 的 Windows 环境中为 Linux 创建和配置虚拟交换机的步骤,从而使容器和边缘服务的网络需求与云网络基础设施的特性保持一致。
在这些类型的部署中,检查VM SKU、存储类型以及 CPU 和 RAM 配额尤为重要,因为嵌套虚拟化会增加自身的开销,如果整个集合的大小不合适,内部 VM 可能会大量消耗资源。
尽管存在这些复杂性,但其优势是巨大的:Azure VM 可以用作IoT Edge 解决方案的测试、开发或预生产平台,其条件与之后在现场部署的物理边缘设备或工业网关上复制的条件相同。
使用专用解决方案备份嵌套的 Hyper-V 虚拟机
在设计嵌套虚拟化环境时,备份和灾难恢复策略常常被忽视。而企业级备份解决方案正能满足这一需求,它们能够妥善管理具有多个虚拟化层和多个并行运行平台的 Hyper-V 环境。
这些解决方案包括Vinchin Backup & Recovery等工具,它支持超过 15 种不同的虚拟化平台,包括 VMware、Proxmox、oVirt、OLVM、RHV、XCP-ng、XenServer、OpenStack、ZStack,当然还有 Hyper-V。这类软件专为异构基础架构而设计,在这种基础架构中,来自不同厂商的虚拟机管理程序可以共存。
永久增量备份、数据去重和压缩以及细粒度恢复等功能显著降低了存储消耗,并缩短了从关键应用程序中恢复单个机器、特定文件甚至特定对象所需的时间。
此外,计划备份策略和磁带或云归档选项有助于根据每个组织的监管或内部要求定制备份策略,在高性能阵列中保持较长的保留期,而不会增加存储成本。
基于 Web 的管理控制台极大地简化了对包含嵌套虚拟机的 Hyper-V 环境的保护:您只需选择要保护的虚拟机、选择备份存储库、定义执行策略(时间窗口、备份类型、保留期限),然后启动备份作业即可。许多此类解决方案都提供长达数周的全面试用期,以便评估其性能以及与现有基础架构的集成情况。
嵌套环境中的局限性和最佳实践
尽管嵌套虚拟化的可能性很广泛,但虚拟机管理程序本身的设计也带来了一些技术限制,应该从一开始就了解这些限制,以避免在生产或高可用性场景中出现意外情况。
一个明显的例子是使用嵌套虚拟化的虚拟机的实时迁移。目前,如果主主机上的虚拟机包含依赖于主动嵌套的客户机,则无法对主主机执行实时迁移。微软已记录了此限制,并且通常建议在这些环境中规划更新或主机迁移时采用受控关机的方式。
监控多层资源消耗需要采用综合策略。建议在顶层主机上使用Hyper-V 管理器、性能计数器和 Get-VM 等 cmdlet,同时在嵌套主机中使用类似工具,以便清晰了解负载在 CPU、内存、网络和存储之间的分布情况。
当内部虚拟机突然失去网络连接时,通常是由于防火墙规则更改、NAT 问题或某个相关适配器上的 MAC 地址欺骗设置被禁用所致。检查所有层级、验证配置并重启受影响的网络服务通常可以解决大多数此类故障。
作为一项通用的最佳实践,在部署嵌套虚拟化之前,建议明确定义环境的目标、层数、要运行的工作负载类型以及备份策略。这种初始设计将决定实验室或测试环境是否能够长期稳定运行,以及是否会演变成难以维护的复杂系统。
简而言之,只要满足 CPU 要求、系统版本和网络配置,并且辅以良好的监控和备份策略,Hyper-V 和其他平台的嵌套虚拟化就能让您从现有硬件中获得更多,并以极大的灵活性设置实验室、测试、安全或 IoT 边缘场景。