Привет, недавно столкнулся с ситуацией — есть выделенный сервер, на сервер установлен Hyper-V, провайдер выдает один белый IP на сервер. Обратились ко мне с вопросом — как можно сделать так, что бы не покупая дополнительные адреса, на создаваемых на сервере виртуальных машинах работал интернет.
В случае, например с VirtualBox вопрос решается подключением виртуальной машины к сети с типом NAT, но как же быть с Hyper-V, в нем нельзя подключить виртуальный свитч к сети NAT.
Ответ очевиден — нужно подключить свитч к внутренней сети, и с него трафик натить через физический порт. Сделать это совсем не сложно.
Ниже я расскажу как можно настроить NAT на Windows Server 2016 через PowerShell, а так же как можно настроить NAT на более старых версиях ОС Windows, через RRAS (к слову и на Windows Server 2016, через RRAS то же можно делать).
Начнем с более предпочтительного и простого способа — через PowerShell, но он для Windows 2016 и Windows 10 (к слову эти же команды должны работать и на более старых версях Windows, при условии, что будет установлен PowerShell 5, но я не проверял, кто проверит, отпишитесь в комментариях).
#Добавляем виртуальный свитч
New-VMSwitch -name NAT -SwitchType Internal
#Добавляем NAT
New-NetNat -Name LocalNat -InternalIPInterfaceAddressPrefix "10.0.0.0/24"
#Назначем адрес виртуальному свитчу
Get-NetAdapter "vEthernet (NAT)" | New-NetIPAddress `
-IPAddress 10.0.0.1 -AddressFamily IPv4 -PrefixLength 24
#Делаем проброс портов
Add-NetNatStaticMapping -NatName NATnetwork -Protocol TCP `
-ExternalIPAddress 0.0.0.0 -InternalIPAddress 10.0.0.2 `
-InternalPort 22 -ExternalPort 50022
#Посмотреть текущие пробросы портов можной командой:
Get-NetNatStaticMapping
#Как и список сетей NAT
Get-NetNat
#Такими командами это хозяйство можно удалить
Remove-NetNatStaticMapping -StaticMappingID 0
Remove-NetNat -Name LocalNat
Теперь опишу способ, как можно сделать NAT, который работает практически на всех версиях винды (на 2003, 2008, 2012 и 2016 соответсвенно), будем делать NAT через RRAS.
Сперва нужно поставить роль RAS, для этого заходим в диспетчер сервера, жмем управление и выбираем — добавить роли и компоненты.

В мастере добавления ролей, в ролях сервера, выбираем Удаленный доступ.

В службах ролей удаленного доступа, выбираем маршрутизация,

и добавляем необходимые компоненты.

После завершения установки, перезагружаем сервер, возвращаемся в диспетчер сервера и выбираем: средства — маршрутизация и удаленный доступ.

Щелкаем правой кнопкой по нашему серверу и выбираем — настроить маршрутизацию и удаленный доступ.

На втором шаге мастера настройки сервера маршрутизации и удаленного доступа, выбираем — преобразование сетевых адресов (NAT).

Дальше выбираем сетевой интерфейс, который подключен к интернету.

На этом настройка NAT на Windows Server 2016 закончена, вернемся в консоль управления RRAS, развернем наш сервер, перейдем в IPv4, и зайдем в преобразование сетевых адресов.

Здесь можно посмотреть свойства сетевых интерфейсов. Например для внутреннего свойства выглядят так:

А для внешнего так:

Здесь же можно сделать проброс портов, например, сделаю проброс ssh до виртуальной машины. Заходим в службы и порты и жмем добавить,

Здесь указываем понятное имя службы, входящий порт (порт по которому нужно ломиться на сервер), адрес сервера к которому пробрасываем порт, и порт сервера.

Всё порт проброшен. Можно пробовать подключиться.


Здравствуйте! Спасибо за
Здравствуйте! Спасибо за статью, а не подскажите как расшарить интернет если у нас PPPoe подключение? В списке интерфейсов его нет.
Здравствуйте. Спасибо за
Здравствуйте. Спасибо за статью. Многое прояснил для себя. Но остались и непонятки.
У меня есть один белый ip для хоста. На хосте я поднял виртуальную машину ip 192.168.0.10/28. На виртуальной машине поднял сайт на share point 2016 с адресом «http://saittest» . По вашему примеру пробросил порт 80 на внешний 50022. Теперь пытаюсь зайти на этот сайт, в браузере набираю «http://ip адрес сайта:50022» сайт отвечает выдает форму для проверки логина и пароля. Ввожу их. Но появляется ошибка 404, говорит что не удалось найти данный ресурс. С самой виртуальной машины сайт открывается.
Не подскажите что я делаю не так?
С уважением, Вячеслав.
Здравствуйте. Спасибо за
Здравствуйте. Спасибо за статью. Многое прояснил для себя. Но остались и непонятки.
У меня есть один белый ip для хоста. На хосте я поднял виртуальную машину ip 192.168.0.10/28. На виртуальной машине поднял сайт на share point 2016 с адресом «http://saittest» . По вашему примеру пробросил порт 80 на внешний 50022. Теперь пытаюсь зайти на этот сайт, в браузере набираю «http://ip адрес сайта:50022» сайт отвечает выдает форму для проверки логина и пароля. Ввожу их. Но появляется ошибка 404, говорит что не удалось найти данный ресурс. С самой виртуальной машины сайт открывается.
Не подскажите что я делаю не так?
С уважением, Вячеслав.
Ура! Победил 🙂 Александр,
Ура! Победил 🙂 Александр, спасибо огромное. Нужно было проклинать 80 ый порт на 80ый!