Eseguire Hyper-V in una macchina virtuale con la virtualizzazione annidataRun Hyper-V in a Virtual Machine with Nested Virtualization

La virtualizzazione annidata è una funzionalità che consente di eseguire Hyper-V all'interno di una macchina virtuale (VM) Hyper-V.Nested virtualization is a feature that allows you to run Hyper-V inside of a Hyper-V virtual machine (VM). Ciò è utile per l'esecuzione di un emulatore di telefono di Visual Studio in una macchina virtuale o per il test di configurazioni che normalmente richiedono più host.This is helpful for running a Visual Studio phone emulator in a virtual machine, or testing configurations that ordinarily require several hosts.

PrerequisitiPrerequisites

  • L'host e il guest Hyper-V devono eseguire entrambi l'Aggiornamento dell'anniversario di Windows 10/Windows Server 2016 o versioni successive.The Hyper-V host and guest must both be Windows Server 2016/Windows 10 Anniversary Update or later.
  • Configurazione della macchina virtuale 8.0 o versione successiva.VM configuration version 8.0 or greater.
  • Un processore Intel con tecnologia VT-x ed EPT, l'annidamento è attualmente solo per Intel.An Intel processor with VT-x and EPT technology -- nesting is currently Intel-only.
  • Esistono alcune differenze con le reti virtuali per le macchine virtuali di secondo livello.There are some differences with virtual networking for second-level virtual machines. Vedi "Reti per macchine virtuali annidate".See "Nested Virtual Machine Networking".

Configurare la virtualizzazione annidataConfigure Nested Virtualization

  1. Creare una macchina virtuale.Create a virtual machine. Vedere i prerequisiti sopra per le versioni di sistema operativo e macchina virtuale necessarie.See the prerequisites above for the required OS and VM versions.
  2. Con la macchina virtuale in stato non attivo, eseguire comando seguente nell'host Hyper-V fisico.While the virtual machine is in the OFF state, run the following command on the physical Hyper-V host. In questo modo viene abilitata la virtualizzazione nidificata per la macchina virtuale.This enables nested virtualization for the virtual machine.
Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true
  1. Avviare la macchina virtualeStart the virtual machine.
  2. Installare Hyper-V all'interno della macchina virtuale, proprio come si farebbe per un server fisico.Install Hyper-V within the virtual machine, just like you would for a physical server. Per altre informazioni, vedere Installare Hyper-V in Windows 10.For more information on installing Hyper-V see, Install Hyper-V.

Disabilitare la virtualizzazione nidificataDisable Nested Virtualization

È possibile disabilitare la virtualizzazione nidificata per una macchina virtuale arrestata con il comando PowerShell seguente:You can disable nested virtualization for a stopped virtual machine using the following PowerShell command:

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

Ridimensionamento della memoria dinamica e della memoria di runtimeDynamic Memory and Runtime Memory Resize

Quando Hyper-V è in esecuzione all'interno di una macchina virtuale, la macchina virtuale deve essere disattivata per regolare la quantità di memoria.When Hyper-V is running inside a virtual machine, the virtual machine must be turned off to adjust its memory. Ciò significa che anche se la memoria dinamica è abilitata, la quantità di memoria non subirà fluttuazioni.This means that even if dynamic memory is enabled, the amount of memory will not fluctuate. Per le macchine virtuali senza la memoria dinamica abilitata, qualsiasi tentativo di modificare la quantità di memoria mentre è attivata avrà esito negativo.For virtual machines without dynamic memory enabled, any attempt to adjust the amount of memory while it's on will fail.

Si noti che la semplice attivazione della virtualizzazione nidificata non ha alcun effetto sul ridimensionamento della memoria dinamica o della memoria di runtime.Note that simply enabling nested virtualization will have no effect on dynamic memory or runtime memory resize. L'incompatibilità si verifica solo durante l'esecuzione di Hyper-V nella macchina virtuale.The incompatibility only occurs while Hyper-V is running in the VM.

Opzioni di reteNetworking Options

Sono disponibili due opzioni di rete con le macchine virtuali annidate:There are two options for networking with nested virtual machines:

  1. Spoofing degli indirizzi MACMAC address spoofing
  2. Reti NATNAT networking

Spoofing degli indirizzi MACMAC Address Spoofing

Per poter instradare i pacchetti di rete attraverso due switch virtuali, è necessario abilitare lo spoofing degli indirizzi MAC nel primo livello (L1) di switch virtuale.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. Tale operazione può essere eseguita con il comando di PowerShell seguente.This is completed with the following PowerShell command.

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

Network Address Translation (NAT)Network Address Translation (NAT)

La seconda opzione si basa sulla modalità NAT (Network Address Translation).The second option relies on network address translation (NAT). Questo approccio è adatto ai casi in cui lo spoofing degli indirizzi MAC non è possibile, ad esempio in un ambiente cloud pubblico.This approach is best suited for cases where MAC address spoofing is not possible, like in a public cloud environment.

In primo luogo è necessario creare un commutatore NAT virtuale nella macchina host virtuale, ovvero la VM "intermedia".First, a virtual NAT switch must be created in the host virtual machine (the "middle" VM). Si noti che gli indirizzi IP sono soltanto esempi e possono variare a seconda degli ambienti: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”

Successivamente occorre assegnare un indirizzo IP alla scheda di rete:Next, assign an IP address to the net adapter:

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

A ogni macchina virtuale annidata deve essere assegnato un indirizzo IP e un gateway.Each nested virtual machine must have an IP address and gateway assigned to it. Si noti che l'IP del gateway deve puntare alla scheda NAT del passaggio precedente.Note that the gateway IP must point to the NAT adapter from the previous step. È anche possibile assegnare un server 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>

Come funziona la virtualizzazione annidataHow nested virtualization works

I processori moderni includono funzionalità hardware che rendono la virtualizzazione più veloce e sicura.Modern processors include hardware features that make virtualization faster and more secure. Hyper-V si basa su queste estensioni del processore per eseguire le macchine virtuali (ad esempio Intel VT-x e AMD-V).Hyper-V relies on these processor extensions to run virtual machines (e.g. Intel VT-x and AMD-V). In genere una volta avviato, Hyper-V impedisce ad altri software di utilizzare queste funzionalità del processore.Typically, once Hyper-V starts, it prevents other software from using these processor capabilities. Pertanto le macchine virtuali guest non possono eseguire eseguire Hyper-V.This prevents guest virtual machines from running Hyper-V.

La virtualizzazione annidata rende questo supporto hardware disponibile per le macchine virtuali guest.Nested virtualization makes this hardware support available to guest virtual machines.

Il diagramma seguente mostra Hyper-V senza annidamento.The diagram below shows Hyper-V without nesting. L'hypervisor Hyper-V assume il controllo completo delle funzionalità di virtualizzazione hardware (freccia arancione) e non le espone al sistema operativo guest.The Hyper-V hypervisor takes full control of the hardware virtualization capabilities (orange arrow), and does not expose them to the guest operating system.

Il diagramma seguente mostra Hyper-V con la virtualizzazione annidata abilitata.In contrast, the diagram below shows Hyper-V with nested virtualization enabled. In questo caso, Hyper-V espone le estensioni di virtualizzazione hardware alle macchine virtuali.In this case, Hyper-V exposes the hardware virtualization extensions to its virtual machines. Se la funzione di annidamento è abilitata, una macchina virtuale guest può installare un hypervisor ed eseguire macchine virtuali guest.With nesting enabled, a guest virtual machine can install its own hypervisor and run its own guest VMs.

App di virtualizzazione di terze parti3rd Party Virtualization Apps

Le applicazioni di virtualizzazione diverse da Hyper-V non sono supportate nelle macchine virtuali Hyper-V e potrebbero non andare a buon fine.Virtualization applications other than Hyper-V are not supported in Hyper-V virtual machines, and are likely to fail. Ciò include qualsiasi software che richieda estensioni di virtualizzazione hardware.This includes any software that requires hardware virtualization extensions.