Использование PowerShell для создания сети NAT для виртуальных машин Hyper-V
Иногда, если вам нужно создать несколько виртуальных машин Hyper-V (или даже контейнеров), может быть полезно создать трансляцию сетевых адресов или сеть NAT. NAT — это та же технология, которая используется в потребительских WiFi-маршрутизаторах. Он позволяет привязать серию немаршрутизируемых IP-адресов к одной точке подключения. В случае Hyper-V этой точкой подключения будет виртуальный коммутатор Hyper-V и базовый виртуальный адаптер Ethernet.
Создайте виртуальный коммутатор Hyper-V.
Неудивительно, что первым шагом в создании сети NAT является создание виртуального коммутатора Hyper-V. Хотя вы можете создать виртуальный коммутатор с помощью диспетчера Hyper-V, давайте вместо этого воспользуемся PowerShell.
Для создания виртуального коммутатора используется командлет New-VMSwitch. При использовании этого командлета вам потребуется предоставить только две части информации. Во-первых, вам нужно будет присвоить имя виртуальному коммутатору. Для демонстрации я буду называть виртуальный коммутатор NAT.
Другая часть информации, которую вам нужно будет предоставить, — это тип переключателя. В этом случае я собираюсь создать внутренний виртуальный коммутатор, хотя я мог бы так же легко сделать виртуальный коммутатор внешним. Итак, с учетом сказанного, вот команда, используемая для создания виртуального коммутатора:
New-VMSwitch -SwitchName “NAT” -SwitchType Internal
Вы можете увидеть, как работает эта команда, на рисунке ниже. Здесь я использовал командлет Get-VMSwitch для отображения списка ранее существовавших виртуальных коммутаторов. Затем я создал новый виртуальный коммутатор, а затем снова запустил командлет Get-VMSwitch, чтобы показать, что вновь созданный виртуальный коммутатор добавлен в список виртуальных коммутаторов.
Идентификация соответствующего виртуального адаптера Ethernet
Когда вы создаете виртуальный коммутатор Hyper-V, Hyper-V автоматически создает виртуальный адаптер Ethernet, соответствующий виртуальному коммутатору. Однако если вы вернетесь назад и посмотрите на рисунок выше, то увидите, что на моем хост-сервере уже был виртуальный коммутатор до того, как я создал коммутатор NAT. Следовательно, мой сервер Hyper-V имеет три виртуальных адаптера Ethernet. Есть адаптер для ранее существовавшего виртуального коммутатора, еще один адаптер для физической сетевой карты и третий адаптер, соответствующий коммутатору NAT, который я только что создал. Hyper-V различает эти адаптеры с помощью значения IfIndex. Вы можете найти значение IfIndex для только что созданного коммутатора, введя командлет Get-NetAdapter. Если вы посмотрите на рисунок ниже, вы увидите три моих адаптера, и вы увидите, что значение IfIndex моего адаптера NAT равно 37 (у вашего адаптера, вероятно, будет другое значение).
Создание шлюза NAT
Третий шаг в этом процессе — создание шлюза NAT. В мире ИТ термин «шлюз» может означать множество разных вещей. В этом случае шлюз NAT не относится к виртуальной машине шлюза или чему-то подобному. Вместо этого создание шлюза NAT означает просто назначение IP-адреса шлюза виртуальному адаптеру Ethernet, который используется вновь созданным виртуальным коммутатором NAT.
Поскольку мы основываем сеть NAT на внутреннем виртуальном коммутаторе, я хочу использовать немаршрутизируемый диапазон IP-адресов. Поэтому я собираюсь использовать 10.0.0.1 в качестве IP-адреса шлюза. Вы должны использовать любой диапазон IP-адресов, соответствующий вашим потребностям.
В дополнение к IP-адресу нам также потребуется указать длину префикса. Наиболее часто используемая длина префикса для диапазона IP-адресов, который я собираюсь использовать, равна 24. Использование значения префикса 24 аналогично использованию маски подсети 255.255.255.0. Двадцать четыре также является наиболее часто используемым значением префикса для других немаршрутизируемых адресов, таких как 192.168.0.x и 172.16.0.x. Для настройки IP-адреса шлюза используется команда New-NetIPAddress. Вот пример использования этой команды:
New-NetIPAddress -IPAddress 10.0.0.1 -PrefixLength 24 -InterfaceIndex 37
Как видите, эта команда относительно проста, но вы заметите, что мне пришлось указать индекс интерфейса. Индекс интерфейса — это IfIndex, который я искал минуту назад. На рисунке ниже показано, как выглядит эта команда при запуске.
Делая шаг назад
До сих пор все, что мы сделали, — это создали виртуальный коммутатор Hyper-V и назначили IP-адрес соответствующему виртуальному адаптеру Ethernet. На самом деле вы можете использовать диспетчер Hyper-V для просмотра работы, которую мы проделали в PowerShell. Например, если я открою Virtual Switch Manager, вы увидите внутренний виртуальный коммутатор с именем NAT, который мы создали ранее.
Точно так же мы можем использовать панель управления для просмотра назначения IP-адреса, которое мы сделали с помощью PowerShell.
Создание сети NAT
Несмотря на работу, которую мы проделали до сих пор, мы не создали NAT. Все, что мы сделали, это создали базовую внутреннюю виртуальную сеть. Чтобы создать NAT, вам потребуется использовать командлет New-NetNat. Для использования этого командлета необходимо указать два параметра — имя сети, префикс IP-адреса и длину подсети. Имя сети может быть любым. Я назову свою сеть BriensNAT. Префикс внутреннего IP-адреса будет основан на адресе и длине префикса, которые вы указали ранее. В моем случае я буду использовать 10.0.0.0/24. Вот пример команды:
New-NetNat -Name BriensNAT -ExternalIPInterfaceAddressPrefix 10.0.0.0/24
Вы можете увидеть, как выглядит процесс создания NAT на рисунке ниже.
Точка для запоминания
В начале этой статьи я сравнил Hyper-V NAT с сетями NAT, используемыми точками доступа Wi-Fi потребительского уровня, из-за того, как эти точки доступа предоставляют немаршрутизируемые IP-адреса конечным точкам сети, а затем разрешают доступ в Интернет для эти конечные точки. Однако есть одно ключевое различие между тем, как сети NAT работают в потребительских точках доступа Wi-Fi, и тем, как NAT работает в инфраструктуре, которую я только что показал вам, как создать. Точки доступа Wi-Fi могут предоставлять конечным точкам сети IP-адреса, поскольку точка доступа настроена на работу в качестве DHCP-сервера. Сеть NAT, которую мы только что создали, не будет содержать DHCP-сервер, пока вы его не создадите, и, следовательно, не будет автоматически предоставлять клиентам IP-адреса, если вы не добавите DHCP-сервер.