Ejecución de Hyper-V en una máquina virtual con la virtualización anidadaRun Hyper-V in a Virtual Machine with Nested Virtualization

La virtualización anidada es una característica que te permite ejecutar Hyper-V dentro de una máquina virtual (VM) de Hyper-V.Nested virtualization is a feature that allows you to run Hyper-V inside of a Hyper-V virtual machine (VM). 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.This is helpful for running a Visual Studio phone emulator in a virtual machine, or testing configurations that ordinarily require several hosts.

Requisitos previosPrerequisites

  • El host de Hyper-V y el invitado deben tener la Actualización de aniversario de Windows 10/Windows Server 2016 o posterior.The Hyper-V host and guest must both be Windows Server 2016/Windows 10 Anniversary Update or later.
  • Versión de configuración de máquina virtual 8.0 o superior.VM configuration version 8.0 or greater.
  • Un procesador Intel con tecnología VT-x y EPT: el anidamiento es actualmente solo para Intel.An Intel processor with VT-x and EPT technology -- nesting is currently Intel-only.
  • Existen algunas diferencias con redes virtuales para máquinas virtuales de segundo nivel.There are some differences with virtual networking for second-level virtual machines. Consulta "Redes de máquinas virtuales anidadas".See "Nested Virtual Machine Networking".

Configurar la virtualización anidadaConfigure Nested Virtualization

  1. Cree una máquina virtual.Create a virtual machine. Vea los requisitos previos anteriores para las versiones requeridas de máquina virtual y sistema operativo.See the prerequisites above for the required OS and VM versions.
  2. Mientras la máquina virtual esté con el estado desactivado, ejecute el siguiente comando en el host físico de Hyper-V.While the virtual machine is in the OFF state, run the following command on the physical Hyper-V host. Esto permite la virtualización anidada de la máquina virtual.This enables nested virtualization for the virtual machine.
Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true
  1. Inicie la máquina virtual.Start the virtual machine.
  2. Instale Hyper-V en la máquina virtual, como lo haría en un servidor físico.Install Hyper-V within the virtual machine, just like you would for a physical server. Para obtener más información sobre la instalación de Hyper-V, consulte Instalar Hyper-V.For more information on installing Hyper-V see, Install Hyper-V.

Deshabilitar la virtualización anidadaDisable Nested Virtualization

Puede deshabilitar la virtualización anidada para una máquina virtual detenida mediante el siguiente comando de PowerShell:You can disable nested virtualization for a stopped virtual machine using the following PowerShell command:

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

Cambio de tamaño de memoria en tiempo de ejecución y memoria dinámicaDynamic Memory and Runtime Memory Resize

Cuando Hyper-V se está ejecutando en una máquina virtual, esta debe desactivarse para ajustar su memoria.When Hyper-V is running inside a virtual machine, the virtual machine must be turned off to adjust its memory. Esto significa que, aunque la memoria dinámica esté habilitada, la cantidad de memoria no fluctuará.This means that even if dynamic memory is enabled, the amount of memory will not fluctuate. 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.For virtual machines without dynamic memory enabled, any attempt to adjust the amount of memory while it's on will fail.

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.Note that simply enabling nested virtualization will have no effect on dynamic memory or runtime memory resize. La incompatibilidad solo se produce mientras Hyper-V se está ejecutando en la VM.The incompatibility only occurs while Hyper-V is running in the VM.

Opciones de redNetworking Options

Hay dos opciones para las redes con las máquinas virtuales anidadas:There are two options for networking with nested virtual machines:

  1. Suplantación de direcciones MACMAC address spoofing
  2. Redes NATNAT networking

Suplantación de direcciones MACMAC Address Spoofing

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.In order for network packets to be routed through two virtual switches, MAC address spoofing must be enabled on the first (L1) level of virtual switch. Esto se completa con el siguiente comando de PowerShell.This is completed with the following PowerShell command.

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

Traducción de direcciones de red (NAT)Network Address Translation (NAT)

La segunda opción se basa en la traducción de direcciones de red (NAT).The second option relies on network address translation (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.This approach is best suited for cases where MAC address spoofing is not possible, like in a public cloud environment.

En primer lugar, debe crearse un conmutador virtual de NAT en la máquina virtual host (la máquina virtual "central").First, a virtual NAT switch must be created in the host virtual machine (the "middle" VM). Tenga en cuenta que las direcciones IP son solo un ejemplo y varían en los distintos entornos:Note that the IP addresses are just an example, and will vary across environments:

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:Next, assign an IP address to the net adapter:

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.Each nested virtual machine must have an IP address and gateway assigned to it. Tenga en cuenta que la dirección IP de la puerta de enlace debe apuntar al adaptador de NAT en el paso anterior.Note that the gateway IP must point to the NAT adapter from the previous step. También puedes asignar un servidor DNS:You may also want to assign a DNS server:

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

Cómo funciona la virtualización anidadaHow nested virtualization works

Los procesadores modernos incluyen características de hardware que hacen que la virtualización sea más rápida y segura.Modern processors include hardware features that make virtualization faster and more secure. Hyper-V se basa en estas extensiones de procesador para ejecutar máquinas virtuales (por ejemplo, Intel VT-x y AMD-V).Hyper-V relies on these processor extensions to run virtual machines (e.g. Intel VT-x and AMD-V). Por lo general, una vez que se inicie Hyper-V, esto impide que otro software use estas funcionalidades del procesador.Typically, once Hyper-V starts, it prevents other software from using these processor capabilities. Esto impide que las máquinas virtuales invitadas se ejecuten en Hyper-V.This prevents guest virtual machines from running Hyper-V.

La virtualización anidada hace que la compatibilidad de este hardware esté disponible para las máquinas virtuales invitadas.Nested virtualization makes this hardware support available to guest virtual machines.

En el diagrama siguiente se muestra Hyper-V sin anidamiento.The diagram below shows Hyper-V without nesting. 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.The Hyper-V hypervisor takes full control of the hardware virtualization capabilities (orange arrow), and does not expose them to the guest operating system.

En cambio, en el diagrama siguiente se muestra Hyper-V con la virtualización anidada habilitada.In contrast, the diagram below shows Hyper-V with nested virtualization enabled. En este caso, Hyper-V expone las extensiones de virtualización de hardware a sus máquinas virtuales.In this case, Hyper-V exposes the hardware virtualization extensions to its virtual machines. Con el anidamiento habilitado, una máquina virtual invitada puede instalar su propio hipervisor y ejecutar su propia máquina virtual invitada.With nesting enabled, a guest virtual machine can install its own hypervisor and run its own guest VMs.

Aplicaciones de virtualización de terceros3rd Party Virtualization Apps

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.Virtualization applications other than Hyper-V are not supported in Hyper-V virtual machines, and are likely to fail. Esto incluye cualquier software que requiera extensiones de virtualización de hardware.This includes any software that requires hardware virtualization extensions.