Вложенная виртуализация позволяет запускать виртуальные машины внутри уже работающей виртуальной машины.
Схема похожа на матрешку: гипервизор создает виртуальную машину, а внутри нее запускается еще один гипервизор со своими гостевыми системами.
Вложенная виртуализация используется для тестирования и разработки, создания учебных лабораторий, запуска контейнеров, например Docker внутри облачных серверов, а также для анализа вредоносного ПО в изолированной среде.
Ниже — настройка вложенной виртуализации Hyper-V средствами PowerShell.
Основные требования
| Параметр | Intel | AMD |
|---|---|---|
| Операционная система | Windows Server 2016 / Windows 10 | Windows Server 2022 / Windows 11 |
| Требования к процессору | VT-x + EPT | AMD-V + NPT |
При использовании вложенной виртуализации динамическая оперативная память недоступна.
Настройка вложенной виртуализации
Все команды выполняются через PowerShell.
Шаг 1. Проверьте статус вложенной виртуализации
Сначала проверьте текущее значение параметра ExposeVirtualizationExtensions для нужной виртуальной машины.
Get-VMProcessor -VMName "имя_вм" | Select-Object ExposeVirtualizationExtensions
Для виртуальной машины VM1 команда выглядит так:
Get-VMProcessor -VMName "VM1" | Select-Object ExposeVirtualizationExtensions
Если вложенная виртуализация отключена, параметр ExposeVirtualizationExtensions имеет значение False.
Рисунок 1 – Проверка вложенной виртуализации
Шаг 2. Остановите виртуальную машину
Если вложенная виртуализация выключена, завершите работу виртуальной машины через консоль Hyper-V или PowerShell.
Используйте команду:
Stop-VM -Name "имя_вм"
Для виртуальной машины VM1:
Stop-VM -Name "VM1"
Перед включением вложенной виртуализации виртуальная машина должна быть остановлена.
Шаг 3. Включите вложенную виртуализацию
После остановки виртуальной машины включите передачу расширений виртуализации гостевой системе.
Set-VMProcessor -VMName "имя_вм" -ExposeVirtualizationExtensions $true
Для виртуальной машины VM1:
Set-VMProcessor -VMName "VM1" -ExposeVirtualizationExtensions $true
После выполнения команды снова проверьте состояние параметра:
Get-VMProcessor -VMName "VM1" | Select-Object ExposeVirtualizationExtensions
Если настройка выполнена успешно, значение ExposeVirtualizationExtensions изменится на True.
Рисунок 2 – Включение вложенной виртуализации
Дополнительные настройки
Если у вложенной виртуальной машины нет сети
Если внутри виртуальной машины запускается еще одна ВМ и у нее отсутствует сетевое подключение, в свойствах сетевого адаптера основной виртуальной машины включите спуфинг MAC-адресов.
Это можно сделать командой:
Get-VMNetworkAdapter -VMName "имя_вм" | Set-VMNetworkAdapter -MacAddressSpoofing On
Для виртуальной машины VM1:
Get-VMNetworkAdapter -VMName "VM1" | Set-VMNetworkAdapter -MacAddressSpoofing On
Если используется устаревшая версия виртуальной машины
При проблемах, связанных с устаревшей версией виртуальной машины, обновите ее конфигурацию.
Update-VMVersion -Name "имя_вм"
Для виртуальной машины VM1:
Update-VMVersion -Name "VM1"
Проверка результата
- Выполните команду проверки ExposeVirtualizationExtensions.
- Убедитесь, что параметр имеет значение True.
- Если вложенной ВМ требуется сеть, проверьте работу сетевого подключения.
- Если возникают проблемы с версией ВМ, выполните ее обновление через Update-VMVersion.
Результат
После включения параметра
ExposeVirtualizationExtensions
внутри виртуальной машины Hyper-V можно использовать
вложенную виртуализацию.