Маршрутизация между разными IP подсетями в Hyper-V

В тестовом стенде на отдельно-стоящем Hyper-V сервере потребовалось создать несколько внутренних IP подсетей и настроить маршрутизацию между ними. По умолчанию Hyper-V не маршрутизирует трафик между подсетями на виртуальных коммутаторах. Поэтому при решении задачи в-лоб обычно создают отдельную ВМ с двумя сетевыми интерфейсами на разных коммутаторах Hyper-V (в разных подсетях) и настраивают маршрутизацию на между интерфесами средствами гостевой ОС (это может быть как ВМ с Windows Server с маршрутизацией ролью RRAS или Linux хост с нужной таблицей маршрутов). Этот способ неудобен тем, что необходимо держать отдельную ВМ только для маршрутизаций, и при добавлении новой IP подсети приходится добавлять новый серевой интерфейс и перенастраивать маршрутизацию на шлюзе. Но мне удалось разобраться, как настроить Hyper-V хост, чтобы он сам выполнял роль маршрутизатора между разными виртуальными коммутаторами/IP подсетями.

Итак, у меня на хосте Hyper-V созданы 2 виртуальные машины в разных подсетях со следующими IP адресами:

  • Msk-dc01: 192.168.13.11/24 (шлюз 192.168.13.1)
  • Spb-dc02: 192.168.113.11/24 (шлюз 192.168.113.1)

Чтобы разрешить маршрутизацию в Windows Server нужно включить специальный параметр реестра IPEnableRouter (он разбирался в статье про настройку форвардинга портов в Windows).

На хосте Hyper-V откройте консоль PowerShell с правами администратора и внесите изменение в реестр и перезагрузите хост:

Set-ItemProperty -Path HKLM:\system\CurrentControlSet\services\Tcpip\Parameters -Name IpEnableRouter -Value 1
Restart-computer

IpEnableRouter включить маршрутизацию в windows через реестр

Следующим этап – создать два новых виртуальных коммутатора Hyper-V типа Internal. Можно создать коммутаторы из консоли Hyper-V Manager, а можно из PowerShell:

New-VMSwitch -Name vSwitchIntMSK -SwitchType Internal
New-VMSwitch -Name vSwitchIntSPB -SwitchType Internal

создать отдельные hyper-v virtual switches для разных подсетей

Подробнее про настройку Hyper-V из PowerShell.

Теперь на хосте Hyper-V перейдите в Control Panel\Network and Internet\Network Connections. Перед вами появится список сетевых адаптеров хоста. Среди них должны появится есть два новых виртуальных адаптера (Hyper-V Virtual Ethernet Adapter) для созданных вами виртуальных коммутаторов. Назначьте им IP адреса с помощью PowerShell или через свойства сетевых адаптеров:

New-NetIPAddress -InterfaceAlias ‘vEthernet (vSwitchIntMSK)’ -IPAddress 192.168.13.1 -PrefixLength 24
New-NetIPAddress -InterfaceAlias ‘vEthernet (vSwitchIntSPB)’ -IPAddress 192.168.113.1 -PrefixLength
24

Как вы видите, мы назначили этим интерфейсам IP адреса шлюзов по-умолчанию в каждой подсети.

назначить ip адреса шлюзов hyper-v коммутаторам

Подключите каждую ВМ к своему виртуальному коммутатору (если вы еще не сделали это):

Connect-VMNetworkAdapter -VMName Msk-dc01 -SwitchName vSwitchIntMSK
Connect-VMNetworkAdapter -VMName spb-dc03 -SwitchName vSwitchIntspb

Connect-VMNetworkAdapter подключить ВМ к коммутатору Hyper-v

Теперь ваши ВМ будут пересылать трафик через эти интерфейсы виртуальных коммутаторов.

Проверьте, что теперь виртуальные машин Hyper-V из разных сегментов видят друг друга. Проверьте маршрутизацию с помощью tracert и доступность TCP портов с помощью PowerShell командлета Test-NetConnection:

Test-NetConnection 192.168.13.11 -port 445
tracert 192.168.13.11

проверка маршрутизации между несколькими IP подсетями в hyper-v

Как вы видите, теперь хосты отвечают на ICMP ping и TCP. Имейте в виду, что настройки Windows Defender Firewall в ваших ВМ могут блокировать трафик. Убедитесь, что вы разрешили ICMP трафик в Windows Firewall и добавили другие разрешающие правила файервола.

Итак, мы настроили маршрутизацию между несколькими виртуальными подсетями на хосте Hyper-V. Эта методика работает как для Hyper-V на Windows 10, так и на Windows Server 2016/2019.


Предыдущая статья Следующая статья


Комментариев: 12 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)