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

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

Дополнительные сведения о вложенной виртуализации и поддерживаемых сценариях см. в статье "Что такое вложенная виртуализация для Hyper-V?".

Необходимые компоненты

Процессор Intel с технологиями VT-x и EPT.

  • Узел Hyper-V должен быть windows Server 2016 или более поздней версии, либо Windows 10 или более поздней версии.
  • Конфигурация виртуальной машины версии 8.0 или более поздней.

ПРОЦЕССОР AMD EPYC / Ryzen или более поздней версии

  • Узел Hyper-V должен быть windows Server 2022 или более поздней версии, либо Windows 11 или более поздней версии.
  • Конфигурация виртуальной машины версии 9.3 или более поздней.

Примечание.

В гостевой системе может использоваться любая поддерживаемая операционная система Windows на виртуальной машине. Более новые операционные системы Windows могут поддерживать компоненты паравиртуализации, повышающие производительность. Чтобы включить вложенную виртуализацию на виртуальной машине Azure, обязательно задайте тип безопасности "Стандартный".

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

  1. Создайте виртуальную машину. Ознакомьтесь с предварительными требованиями для необходимых версий ОС и виртуальных машин.

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

    Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true
    
  3. Запустите виртуальную машину.

  4. Установите Hyper-V на виртуальной машине так же, как и для физического сервера. Дополнительные сведения об установке Hyper-V см. в разделе "Установка Hyper-V".

Примечание.

При использовании Windows Server 2019 в качестве виртуальной машины первого уровня количество виртуальных ЦП должно составлять 225 или меньше.

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

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

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

Сетевые параметры

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

  1. Спуфинирование MAC-адресов
  2. Сеть NAT

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

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

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

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

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

Во-первых, виртуальный коммутатор NAT должен быть создан на виртуальной машине узла (средняя виртуальная машина). В следующем примере создается новый внутренний коммутатор с именем VmNAT и создается объект NAT для всех IP-адресов в 192.168.100.0/24 подсети.

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 "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>

Следующие шаги