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 (VM) Hyper-V. 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.

Prerequisiti

  • L'host e il guest Hyper-V devono eseguire entrambi l'Aggiornamento dell'anniversario di Windows 10/Windows Server 2016 o versioni successive.
  • Configurazione della macchina virtuale 8.0 o versione successiva.
  • Un processore Intel con tecnologia VT-x ed EPT, l'annidamento è attualmente solo per Intel.
  • Esistono alcune differenze con le reti virtuali per le macchine virtuali di secondo livello. Vedi "Reti per macchine virtuali annidate".

Configurare la virtualizzazione annidata

  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:

  1. Spoofing degli indirizzi MAC
  2. Reti 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 (NAT)

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>

Come funziona la virtualizzazione annidata

I processori moderni includono funzionalità hardware che rendono la virtualizzazione più veloce e sicura. Hyper-V si basa su queste estensioni del processore per eseguire le macchine virtuali (ad esempio Intel VT-x e AMD-V). In genere una volta avviato, Hyper-V impedisce ad altri software di utilizzare queste funzionalità del processore. Pertanto le macchine virtuali guest non possono eseguire eseguire Hyper-V.

La virtualizzazione annidata rende questo supporto hardware disponibile per le macchine virtuali guest.

Il diagramma seguente mostra Hyper-V senza annidamento. L'hypervisor Hyper-V assume il controllo completo delle funzionalità di virtualizzazione hardware (freccia arancione) e non le espone al sistema operativo guest.

Il diagramma seguente mostra Hyper-V con la virtualizzazione annidata abilitata. In questo caso, Hyper-V espone le estensioni di virtualizzazione hardware alle macchine virtuali. Se la funzione di annidamento è abilitata, una macchina virtuale guest può installare un hypervisor ed eseguire macchine virtuali guest.

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.