Comment installer Hyper-V dans une VM Hyper-V ?
Sommaire
I. Présentation
Aujourd'hui, nous allons parler de nested virtualization, en français virtualisation imbriquée avec Hyper-V. Nous allons voir comment installer le rôle Hyper-V au sein d'une machine virtuelle qui elle-même tourne sur un Hyper-V. Cette configuration est particulièrement intéressante pour tester des configurations qui nécessitent en temps normal plusieurs hôtes physiques.
Le fait d'exposer les fonctionnalités de virtualisation de l'hôte physique au sein d'une VM et effectuer de la virtualisation imbriquée, à un autre intérêt que celui d'installer Hyper-V. C'est également nécessaire pour utiliser Windows Sandbox ou Application Guard sur un environnement VDI (virtualisation de postes de travail).
Pour que ce soit possible, vous devez avoir une VM qui tourne au minimum sur Windows Server 2016 ou Windows 10 Anniversary Update. Il en est de même pour l'hôte physique qui a le rôle Hyper-V principal.
Tutoriel disponible au format vidéo :
II. Activer la virtualisation imbriquée sur une VM
L'activation de cette fonctionnalité avancée s'effectue à l'aide de PowerShell. En fait, il faut activer la fonctionnalité ExposeVirtualizationExtensions. Si besoin vous pouvez lister vos VMs en PowerShell pour récupérer le nom :
Get-VM
La machine virtuelle ciblée doit être éteinte avant d'exécuter la commande ci-dessous. Dans cette commande, changez seulement le nom de la VM, pour ma part je cible la VM "Windows-10".
Set-VMProcessor -VMName "Windows-10" -ExposeVirtualizationExtensions $true
S'il n'y a pas de message d'erreur, c'est tout bon ! Si vous souhaitez désactiver cette fonctionnalité, il suffit de rebasculer ExposeVirtualizationExtensions sur $false.
III. Installer Hyper-V sur la VM Hyper-V
La VM peut-être démarrée... Ce qui va nous permettre d'installer Hyper-V dans la VM. Je vous propose de le faire en PowerShell pour continuer sur notre lancée ! En tant qu'administrateur, exécutez cette commande :
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
À la fin de l'installation, il faut redémarrer en indiquant "Y" puis Entrée. Il n'y a pas de message d'erreur, c'est plutôt bon signe ?
Le Gestionnaire Hyper-V est bien disponible et le service en cours d'exécution sur ma VM : la virtualisation imbriquée est en place !
IV. Virtualisation imbriquée et réseau virtuel
Pour terminer ce tutoriel, intéressons-nous à la gestion du réseau au sein d'une VM virtualisée au sein d'une autre VM. Effectivement, c'est bien d'avoir le rôle Hyper-V en mode imbriqué, mais le but c'est quand même que les VMs au sein de cet hôte Hyper-V aient du réseau.
Pour cela, il y a deux possibilités :
- Connexion au réseau virtuel de type "NAT"
- L'usurpation d'adresse MAC (MAC spoofing)
A. Connexion réseau grâce au NAT
Sur Windows 10, Hyper-V est livré avec un commutateur virtuel qui se nomme "Default Switch" et qui fonctionne déjà en mode NAT. Si vous êtes sur Windows 10 pour l'hôte Hyper-V principal, vous pouvez l'utiliser directement ?
Un switch virtuel "NAT" doit être créé sur la VM qui tourne sur l'hôte Hyper-V physique. Pour ma part, la VM "Windows-10". On va définir également un réseau IP pour notre réseau NAT, par exemple "192.168.100.0/24" : s'il n'est pas disponible chez vous, utilisez autre chose.
New-VMSwitch -Name NAT -SwitchType Internal New-NetNat –Name LocalNAT –InternalIPInterfaceAddressPrefix "192.168.100.0/24"
Ensuite, on va attacher une adresse IP à l'adaptateur virtuel qui est associé à notre vSwitch "NAT" :
Get-NetAdapter "vEthernet (NAT)" | New-NetIPAddress -IPAddress 192.168.100.1 -AddressFamily IPv4 -PrefixLength 24
Enfin, chaque VM de l'hôte Hyper-V virtuel (deuxième niveau) doit avoir une adresse IP sur ce réseau NAT. La passerelle doit être celle définie sur l'adaptateur du switch virtuel "NAT", à savoir "192.168.100.1". Pour la VM, il suffit d'utiliser une VM disponible sur ce réseau.
Get-NetAdapter "Ethernet" | New-NetIPAddress -IPAddress 192.168.100.2 -DefaultGateway 192.168.100.1 -AddressFamily IPv4 -PrefixLength 24
Sans oublier de définir un serveur DNS. Effectuez la commande suivante pour récupérer le numéro d'index (ifIndex) de la carte "Ethernet" de votre VM :
Get-NetAdapter
Ensuite, modifiez le DNS en indiquant la bonne valeur pour IfIndex, sans oublier de modifier aussi les valeurs pour les DNS. Dans cet exemple, 8.8.8.8 et 1.1.1.1.
Set-DnsClientServerAddress -InterfaceIndex 1 -ServerAddresses ("8.8.8.8","1.1.1.1")
B. Connexion réseau grâce à l'usurpation de l'adresse MAC
Puisque la VM doit traverser deux switchs virtuels, nous allons devoir utiliser l'usurpation d'adresse MAC pour que la VM de deuxième niveau puisse utiliser sa propre MAC comme source. Cela signifie que la configuration est à réaliser sur la carte réseau de la VM Hyper-V (premier niveau), c'est-à-dire celle qui est gérée par votre hôte physique. Dans mon cas, il s'agit de la VM "Windows-10".
Get-VMNetworkAdapter -VMName "Windows-10" | Set-VMNetworkAdapter -MacAddressSpoofing On
À partir de l'interface graphique d'Hyper-V, on peut faire la même chose en accédant aux paramètres de la VM. Ensuite, il faut cliquer sur le "+" au niveau de "Carte réseau", puis sur "Fonctionnalités avancées". Enfin, cochez l'option "Activer l'usurpation d'adresse MAC".
La VM de deuxième niveau (gérée par l'Hyper-V virtualisé) doit être connecté à un switch virtuel externe pour accéder directement au réseau local de votre hôte physique et traverser les deux couches.
Amusez-vous bien !
Ne fonctionne pas sur un AMD ryzen 7 2700??
Salut l’IT-connect je souhait avoir l’article sous format pdf et video merci d’avance!
bonjour, existe il une astuce pour faire de la virtualisation imbriquée avec un amd ryzen 9 3900x svp ?
Bonjour,
Merci pour le tuto, mais peut on installer la fonctionnalité Hyper-v sur une Vm serveur 2012 avec ses outils intégrés : Outils d’administration, outils d’admin avec interface utilisateur etc… ? Ok trouvé : Install-WindowsFeature -Name Hyper-V -ComputerName -IncludeManagementTools -Restart
Si vous êtes connecté localement au serveur, exécutez la commande sans -ComputerName .