HNVv1 虚拟网络中虚拟机上的 DCHP 服务器

HNVv1 虚拟网络中虚拟机上的 DCHP 服务器

我有一台装有 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 按预期获知(动态查找记录)。此外,isc-dhcp-server 安装在 vm01 上。它配置为在 eth1(00155D5D2A02)上提供子网 192.168.46.0/24 中的地址。

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 不匹配?如果我手动添加 MAC 地址为 00:15:5d:5d:2a:03 且客户 IP 地址为 192.168.46.10 的静态 LookupRecord,vm02 可以看到 DHCP 回复并设置提供的 IP 地址,但显然这不是我想要的。我只需要在虚拟本地网络中运行 DHCP,并且需要 Hyper-V 自动收集从 DHCP 收到的地址。有关 HNVv1 的 Microsoft 文档提到这项技术可以做这样的事情,并且专门为此目的添加了 L2Only LookupRecord。

相关内容