Начиная с версии Hyper-V в Windows Server 2016/Windows 10 появилась встроенная возможность создавать сеть NAT (Network Address Translation). В этой статье мы рассмотрим, как настроить NAT сеть для виртуальных машин Hyper-V.
Основные ограничения:
- Вы можете создать только одну NAT сеть;
- Для NAT сети не будут доступны такие дополнительные службы, как DNS и DHCP. Это означает, что вам придется задавать сетевые настройки вашим виртуальным машинам за NAT сетью самостоятельно;
- Настройка NAT сети выполняется только из консоли PowerShell.
Рассмотрим, как создать и настроить NAT сеть с помощью PowerShell.
Создайте новый виртуальный коммутатор с типом сети Internal:
New-VMSwitch -SwitchName "NAT_NET" -SwitchType Internal
При этом на хосте Hyper-V появляется новый виртуальный адаптер. Выведите список виртуальных адаптеров с помощью команды:
Get-NetAdapter
Запомните индекс сетевого интерфейса для вашей NAT сети (ifIndex
). В нашем примере это 8.
Теперь нужно задать сетевые настройки этого интерфейса. Обратите внимание, что от этих настроек будет зависеть адресация виртуальных машин за NAT. Данный сетевой адаптер будет служить для них шлюзом по-умолчанию.
New-NetIPAddress -IPAddress 192.168.51.1 -PrefixLength 24 -InterfaceIndex 8
- InterfaceIndex – номер виртуального интерфейса NAT коммутатора
- PrefixLength – соответствует маске подсети 255.255.255.0 (/24)
Теперь моно создать NAT сеть:
New-NetNat -Name "vHW_NAT" -InternalIPInterfaceAddressPrefix 192.168.51.0/24
Чтобы подключить виртуальную машину к сети через NAT, вам нужно в ее свойствах выбрать коммутатор NAT_NET. Вы можете переключить ВМ в NAT сеть через диспетчер Hyper-V или с помощью PowerShell:
Get-VM TestVM1,TestVM2|Get-VMNetworkAdapter| Connect-VMNetworkAdapter –SwitchName “NAT_NET”
Теперь нужно назначить корректный IP адрес и DNS настройки для гостевой ВМ. Вы можете развернуть в NAT сети отдельный сервис с ролями DHCP и DNS, или задать настройки сетевого адаптера вручную:
Вы можете подключить к ВМ с хоста Hyper-V через PowerShell Direct:
Enter-PSSession -VMName TestVM1
Теперь можно задать сетевые настройки:
Get-NetAdapter
Get-NetIPAddress -InterfaceIndex 5
New-NetIpAddress -InterfaceIndex 5 -IpAddress 192.168.51.20 -PrefixLength 24 -DefaultGateway 192.168.51.1
Set-DNSClientServerAddress –InterfaceIndex 5 –ServerAddresses 192.168.10.15,8.8.8.8
Проверьте что вы все настроили правильно:
Get-NetIPAddress -InterfaceIndex 5
Проверьте доступность внешних ресурсов:
ping 8.8.8.8
Вы можете пробросить порт с внешней сети (коммутатор Hyper-V) на любую из виртуальных машин за NAT. Например, пробросьте порт 22 (SSH) в одну из ВМ:
Add-NetNatStaticMapping -NatName "vNAT_TestVM1_SSH" -Protocol TCP -ExternalIPAddress 0.0.0.0/24 -ExternalPort 22 -InternalIPAddress 192.168.51.20 -InternalPort 22
Теперь вест трафик TCP/22, который приходит на хост Hyper-V будет перенаправляться на соответствующий порт виртуальной машины за NAT.
Полный список правил перенаправления портов можно вывести так:
Get-NetNatStaticMapping
Вы можете удалить одно правило NAT трансляции адресов или сразу все:
Remove-NetNatStaticMapping -StaticMappingID "vNAT_TestVM1_SSH"
Remove-NetNatStaticMapping
Если вы захотите изменить IP адресацию в NAT сети, вам придется удалить виртуальный коммутатор NAT и пересоздать его заново:
Remove-VMSwitch -SwitchName "NAT_VM"
Напоминаю, что в Hyper-V может быть только одна NAT сеть.
7 комментариев
ну ничоси!
А как удалить НАТ, если он более не требуется?
А то не получается настроить внешнюю сеть теперь.
Лажа какая-то. Все отлично настраивается через GUI. Описанное выше парой кликов можно настроить
Хрень. Даже в виртуалбоксе это в два тыка настраивается
Если уж Вы переводите для нас дремучих англоязычные базы знаний (что само по себе благо), то корректнее было бы давать ссылки на первоисточник. А если компилируете из нескольких источников, то хотя бы проверяйте синтаксис команд (на практике, что ли). А так — «просто какой-то позор…» Правильный синтаксис, например, здесь: http://myitworld.azurewebsites.net/2017/02/09/configure-hyper-v-nat-virtual-switch-nat-forwarding/
А тема довольно актуальная. Удалить NAT — см. базу знаний Microsoft (командная строка Hyper-v, команды и условия создания, удаления NAT). Удачи!
К критике я отношусь адекватно 🙂 Каюсь, не все команды проверял. Статью больше как для себя закладку сделал.
Но вроде все правильно и логично.
Возможно с кавычками затык.
Не страшно. Просто поправьте во второй группе (проброс портов) NatName (см. по ссылке выше), а то не совпадает c предыдущей группой — люди будут спотыкаться об это. Тогда всё заработает 🙂