Exécuter Hyper-V dans une machine virtuelle avec la virtualisation imbriquée

La virtualisation imbriquée est une fonctionnalité qui vous permet d’exécuter Hyper-V à l’intérieur d’une machine virtuelle (VM) Hyper-V. Ceci est utile pour exécuter un émulateur de téléphone Visual Studio sur une machine virtuelle ou pour tester des configurations qui nécessitent généralement plusieurs hôtes.

Notes

La virtualisation imbriquée est prise en charge sur Azure et au niveau local. Toutefois, si vous utilisez un hyperviseur non-Microsoft comme KVM, Microsoft ne peut pas fournir un support de bout en bout. Vérifiez que votre fournisseur prend en charge ce scénario. Capture d’écran de la démonstration des virtualisations imbriquées en exécutant un émulateur dans un autre émulateur.

Prérequis

Processeur Intel avec la technologie VT-x et EPT

  • Hôte Hyper-V avec Windows Server 2016/Windows 10 ou version ultérieure
  • Configuration de machine virtuelle version 8.0 ou ultérieure

Processeur AMD EPYC/Ryzen ou version ultérieure

  • Hôte Hyper-V avec Windows Server 2022/Windows 11 ou version ultérieure
  • Configuration d’une machine virtuelle version 10.0 ou ultérieure

Notes

L’invité peut être n’importe quel système d’exploitation invité pris en charge par Windows. Les systèmes d’exploitation Windows plus récents prennent parfois en charge l’état d’éveil à la présence d’un environnement virtualisé (« enlightenment ») qui améliore les performances.

Configurer la virtualisation imbriquée

  1. Création d’une machine virtuelle Consultez la configuration requise ci-dessus pour les versions de système d’exploitation et les machines virtuelles.
  2. Pendant que la machine virtuelle est à l’état DÉSACTIVÉ, exécutez la commande suivante sur l’hôte Hyper-V physique. Cela permet d’activer la virtualisation imbriquée de la machine virtuelle.
Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true
  1. Démarrez la machine virtuelle.
  2. Installez Hyper-V sur la machine virtuelle, comme vous le feriez sur un serveur physique. Pour plus d’informations sur l’installation d’Hyper-V, consultez Installer Hyper-V.

Désactiver la virtualisation imbriquée

Vous pouvez désactiver la virtualisation imbriquée d’une machine virtuelle à l’arrêt à l’aide de la commande PowerShell suivante :

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

Mémoire dynamique et redimensionnement de la mémoire d’exécution

Hyper-V est en cours d’exécution dans une machine virtuelle, la machine virtuelle doit être désactivée pour ajuster sa mémoire. Cela signifie que même si la mémoire dynamique est activée, la quantité de mémoire ne varie pas. Pour les machines virtuelles dont la mémoire dynamique n’est pas activée, toute tentative d’ajustement de la quantité de mémoire en fonctionnement échouera.

Notez que la simple activation de la virtualisation imbriquée n’a aucun effet sur la mémoire dynamique ou le redimensionnement de la mémoire runtime. L’incompatibilité se produit uniquement lorsque Hyper-V s’exécute dans la machine virtuelle Hyper-V.

Options de mise en réseau

Il existe deux options pour la mise en réseau des machines virtuelles imbriquées :

  1. Usurpation des adresses MAC
  2. Mise en réseau NAT

Usurpation des adresses MAC

Pour que les paquets réseau puissent être acheminés via deux commutateurs virtuels, l'usurpation des adresses MAC doit être activée sur le premier niveau (L1) du commutateur virtuel. Pour cela, exécutez la commande PowerShell suivante.

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

Traduction d’adresses réseau (NAT)

La deuxième option s’appuie sur la traduction d’adresses réseau (NAT). Cette approche est idéale pour les cas où l’usurpation des adresses MAC n’est pas possible, comme dans un environnement de cloud public.

Tout d’abord, un commutateur NAT virtuel doit être créé dans la machine virtuelle hôte (machine virtuelle « intermédiaire »). Notez que les adresses IP ne sont qu’un exemple et peuvent varier entre les environnements :

New-VMSwitch -Name VmNAT -SwitchType Internal
New-NetNat –Name LocalNAT –InternalIPInterfaceAddressPrefix “192.168.100.0/24”

Affectez ensuite une adresse IP à la carte réseau :

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

Une adresse IP et une passerelle doivent être affectées à chaque machine virtuelle imbriquée. Notez que l’adresse IP de la passerelle doit pointer vers la carte NAT de l’étape précédente. Vous pouvez également affecter un serveur DNS :

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

Fonctionnement de la virtualisation imbriquée

Les processeurs modernes incluent des fonctionnalités matérielles qui rendent la virtualisation plus rapide et plus sûre. Hyper-V s’appuie sur ces extensions de processeur pour exécuter des machines virtuelles (par ex. Intel VT-x et AMD-V). En règle générale, une fois que Hyper-V démarre, il empêche les autres logiciels d’utiliser ces fonctionnalités de processeur. Cela empêche les machines virtuelles invitées d’exécuter Hyper-V.

Grâce à la virtualisation imbriquée, cette prise en charge matérielle est disponible pour les machines virtuelles invitées.

Le diagramme ci-dessous illustre Hyper-V sans imbrication. L’hyperviseur Hyper-V prend le contrôle total des fonctionnalités de virtualisation matérielle (flèche orange) et ne les expose pas au système d’exploitation invité.

Diagramme des niveaux d’Hyper-V avec la virtualisation imbriquée désactivée.

Par contre, le schéma au-dessous illustre Hyper-V avec la virtualisation imbriquée activée. Dans ce cas, Hyper-V expose les extensions de virtualisation matérielle à ses machines virtuelles. Quand l’imbrication est activée, une machine virtuelle invitée peut installer son propre hyperviseur et exécuter ses propres machines virtuelles invitées.

Diagramme des niveaux d’Hyper V avec la virtualisation imbriquée activée

Applications de virtualisation tierces

Les applications de virtualisation autres que Hyper-V ne sont pas prises en charge dans les machines virtuelles Hyper-V, et risquent d’échouer. Cela inclut tout logiciel nécessitant des extensions de virtualisation matérielle.