Ejecución de Hyper-V en una máquina virtual con la virtualización anidada

La virtualización anidada es una característica que te permite ejecutar Hyper-V dentro de una máquina virtual (VM) de Hyper-V. Esto es útil para ejecutar un emulador de teléfono de Visual Studio en una máquina virtual o probar configuraciones que normalmente requieren varios hosts.

Nota:

La virtualización anidada se admite tanto en Azure como en el entorno local. Sin embargo, si usa un hipervisor que no es de Microsoft, como KVM, Microsoft no puede proporcionar soporte técnico integral. Asegúrese de que el proveedor admite este escenario. Captura de pantalla de la demostración de virtualizaciones anidadas mediante la ejecución de un emulador en otro emulador.

Requisitos previos

Procesador Intel con tecnología VT-x y EPT

  • El host de Hyper-V debe ser Windows Server 2016/Windows 10 o superior
  • Versión de configuración de VM 8.0 o superior

Procesador AMD EPYC/Ryzen o posterior

  • El host de Hyper-V debe ser Windows Server 2022/Windows 11 o superior
  • Versión 10.0 o superior de configuración de VM

Nota

El invitado puede ser cualquier sistema operativo invitado Windows compatible. Los sistemas operativos Windows más recientes pueden admitir aclaraciones que mejoren el rendimiento.

Configurar la virtualización anidada

  1. Cree una máquina virtual. Vea los requisitos previos anteriores para las versiones requeridas de máquina virtual y sistema operativo.
  2. Mientras la máquina virtual esté con el estado desactivado, ejecute el siguiente comando en el host físico de Hyper-V. Esto permite la virtualización anidada de la máquina virtual.
Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true
  1. Inicie la máquina virtual.
  2. Instale Hyper-V en la máquina virtual, como lo haría en un servidor físico. Para obtener más información sobre la instalación de Hyper-V, consulte Instalar Hyper-V.

Deshabilitar la virtualización anidada

Puede deshabilitar la virtualización anidada para una máquina virtual detenida mediante el siguiente comando de PowerShell:

Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $false

Cambio de tamaño de memoria en tiempo de ejecución y memoria dinámica

Cuando Hyper-V se está ejecutando en una máquina virtual, esta debe desactivarse para ajustar su memoria. Esto significa que, aunque la memoria dinámica esté habilitada, la cantidad de memoria no fluctuará. Para las máquinas virtuales sin memoria dinámica habilitada, cualquier intento que se produzca para ajustar la cantidad de memoria mientras esté activada provocará un error.

Tenga en cuenta que habilitar simplemente la virtualización anidada no tendrá ningún efecto en la memoria dinámica ni en el cambio de tamaño de la memoria en tiempo de ejecución. La incompatibilidad solo se produce mientras Hyper-V se está ejecutando en la VM.

Opciones de red

Hay dos opciones para las redes con las máquinas virtuales anidadas:

  1. Suplantación de direcciones MAC
  2. Redes NAT

Suplantación de direcciones MAC

Para que los paquetes de red se enruten a través de dos conmutadores virtuales, debe habilitarse la suplantación de direcciones MAC en el primer nivel (L1) de conmutador virtual. Esto se completa con el siguiente comando de PowerShell.

Get-VMNetworkAdapter -VMName <VMName> | Set-VMNetworkAdapter -MacAddressSpoofing On

Traducción de direcciones de red (NAT)

La segunda opción se basa en la traducción de direcciones de red (NAT). Este enfoque es más adecuado para aquellos casos en donde no es posible la suplantación de direcciones MAC, como en un entorno de nube pública.

En primer lugar, debe crearse un conmutador virtual de NAT en la máquina virtual host (la máquina virtual "central"). Tenga en cuenta que las direcciones IP son solo un ejemplo y varían en los distintos entornos:

New-VMSwitch -Name VmNAT -SwitchType Internal
New-NetNat –Name LocalNAT –InternalIPInterfaceAddressPrefix “192.168.100.0/24”

Después, asigne una dirección IP al adaptador de red:

Get-NetAdapter "vEthernet (VmNat)" | New-NetIPAddress -IPAddress 192.168.100.1 -AddressFamily IPv4 -PrefixLength 24

Cada máquina virtual anidada debe tener una dirección IP y una puerta de enlace asignadas. Tenga en cuenta que la dirección IP de la puerta de enlace debe apuntar al adaptador de NAT en el paso anterior. También puede asignar un servidor DNS:

Get-NetAdapter "vEthernet (VmNat)" | New-NetIPAddress -IPAddress 192.168.100.2 -DefaultGateway 192.168.100.1 -AddressFamily IPv4 -PrefixLength 24
Netsh interface ip add dnsserver “vEthernet (VmNat)” address=<my DNS server>

Cómo funciona la virtualización anidada

Los procesadores modernos incluyen características de hardware que hacen que la virtualización sea más rápida y segura. Hyper-V se basa en estas extensiones de procesador para ejecutar máquinas virtuales (por ejemplo, Intel VT-x y AMD-V). Por lo general, una vez que se inicie Hyper-V, esto impide que otro software use estas funcionalidades del procesador. Esto impide que las máquinas virtuales invitadas se ejecuten en Hyper-V.

La virtualización anidada hace que la compatibilidad de este hardware esté disponible para las máquinas virtuales invitadas.

En el diagrama siguiente se muestra Hyper-V sin anidamiento. El hipervisor de Hyper-V toma el control completo de las funcionalidades de virtualización de hardware (flecha naranja) y no las expone al sistema operativo invitado.

Diagrama de los niveles de Hyper V con virtualización anidada deshabilitada.

En cambio, en el diagrama siguiente se muestra Hyper-V con la virtualización anidada habilitada. En este caso, Hyper-V expone las extensiones de virtualización de hardware a sus máquinas virtuales. Con el anidamiento habilitado, una máquina virtual invitada puede instalar su propio hipervisor y ejecutar sus propias máquinas virtuales invitadas.

Diagrama de los niveles de Hyper V con virtualización anidada habilitada

Aplicaciones de virtualización de terceros

Las aplicaciones de virtualización que no sean Hyper-V no se admiten en las máquinas virtuales de Hyper-V y suelen producir errores. Esto incluye cualquier software que requiera extensiones de virtualización de hardware.