Eseguire Hyper-V in una macchina virtuale con la virtualizzazione annidata

La virtualizzazione annidata è una funzionalità che consente di eseguire Hyper-V all'interno di una macchina virtuale Hyper-V. In altre parole con la virtualizzazione nidificata, è possibile virtualizzare l'host Hyper-V stesso. I possibili casi d'uso della virtualizzazione annidata includono l'esecuzione di un contenitore di Hyper-V in un host contenitore virtualizzato, la configurazione di un laboratorio di Hyper-V in un ambiente virtualizzato e il testing di scenari a più computer senza la necessità di singoli componenti hardware. Questo documento illustra in dettaglio prerequisiti software e hardware, passaggi della configurazione e limitazioni.

Prerequisiti

  • Un host Hyper-V che esegue Windows Server 2016 o Windows 10 (aggiornamento dell'anniversario).
  • Una macchina virtuale Hyper-V che esegue Windows Server 2016 o Windows 10 (aggiornamento dell'anniversario).
  • Una macchina virtuale Hyper-V con configurazione 8.0 o versione successiva.
  • Un processore Intel con tecnologia VT-x ed EPT.

Configurare la virtualizzazione nidificata

  1. Creare una macchina virtuale. Vedere i prerequisiti sopra per le versioni di sistema operativo e macchina virtuale necessarie.
  2. Con la macchina virtuale in stato non attivo, eseguire comando seguente nell'host Hyper-V fisico. In questo modo viene abilitata la virtualizzazione nidificata per la macchina virtuale.
Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true
  1. Avviare la macchina virtuale
  2. Installare Hyper-V all'interno della macchina virtuale, proprio come si farebbe per un server fisico. Per altre informazioni, vedere Installare Hyper-V in Windows 10.

Disabilitare la virtualizzazione nidificata

È possibile disabilitare la virtualizzazione nidificata per una macchina virtuale arrestata con il comando PowerShell seguente:

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

Ridimensionamento della memoria dinamica e della memoria di runtime

Quando Hyper-V è in esecuzione all'interno di una macchina virtuale, la macchina virtuale deve essere disattivata per regolare la quantità di memoria. Ciò significa che anche se la memoria dinamica è abilitata, la quantità di memoria non subirà fluttuazioni. Per le macchine virtuali senza la memoria dinamica abilitata, qualsiasi tentativo di modificare la quantità di memoria mentre è attivata avrà esito negativo.

Si noti che la semplice attivazione della virtualizzazione nidificata non ha alcun effetto sul ridimensionamento della memoria dinamica o della memoria di runtime. L'incompatibilità si verifica solo durante l'esecuzione di Hyper-V nella macchina virtuale.

Opzioni di rete

Sono disponibili due opzioni di rete con le macchine virtuali annidate: lo spoofing degli indirizzi MAC e la modalità NAT.

Spoofing degli indirizzi MAC

Per poter instradare i pacchetti di rete attraverso due commutatori virtuali, è necessario abilitare lo spoofing degli indirizzi MAC nel primo livello di commutatore virtuale. Tale operazione può essere eseguita con il comando di PowerShell seguente.

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

Network Address Translation

La seconda opzione si basa sulla modalità NAT (Network Address Translation). Questo approccio è adatto ai casi in cui lo spoofing degli indirizzi MAC non è possibile, ad esempio in un ambiente cloud pubblico.

In primo luogo è necessario creare un commutatore NAT virtuale nella macchina host virtuale, ovvero la VM "intermedia". Si noti che gli indirizzi IP sono soltanto esempi e possono variare a seconda degli ambienti:

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:

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. Si noti che l'IP del gateway deve puntare alla scheda NAT del passaggio precedente. È anche possibile assegnare un server DNS:

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>

App di virtualizzazione di terze parti

Le applicazioni di virtualizzazione diverse da Hyper-V non sono supportate nelle macchine virtuali Hyper-V e potrebbero non andare a buon fine. Ciò include qualsiasi software che richieda estensioni di virtualizzazione hardware.