La Nested Virtualization è una funzionalità che consente di eseguire Hyper-V all’interno di una macchina virtuale Hyper-V. Può essere utile in fase di test per configurazioni che normalmente richiedono più host, come ad esempio creazione di cluster.
Prerequisiti
-
L’host e il guest Hyper-V devono eseguire Windows 10/Windows Server 2016 anniversary update 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.
Abilitare la Nested Virtualization
-
Creare una macchina virtuale.
-
Con la macchina virtuale in stato non attivo, eseguire il seguente comando nell’host Hyper-V fisico. In questo modo viene abilitata per la macchina virtuale.
Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true
Dopodiché avviare la macchina virtuale e installare Hyper-V all’interno della macchina virtuale, proprio come si farebbe per un server fisico.
Disabilitare la Nested Virtualization
È possibile disabilitare la Nested Virtualization per una macchina virtuale arrestata con il comando PowerShell seguente:
Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $false
Opzioni di rete
Sono disponibili due opzioni di rete :
-
Spoofing degli indirizzi MAC
-
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 (L1) di commutatore virtuale. Tale operazione può essere completata 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 nested VM 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>