В тестовом стенде на отдельно-стоящем 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
Следующим этап – создать два новых виртуальных коммутатора Hyper-V типа Internal. Можно создать коммутаторы из консоли Hyper-V Manager, а можно из PowerShell:
New-VMSwitch -Name vSwitchIntMSK -SwitchType Internal
New-VMSwitch -Name vSwitchIntSPB -SwitchType Internal
Теперь на хосте 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
24
New-NetIPAddress -InterfaceAlias ‘vEthernet (vSwitchIntSPB)’ -IPAddress 192.168.113.1 -PrefixLength
Как вы видите, мы назначили этим интерфейсам IP адреса шлюзов по-умолчанию в каждой подсети.
Подключите каждую ВМ к своему виртуальному коммутатору (если вы еще не сделали это):
Connect-VMNetworkAdapter -VMName Msk-dc01 -SwitchName vSwitchIntMSK
Connect-VMNetworkAdapter -VMName spb-dc03 -SwitchName vSwitchIntspb
Теперь ваши ВМ будут пересылать трафик через эти интерфейсы виртуальных коммутаторов.
Проверьте, что теперь виртуальные машин Hyper-V из разных сегментов видят друг друга. Проверьте маршрутизацию с помощью tracert и доступность TCP портов с помощью PowerShell командлета Test-NetConnection:
Test-NetConnection 192.168.13.11 -port 445
tracert 192.168.13.11
Как вы видите, теперь хосты отвечают на ICMP ping и TCP. Имейте в виду, что настройки Windows Defender Firewall в ваших ВМ могут блокировать трафик. Убедитесь, что вы разрешили ICMP трафик в Windows Firewall и добавили другие разрешающие правила файервола.
Итак, мы настроили маршрутизацию между несколькими виртуальными подсетями на хосте Hyper-V. Эта методика работает как для Hyper-V на Windows 10, так и на Windows Server 2016/2019.