Назад | Перейти на главную страницу

DHCP-сервер на виртуальной машине в виртуальной сети HNVv1

У меня есть виртуальная машина с Windows Server 2016 Datacenter, вложенной виртуализацией Hyper-V в операционной системе хоста, включенной для этой виртуальной машины, и установленной на ней ролью Hyper-V.

PS C:\> Set-VMProcessor -VMName hvm -ExposeVirtualizationExtensions $true
PS C:\> Install-WindowsFeature -Name Hyper-V -IncludeManagementTools -Restart

На этой виртуальной машине развернуты еще две виртуальные машины (вложенные) с Debian Linux. Я пытаюсь настроить локальную сеть между этими двумя виртуальными машинами с помощью виртуализации сети Hyper-V (согласно документации это называется HNVv1). HNVv1 настроен следующим образом:

PS C:\> Get-NetVirtualizationProviderAddress
ProviderAddress  : 192.168.1.2
InterfaceIndex   : 5
PrefixLength     : 24
VlanID           : 0
AddressState     : Preferred
MACAddress       : XXXXXXXXXXXX
ManagedByCluster : False

PS C:\> Get-NetVirtualizationProviderRoute
InterfaceIndex    : 5
DestinationPrefix : 0.0.0.0/0
NextHop           : 192.168.1.1
Metric            : 0

PS C:\> Get-NetVirtualizationCustomerRoute
RoutingDomainID   : {9CC4A292-A1C6-41DF-A4ED-4C78F850E682}
VirtualSubnetID   : 4101
DestinationPrefix : 192.168.46.0/24
NextHop           : 0.0.0.0
Metric            : 255

PS C:\> Get-NetVirtualizationLookupRecord
CustomerAddress : 192.168.46.2
VirtualSubnetID : 4101
MACAddress      : 00155d5d2a02
ProviderAddress : 192.168.1.2
Rule            : TranslationMethodEncap
VMName          :
UseVmMACAddress : False
Type            : Dynamic

CustomerAddress : 0.0.0.0
VirtualSubnetID : 4101
MACAddress      : 00155d5d2a02
ProviderAddress : 192.168.1.2
Rule            : TranslationMethodEncap
VMName          : vm01
UseVmMACAddress : False
Type            : L2Only

CustomerAddress : 0.0.0.0
VirtualSubnetID : 4101
MACAddress      : 00155d5d2a03
ProviderAddress : 192.168.1.2
Rule            : TranslationMethodEncap
VMName          : vm02
UseVmMACAddress : False
Type            : L2Only

Каждая вложенная виртуальная машина имеет два виртуальных сетевых адаптера:

VMName SwitchName VirtualSubnetId MacAddress   DhcpGuard RouterGuard
------ ---------- --------------- ----------   --------- -----------
vm01   vs01                     0 00155D5D2A00       Off         Off
vm01   vs01                  4101 00155D5D2A02       Off         Off
vm02   vs01                     0 00155D5D2A01       Off         Off
vm02   vs01                  4101 00155D5D2A03       Off         Off

Адаптеры с MAC-адресами 00155D5D2A00 и 00155D5D2A01 имеют статические IP-адреса 192.168.1.3 и 192.168.1.4 соответственно и используются для ssh, что в дальнейшем не представляет интереса.

Виртуальная машина vm01 имеет статический IP-адрес 192.168.46.2, который Hyper-V узнал, как и ожидалось (Dynamic LookupRecord). Кроме того, на vm01 установлен isc-dhcp-server. Он настроен для предложения адресов из подсети 192.168.46.0/24 на eth1 (00155D5D2A02).

root@vm01:~# tail -n 4 /etc/dhcp/dhcpd.conf
subnet 192.168.46.0 netmask 255.255.255.0 {
        range 192.168.46.10 192.168.46.50;
        # option routers 192.168.46.1;
}
root@vm01:~# tcpdump -e -n -i eth1
17:20:28.909319 00:15:5d:5d:2a:03 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 342: 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:15:5d:5d:2a:03, length 300
17:20:28.909603 00:15:5d:5d:2a:02 > 00:15:5d:5d:2a:03, ethertype IPv4 (0x0800), length 342: 192.168.46.2.67 > 192.168.46.10.68: BOOTP/DHCP, Reply, length 300
17:20:30.180282 00:15:5d:5d:2a:03 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 342: 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:15:5d:5d:2a:03, length 300
17:20:30.180496 00:15:5d:5d:2a:02 > 00:15:5d:5d:2a:03, ethertype IPv4 (0x0800), length 342: 192.168.46.2.67 > 192.168.46.10.68: BOOTP/DHCP, Reply, length 300
root@vm02:~# tcpdump -e -n -i eth1
17:20:28.898397 00:15:5d:5d:2a:03 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 342: 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:15:5d:5d:2a:03, length 300
17:20:30.185906 00:15:5d:5d:2a:03 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 342: 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:15:5d:5d:2a:03, length 300

Итак, мой вопрос: почему ответ DHCP не проходит? Этот ответ не соответствует L2Only LookupRecord? Если я вручную добавлю статический LookupRecord с MAC-адресом 00: 15: 5d: 5d: 2a: 03 и IP-адресом клиента 192.168.46.10, vm02 сможет увидеть ответ DHCP и настроить предлагаемый IP-адрес, но, очевидно, это не то, что я ожидать. Мне просто нужен рабочий DHCP в виртуальной локальной сети и нужен Hyper-V для автоматического сбора адресов, полученных от DHCP. В документации Microsoft по HNVv1 упоминается, что эта технология может делать такие вещи, и L2Only LookupRecord был добавлен специально для этой цели.