核心是让Hyper-V虚拟机(L1)运行Hyper-V、WSL2等二层虚拟化,需硬件支持VT-x/AMD-V并开启BIOS虚拟化,宿主机启用Hyper-V,虚拟机配置版本≥8.0且关机执行Set-VMProcessor -VMName "X" -ExposeVirtualizationExtensions $true,来宾系统再安装Hyper-V或WSL2并配置网络。
在 windows 环境下配置嵌套虚拟化,核心是让一台 hyper-v 虚拟机(l1)具备运行另一层虚拟化平台(如 hyper-v、wsl2 或第三方 hypervisor)的能力。这需要硬件支持、宿主机配置、虚拟机设置和来宾系统安装四步协同,缺一不可。
确认硬件与系统前提
嵌套虚拟化不是纯软件功能,依赖底层 CPU 和 Windows 版本支持:
- CPU 必须启用 VT-x(Intel)或 AMD-V(AMD),且支持 EPT(Intel)或 RVI(AMD)——进入 BIOS/UEFI 手动开启,多数默认关闭
- 物理主机需运行 Windows 10 1607+、Windows 11 或 Windows Server 2016+;Hyper-V 角色必须已启用
- 目标虚拟机(L1)操作系统需为 Windows 10 1803+、Windows 11 或 Windows Server 2016+;VM 配置版本 ≥ 8.0(Hyper-V 管理器中右键 VM → 设置 → 检查“版本”)
- 运行
egrep --color='vmx|svm' /proc/cpuinfo(WSL2 中)或在 PowerShell 中执行systeminfo | findstr "Hyper-V Requirements"可辅助验证,但最终以物理主机 BIOS + Windows 功能开启为准
启用虚拟机的嵌套虚拟化开关
该步骤必须在虚拟机处于完全关机状态(非保存状态或休眠)时操作:
- 在物理 Hyper-V 主机上,以管理员身份打开 PowerShell
- 执行命令:
Set-VMProcessor -VMName "YourVMName" -ExposeVirtualizationExtensions $true - 检查是否生效:
Get-VMProcessor -VMName "YourVMName" | fl ExposeVirtualizationExtensions,返回 True 即成功 - 注意:若 VM 已启动,此命令会报错;修改后无需重启宿主机,仅需正常启动该虚拟机即可
在来宾系统中安装并启用 Hyper-V 或 WSL2
启动虚拟机后,它就拥有了“虚拟的虚拟化能力”,接下来像在物理机上一样启用对应功能:
- 对于 Hyper-V:以管理员身份运行 PowerShell,执行
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All -NoRestart,然后重启 - 对于 WSL2:确保已安装 WSL 并设为默认版本 2(
wsl --set-default-version 2),再安装任意 Linux 发行版(如 Ubuntu)即可自动使用 WSL2 后端 - 安装完成后,可在任务管理器 → 性能 → CPU 标签页底部查看“虚拟化”是否显示“已启用”,或运行
coreinfo -v(Sysinternals 工具)验证 VT-x/EPT 是否被来宾系统识别
配置网络连通性(关键实操点)
嵌套 VM(L2)默认无法直接访问外网,需手动打通两层网络路径:
-
MAC 地址欺骗方案(推荐本地环境):在物理主机上对 L1 虚拟机的网络适配器启用欺骗:
Set-VMNetworkAdapter -VMName "YourVMName" -MacAddressSpoofing On;L1 内部创建外部虚拟交换机,并确保其绑定到物理网卡 -
NAT 方案(适合云环境或受限网络):在 L1 系统内新建内部虚拟交换机 → 创建 NAT 网络(
New-NetNat -Name NestedNAT -InternalIPInterfaceAddressPrefix 192.168.100.0/24)→ 为 L1 的内部网卡分配 IP(如 192.168.100.1)→ 将 L2 的网卡桥接到该内部交换机,并设静态 IP(如 192.168.100.10)及网关(192.168.100.1) - 无论哪种方式,都建议关闭 L1 和 L2 的防火墙临时测试连通性,避免策略拦截


















