Запуск Hyper-V в виртуальной машине со вложенной виртуализацией

Вложенная виртуализация— это компонент, который позволяет запускать Hyper-V в виртуальной машине (ВМ) Hyper-V. Это полезно для запуска эмулятора телефона Visual Studio на виртуальной машине и для тестирования конфигураций, для которых обычно требуется несколько узлов.

Предварительные условия

  • Узел Hyper-V и виртуальная машина должны быть размещены в Windows Server 2016, Windows 10 Anniversary Update или более поздней версии.
  • Версия конфигурации ВМ 8.0 или более поздняя.
  • Процессор Intel с технологией Intel VT-x и EPT (вложение сейчас поддерживается только для процессоров Intel).
  • Существуют некоторые различия между виртуальными сетями для виртуальных машин второго уровня. См. раздел «Сети на вложенных виртуальных машинах».

Настройка вложенной виртуализации

  1. Создание виртуальной машины. Необходимые версии ОС и виртуальных машин см. в предварительных требованиях выше.
  2. Пока виртуальная машина находится в отключенном состоянии, запустите следующую команду на физическом узле Hyper-V. В виртуальной машине будет включена вложенная виртуализация.
Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true
  1. запустите ее.
  2. Установите Hyper-V в виртуальной машине так же, как на физическом сервере. Дополнительные сведения об установке Hyper-V см. в разделе Установка Hyper-V.

Отключение вложенной виртуализации

Вы можете отключить вложенную виртуализацию в остановленной виртуальной машине следующей командой PowerShell:

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

Изменение размера динамической памяти и памяти для среды выполнения

При запуске Hyper-V в виртуальной машине в ней должна быть отключена настройка памяти. Это означает, что даже если динамическая память включена, ее объем не будет изменяться. Для виртуальных машин без динамической памяти все попытки изменить объем памяти включенной машины завершатся сбоем.

Обратите внимание, что само включение вложенной виртуализации не повлияет на изменение размера динамической памяти или памяти для среды выполнения. Несовместимость происходит, только если Hyper-V выполняется в виртуальной машине.

Параметры сетей

Существуют два параметра для сетей со вложенными виртуальными машинами:

  1. спуфинг MAC-адресов;
  2. режим NAT.

Спуфинг MAC-адресов

Чтобы сетевые пакеты перенаправлялись через два виртуальных коммутатора, необходимо включить спуфинг MAC-адресов на первом (L1) уровне виртуального коммутатора. Это можно сделать с помощью следующей команды PowerShell.

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

Преобразование сетевых адресов (NAT)

Второй параметр связан с преобразованием сетевых адресов (NAT). Этот подход рекомендуется для случаев, когда спуфинг MAC-адресов невозможен, например в общедоступной облачной среде.

Сначала необходимо создать виртуальный коммутатор NAT в виртуальной машине узла ("средняя" виртуальная машина). Обратите внимание, что IP-адреса приведены только в качестве примера и будут разниться в зависимости от сред:

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

Далее назначьте IP-адрес для сетевого адаптера:

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

Каждая вложенная виртуальная машина должна иметь назначенный IP-адрес и шлюз. Обратите внимание, что IP-адрес шлюза должен указывать на адаптер NAT из предыдущего действия. Можно также назначить 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>

Принцип работы вложенной виртуализации

Современные процессоры поддерживают аппаратные функции, которые делают виртуализацию быстрее и надежнее. Hyper-V использует эти расширения процессора (например, Intel VT-x и AMD-V) для выполнения виртуальных машин. Как правило, после запуска Hyper-V другое программное обеспечение блокируется с помощью этих возможностей процессора. Это предотвращает запуск Hyper-V на гостевых виртуальных машинах.

Вложенная виртуализация предоставляет поддержку этих аппаратных функций гостевым виртуальным машинам.

На схеме ниже показана роль Hyper-V без вложения. Низкоуровневая оболочка Hyper-V полностью контролирует возможности аппаратной виртуализации (оранжевая стрелка) и скрывает их от операционной системы.

На следующей схеме показана роль Hyper-V с включенной вложенной виртуализацией. В этом случае Hyper-V предоставляет расширения аппаратной виртуализации виртуальным машинам. Если вложение включено, гостевая виртуальная машина может установить собственную низкоуровневую оболочку и запускать свои гостевые виртуальные машины.

Сторонние приложения виртуализации

Приложения виртуализации, отличные от Hyper-V, не поддерживаются в виртуальных машинах Hyper-V и скорее всего приведут к сбою. Сюда входит любое программное обеспечение, требующее расширений виртуализации оборудования.