HyperV Gen2 VM无法通过PXE引导

时间:2018-07-12 07:28:39

标签: hyper-v dhcp ipxe

我在HyperV中有两个VM,它们都在同一虚拟交换机(内部)和同一子网上。我正在尝试将其中一个设置为用于PXE引导的DHCP和TFTP服务器。在Gen1机器上,它可以与pxelinux一起正常工作。不幸的是,带有UEFI的Gen2无法正常工作。

DHCP和TFTP服务器

  • IP 192.168.1.2
  • VLAN标识已禁用

DHCP-在具有“主机”网络类型的docker容器中运行的ISC DHCP服务器,其配置如下:

set vendorclass = option vendor-class-identifier;
option pxe-system-type code 93 = unsigned integer 16;
set pxetype = option pxe-system-type;

authoritative;

default-lease-time 7200;
max-lease-time 7200;

option tftp-server-name "192.168.1.2";
option bootfile-name "efi/core.efi";

subnet 192.168.1.0 netmask 255.255.255.0 {
    interface "eth0:0";
    option routers 192.168.1.1;
    option subnet-mask 255.255.255.0;
    range 192.168.1.100 192.168.1.150;
    option broadcast-address 192.168.1.255;
    option domain-name-servers 8.8.8.8, 8.8.4.4;
    option domain-name   "ad.lholota.net";
    option domain-search "ad.lholota.net";

    if substring(vendorclass, 0, 9)="PXEClient" {
        if pxetype=00:06 or pxetype=00:07 {
            filename "efi/core.efi";
        } else {
            filename "pxelinux/pxelinux.0";
        }
    }
    next-server 192.168.1.2;
}

TFTP-在“主机”类型网络上的docker容器中运行的tftp-hpa。我可以通过标准的tftp客户端手动下载efi文件。

启动机

  • HyperV Gen2
  • 没有虚拟硬盘或DVD
  • “固件”选项卡在引导顺序中只有一项-网络
  • 安全启动已禁用
  • VLAN标识已禁用
  • 网络适配器指向与第一个VM相同的内部交换机
    • 启用虚拟机队列-已选中
    • 启用IPsec任务卸载-已选中,最大数量:512
    • 动态MAC地址
    • 启用DHCP保护-未选中
    • 启用路由器广告防护-未选中
    • 受保护的网络-未选中
    • 镜像模式-无
    • 启用设备命名-未选中

问题在于机器甚至没有到达TFTP服务器,因为它没有完成DHCP Discover-Offer-Request-Ack流。如以下dhcpdump所示,它被卡在要价上。引导计算机从不发送请求消息。有趣的是,基于BIOS的Gen1 HyperV机器可以毫无问题地启动,因此DHCP流可以在那里工作。

您能给我提示一下哪里有问题吗?

  TIME: 2018-07-11 19:49:37.641
    IP: 0.0.0.0 (0:15:5d:0:50:d0) > 255.255.255.255 (ff:ff:ff:ff:ff:ff)
    OP: 1 (BOOTPREQUEST)
 HTYPE: 1 (Ethernet)
  HLEN: 6
  HOPS: 0
   XID: 8bf1c250
  SECS: 0
 FLAGS: 7f80
CIADDR: 0.0.0.0
YIADDR: 0.0.0.0
SIADDR: 0.0.0.0
GIADDR: 0.0.0.0
CHADDR: 00:15:5d:00:50:d0:00:00:00:00:00:00:00:00:00:00
 SNAME: .
 FNAME: .
OPTION:  53 (  1) DHCP message type         1 (DHCPDISCOVER)
OPTION:  57 (  2) Maximum DHCP message size 1472
OPTION:  55 ( 35) Parameter Request List      1 (Subnet mask)
                          2 (Time offset)
                          3 (Routers)
                          4 (Time server)
                          5 (Name server)
                          6 (DNS server)
                         12 (Host name)
                         13 (Boot file size)
                         15 (Domainname)
                         17 (Root path)
                         18 (Extensions path)
                         22 (Maximum datagram reassembly size)
                         23 (Default IP TTL)
                         28 (Broadcast address)
                         40 (NIS domain)
                         41 (NIS servers)
                         42 (NTP servers)
                         43 (Vendor specific info)
                         50 (Request IP address)
                         51 (IP address leasetime)
                         54 (Server identifier)
                         58 (T1)
                         59 (T2)
                         60 (Vendor class identifier)
                         66 (TFTP server name)
                         67 (Bootfile name)
                         97 (UUID/GUID)
                        128 (???)
                        129 (???)
                        130 (???)
                        131 (???)
                        132 (???)
                        133 (???)
                        134 (???)
                        135 (???)

OPTION:  97 ( 17) UUID/GUID                 008c0c7ab81331a0 ...z..1.
                        4297445b2e41610e B.D[.Aa.
                        a8               .
OPTION:  94 (  3) Client NDI                010300           ...
OPTION:  93 (  2) Client System             0007             ..
OPTION:  60 ( 32) Vendor class identifier   PXEClient:Arch:00007:UNDI:003000
---------------------------------------------------------------------------

  TIME: 2018-07-11 19:49:37.641
    IP: 0.0.0.0 (0:15:5d:0:50:12) > 255.255.255.255 (ff:ff:ff:ff:ff:ff)
    OP: 2 (BOOTPREPLY)
 HTYPE: 1 (Ethernet)
  HLEN: 6
  HOPS: 0
   XID: 8bf1c250
  SECS: 0
 FLAGS: 7f80
CIADDR: 0.0.0.0
YIADDR: 192.168.1.105
SIADDR: 192.168.1.2
GIADDR: 0.0.0.0
CHADDR: 00:15:5d:00:50:d0:00:00:00:00:00:00:00:00:00:00
 SNAME: .
 FNAME: efi/core.efi.
OPTION:  53 (  1) DHCP message type         2 (DHCPOFFER)
OPTION:  51 (  4) IP address leasetime      7200 (2h)
OPTION:   1 (  4) Subnet mask               255.255.255.0
OPTION:   3 (  4) Routers                   192.168.1.1
OPTION:   6 (  8) DNS server                8.8.8.8,8.8.4.4
OPTION:  15 ( 14) Domainname                ad.lholota.net
OPTION:  28 (  4) Broadcast address         192.168.1.255

2 个答案:

答案 0 :(得分:1)

我认为在 win10 2004(19041.685) 上启动 HyperV 虚拟机时遇到了同样的问题:第 1 代有效,第 2 代超时而无需请求启动文件。

我强烈怀疑这是 GEN2 UEFI PXE 实现的问题。因为只要我在 pxe 启动菜单中有至少两个条目可供选择,它就会按预期请求文件和下载。

我为 tftp 和 DHCP 运行 dnsmasq,当且仅当最后两行中的至少一行被取消注释时,下面的配置文件才有效。 (pxe-service=x86-64_EFI 和 pxe-service=7 相等)

配置上下文:https://linuxconfig.org/how-to-configure-a-raspberry-pi-as-a-pxe-boot-server

# /etc/dnsmasq.d/03-tftpboot.conf
enable-tftp
tftp-lowercase
tftp-root=/mnt/data/netboot
pxe-prompt="Choose:"
pxe-service=x86PC,"PXELINUX (BIOS)",bios/pxelinux.0
pxe-service=x86PC,"WinPE (BIOS)",boot/pxeboot.n12
pxe-service=x86-64_EFI,"PXELINUX (EFI)",efi64/syslinux.efi
pxe-service=x86-64_EFI,"winpe (EFI)",boot/wdsmgfw.efi
#pxe-service=7,"PXELINUX (EFI-7)",efi64/syslinux.efi  

答案 1 :(得分:0)

我认为使用数字钢筋预配器时遇到同样的问题。在Gen 1上效果很好,但在Gen 2上效果不好。也遵循相同的配置。

查看数字钢筋代码似乎应该可以,但不能:https://github.com/digitalrebar/provision/blob/8269e1c7ff12a82854c19eccd114d064e2278211/midlayer/pxe.go#L252

我认为这可能与之相关:

https://wiki.fogproject.org/wiki/index.php/BIOS_and_UEFI_Co-Existence

https://serverfault.com/questions/739138/hyper-v-2016-gen2-vm-pxe-dhcp-timeout-wireshark-dhcp-discover-offer