0

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

DHCP & TFTP 服务器

  • IP 192.168.1.2
  • VLAN 识别已禁用

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

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

开机机器

  • HyperV Gen2
  • 没有虚拟 HDD 或 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
4

2 回答 2

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  
于 2021-02-06T20:30:50.940 回答
0

我想我在使用数字钢筋供应器时遇到了同样的问题。在第 1 代上效果很好,但在第 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

于 2019-04-15T10:15:54.813 回答