Запуск Hyper-V в виртуальной машине со вложенной виртуализациейRun Hyper-V in a Virtual Machine with Nested Virtualization

Вложенная виртуализация — это компонент, который позволяет запускать Hyper-V в виртуальной машине (ВМ) Hyper-V.Nested virtualization is a feature that allows you to run Hyper-V inside of a Hyper-V virtual machine (VM). Это полезно для запуска эмулятора телефона Visual Studio на виртуальной машине и для тестирования конфигураций, для которых обычно требуется несколько узлов.This is helpful for running a Visual Studio phone emulator in a virtual machine, or testing configurations that ordinarily require several hosts.

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

  • Узел Hyper-V и виртуальная машина должны быть размещены в Windows Server 2016, Windows 10 Anniversary Update или более поздней версии.The Hyper-V host and guest must both be Windows Server 2016/Windows 10 Anniversary Update or later.
  • Версия конфигурации ВМ 8.0 или более поздняя.VM configuration version 8.0 or greater.
  • Процессор Intel с технологией Intel VT-x и EPT (вложение сейчас поддерживается только для процессоров Intel).An Intel processor with VT-x and EPT technology -- nesting is currently Intel-only.
  • Существуют некоторые различия между виртуальными сетями для виртуальных машин второго уровня.There are some differences with virtual networking for second-level virtual machines. См. раздел «Сети на вложенных виртуальных машинах».See "Nested Virtual Machine Networking".

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

  1. Создание виртуальной машины.Create a virtual machine. Необходимые версии ОС и виртуальных машин см. в предварительных требованиях выше.See the prerequisites above for the required OS and VM versions.
  2. Пока виртуальная машина находится в отключенном состоянии, запустите следующую команду на физическом узле Hyper-V.While the virtual machine is in the OFF state, run the following command on the physical Hyper-V host. В виртуальной машине будет включена вложенная виртуализация.This enables nested virtualization for the virtual machine.
Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true
  1. запустите ее.Start the virtual machine.
  2. Установите Hyper-V в виртуальной машине так же, как на физическом сервере.Install Hyper-V within the virtual machine, just like you would for a physical server. Дополнительные сведения об установке Hyper-V см. в разделе Установка Hyper-V.For more information on installing Hyper-V see, Install Hyper-V.

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

Вы можете отключить вложенную виртуализацию в остановленной виртуальной машине следующей командой PowerShell:You can disable nested virtualization for a stopped virtual machine using the following PowerShell command:

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

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

При запуске Hyper-V в виртуальной машине в ней должна быть отключена настройка памяти.When Hyper-V is running inside a virtual machine, the virtual machine must be turned off to adjust its memory. Это означает, что даже если динамическая память включена, ее объем не будет изменяться.This means that even if dynamic memory is enabled, the amount of memory will not fluctuate. Для виртуальных машин без динамической памяти все попытки изменить объем памяти включенной машины завершатся сбоем.For virtual machines without dynamic memory enabled, any attempt to adjust the amount of memory while it's on will fail.

Обратите внимание, что само включение вложенной виртуализации не повлияет на изменение размера динамической памяти или памяти для среды выполнения.Note that simply enabling nested virtualization will have no effect on dynamic memory or runtime memory resize. Несовместимость происходит, только если Hyper-V выполняется в виртуальной машине.The incompatibility only occurs while Hyper-V is running in the VM.

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

Существуют два параметра для сетей со вложенными виртуальными машинами:There are two options for networking with nested virtual machines:

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

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

Чтобы сетевые пакеты перенаправлялись через два виртуальных коммутатора, необходимо включить спуфинг MAC-адресов на первом (L1) уровне виртуального коммутатора.In order for network packets to be routed through two virtual switches, MAC address spoofing must be enabled on the first (L1) level of virtual switch. Это можно сделать с помощью следующей команды PowerShell.This is completed with the following PowerShell command.

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

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

Второй параметр связан с преобразованием сетевых адресов (NAT).The second option relies on network address translation (NAT). Этот подход рекомендуется для случаев, когда спуфинг MAC-адресов невозможен, например в общедоступной облачной среде.This approach is best suited for cases where MAC address spoofing is not possible, like in a public cloud environment.

Сначала необходимо создать виртуальный коммутатор NAT в виртуальной машине узла ("средняя" виртуальная машина).First, a virtual NAT switch must be created in the host virtual machine (the "middle" VM). Обратите внимание, что IP-адреса приведены только в качестве примера и будут разниться в зависимости от сред:Note that the IP addresses are just an example, and will vary across environments:

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

Далее назначьте IP-адрес для сетевого адаптера:Next, assign an IP address to the net adapter:

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

Каждая вложенная виртуальная машина должна иметь назначенный IP-адрес и шлюз.Each nested virtual machine must have an IP address and gateway assigned to it. Обратите внимание, что IP-адрес шлюза должен указывать на адаптер NAT из предыдущего действия.Note that the gateway IP must point to the NAT adapter from the previous step. Можно также назначить DNS-сервер:You may also want to assign a DNS server:

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>

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

Современные процессоры поддерживают аппаратные функции, которые делают виртуализацию быстрее и надежнее.Modern processors include hardware features that make virtualization faster and more secure. Hyper-V использует эти расширения процессора (например, Intel VT-x и AMD-V) для выполнения виртуальных машин.Hyper-V relies on these processor extensions to run virtual machines (e.g. Intel VT-x and AMD-V). Как правило, после запуска Hyper-V другое программное обеспечение блокируется с помощью этих возможностей процессора.Typically, once Hyper-V starts, it prevents other software from using these processor capabilities. Это предотвращает запуск Hyper-V на гостевых виртуальных машинах.This prevents guest virtual machines from running Hyper-V.

Вложенная виртуализация предоставляет поддержку этих аппаратных функций гостевым виртуальным машинам.Nested virtualization makes this hardware support available to guest virtual machines.

На схеме ниже показана роль Hyper-V без вложения.The diagram below shows Hyper-V without nesting. Низкоуровневая оболочка Hyper-V полностью контролирует возможности аппаратной виртуализации (оранжевая стрелка) и скрывает их от операционной системы.The Hyper-V hypervisor takes full control of the hardware virtualization capabilities (orange arrow), and does not expose them to the guest operating system.

На следующей схеме показана роль Hyper-V с включенной вложенной виртуализацией.In contrast, the diagram below shows Hyper-V with nested virtualization enabled. В этом случае Hyper-V предоставляет расширения аппаратной виртуализации виртуальным машинам.In this case, Hyper-V exposes the hardware virtualization extensions to its virtual machines. Если вложение включено, гостевая виртуальная машина может установить собственную низкоуровневую оболочку и запускать свои гостевые виртуальные машины.With nesting enabled, a guest virtual machine can install its own hypervisor and run its own guest VMs.

Сторонние приложения виртуализации3rd Party Virtualization Apps

Приложения виртуализации, отличные от Hyper-V, не поддерживаются в виртуальных машинах Hyper-V и скорее всего приведут к сбою.Virtualization applications other than Hyper-V are not supported in Hyper-V virtual machines, and are likely to fail. Сюда входит любое программное обеспечение, требующее расширений виртуализации оборудования.This includes any software that requires hardware virtualization extensions.