Nested Virtualization: Hyper-V in einer Hyper-V-VM installieren

    Nested VirtualizationIn Windows 10 und Server 2016 kann man Hyper-V in einer virtu­ellen Maschine instal­lieren und so mehrere virtuelle Hosts erzeugen. Nested Virtua­lization erfreut sich großer Beliebt­heit in Lab-Umge­bungen und bildet auch die tech­nische Grund­lage für Hyper-V Container in Server 2016.

    Grundsätzlich ist die Möglichkeit zum Verschachteln virtueller Maschinen keine neue Erfindung. VMware bietet dieses Feature schon lange, und zwar sowohl in der Workstation als auch in ESXi. Doch Microsoft zieht vor allem aufgrund seiner Container-Technologie in Windows Server 2016 nach, wo die Nested Virtualization stärker isolierte Container auf Basis des Microkernel-Hypervisors ermöglicht.

    Container in einer virtuellen Maschine versus noch stärker isoliertere Hyper-V-Container.

    Voraussetzungen und Einschränkungen

    Leichtgewichtige Hyper-V-Container sind jedoch nicht das einzige Einsatzszenario für diese Technik, sie dient auch häufig dem Aufbau eines Testlabors. Dort kann man damit beispielsweise einen Hyper-V Cluster auf einem einzigen Rechner einrichten. In diesem Artikel konfiguriere ich die verschachtelte virtuelle Ebene für eine Testumgebung auf Basis von Windows 10 Hyper-V.

    Systemanforderungen an die CPU prüfen mit Coreinfo

    Bei der Hardware setzt die Installation von Hyper-V in einer VM einen Intel Prozessor mit Intel-VT-X -und EPT-Technologie (SLAT, Second Level Address Translation) voraus. Ob diese Bedingung erfüllt ist, lässt sich mit Coreinfo oder auch CPU-Z prüfen. Der Screenshot zeigt die CPU eines Surface Pro als Beispiel, welches aktuell nicht dem Labor dient. Der Hypervisor ist hier nicht präsent und somit werden die Virtualisierungsfähigkeiten der CPU an coreinfo kommuniziert. Als Einschränkung für einen virtualisierten Host gilt außerdem, dass dieser nicht mit einer Live Migration verschoben werden kann. Zudem konnten bislang keine Snapshots der virtuellen Computer erzeugt werden, in denen Hyper-V läuft. Dies ist mit VM-Version 8.0 möglich.

    Basis für Nested Virtualization

    Zuerst richte ich Hyper-V "ganz normal" direkt auf der Hardware ein und erstelle wie üblich auf dieser Ebene virtuelle Maschinen. In diesen VMs wird wiederum ein Hypervisor-Layer eingezogen, um darüber erneut VMs platzieren zu können. Basis-OS für mein Labor ist ein Windows 10 Pro Build 14393, in dem Hyper-V über die System­steuerung unter Programme und Features => Windows-Features aktivieren hinzugefügt wird.

    Aktivierung von Hyper-V in Windows 10

    Möchte man den Hypervisor alternativ mit PowerShell aktivieren, kann das mit diesem Aufruf erledigt werden:

    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All -All

    Aktivieren der Nested Virtualization

    Nachdem Hyper-V in Windows 10 installiert wurde, öffne ich nach dem erforderlichen Neustart über Ausführen => virtmgmt.msc den Hyper-V Manager. Dort erstelle ich mit dem Wizard einen neuen virtuellen Computer ohne dynamischen, aber mit genügend statischem Arbeits­speicher. Die vCPUs dieser VM muss man noch im ausgeschalteten Zustand für eine verschachtelte Virtualisierung vorbereiten.

    Ohne Set-VMProcessor kann der Hypervisor in einer VM nicht aktiviert werden.

    Tut man das nicht und versucht Hyper-V in der virtuellen Maschine zu aktivieren, dann läuft man unweigerlich in das Validierungs­ergebnis "Hyper-V kann nicht installiert werden, da der Prozessor nicht über die erforderlichen Virtualisierungs­funktionen verfügt". Diese Funktionen werden über das Cmdlet

    Set-VMProcessor -VMName HV-HOST-01 -ExposeVirtualizationExtensions $true

    sichtbar gemacht und mit $false können sie wieder maskiert werden. Für ein Testlabor verwende ich das ISO-Image von Windows Server 2016 TP5, welches als Betriebssystem für die zukünftigen Hyper-V Host-Nodes dient.

    Verschachtelte Virtualisierung: Windows 10 als Grundlage, Windows Server 2016 mit zweiter Hyper-V Ebene.

    Mit einem ungepatchten Windows Server 2016 TP5 in einer VM Generation 2 und Windows 10 1607 als Basis war nach erfolgreicher Installation des Betriebssystems ein Bootvorgang nicht möglich.

    Wenn dieses Problem auftritt, dann sollte man KB3172729 installieren.

    Der Bildschirm des VMConnect mit der Hyper-V Virtual Machine Boot Summary brachte die Meldung "The image´s hash was denied" und "No Operating system was loaded". KB3172729 bietet hierfür zumindest einen Workaround.

    Spoofing von MAC-Adressen einschalten

    Damit die verschachtelten virtuellen Computer Netzwerkpakete erhalten, ist es nötig, in den Einstellungen des virtuellen Hosts das MAC Address Spoofing zu aktivieren. Die entsprechende Option findet sich im Hyper-V Manager unter Netzwerkkarte => Erweiterte Features.

    MAC Address Spoofing aktivieren.

    Über PowerShell wird das Feature mit dem Cmdlet

    Get-VMNetworkAdapter -VMName HV-HOST-01 | select MacAddressSpoofing

    verifiziert und mit

    Get-VMNetworkAdapter -VMName HV-HOST-01 |
    Set-VMNetworkAdapter -MacAddressSpoofing On

    eingeschaltet.

    Keine Kommentare