无法通过 PXE 启动 UEFI 服务器

无法通过 PXE 启动 UEFI 服务器

最近我在 UEFI 启动方面遇到了很多问题。我有两个虚拟机用于测试。一个运行 DHCP/TFTP(CentOS 7),另一个是设置为 UEFI 启动的客户端。我已经使用传统启动测试了它,它能够启动并提取映像。但看起来 UEFI 客户端从未接受过其 DHCP 分配。两台机器都位于同一个虚拟线路(端口组)上,因此不应该出现网络问题。我镜像了之前做过的另一个设置,没有同样的问题,所以我有点不知所措。我觉得我遗漏了一些小东西,所以如果有人注意到了什么,我将不胜感激!谢谢!

我对测试环境进行了 pcap 测试,可以看到来自我的服务器的 DHCP 回复:

# tcpdump -enli ens192 port 67
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens192, link-type EN10MB (Ethernet), capture size 262144 bytes
12:45:51.742154 00:0c:29:ae:ff:e7 > Broadcast, ethertype IPv4 (0x0800), length 389: 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:0c:29:ae:ff:e7, length 347
12:45:51.742436 00:0c:29:7a:7c:27 > Broadcast, ethertype IPv4 (0x0800), length 342: 132.0.101.2.bootps > 255.255.255.255.bootpc: BOOTP/DHCP, Reply, length 300
12:46:07.742311 00:0c:29:ae:ff:e7 > Broadcast, ethertype IPv4 (0x0800), length 389: 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:0c:29:ae:ff:e7, length 347
12:46:07.742506 00:0c:29:7a:7c:27 > Broadcast, ethertype IPv4 (0x0800), length 342: 132.0.101.2.bootps > 255.255.255.255.bootpc: BOOTP/DHCP, Reply, length 300

然后我可以在日志中看到 DHCP 实际上正在向启动服务器提供一个地址(请注意,这是一个无法访问 NTP 的离线环境):

Aug 17 12:42:23 stager named[1148]: error (network unreachable) resolving './NS/IN': 2001:500:12::d0d#53
Aug 17 12:42:23 stager named[1148]: error (network unreachable) resolving '3.centos.pool.ntp.org/AAAA/IN': 2001:500:12::d0d#53
Aug 17 12:42:23 stager named[1148]: error (network unreachable) resolving '3.centos.pool.ntp.org/A/IN': 2001:500:12::d0d#53
Aug 17 12:42:28 stager dhcpd: DHCPDISCOVER from 00:0c:29:ae:ff:e7 via ens192
Aug 17 12:42:28 stager dhcpd: DHCPOFFER on 132.0.101.11 to 00:0c:29:ae:ff:e7 via ens192

无论如何,客户端实际上从未启动并停留在下面的屏幕上,直到放弃: 在此处输入图片描述

我的dhcpd.conf:

max-lease-time 7200;
ddns-update-style none;
authoritative;
log-facility local7;
allow booting;
allow bootp;

option client-system-arch code 93 = unsigned integer 16;

class "pxeclients" {
        match if substring(option vendor-class-identifier, 0, 9) = "PXEClient";
        #TFTP Server
        option tftp-server-name "132.0.101.2";
        next-server 132.0.101.2;
        if option client-system-arch = 00:00 {
                filename = "bios/pxelinux.0";
        } elsif option client-system-arch = 00:07 {
                filename = "images/esxi6.7/efi/boot/bootx64.efi";
                option boot-size 344;
        }
}

subnet 132.0.101.0 netmask 255.255.255.0 {
        option routers 132.0.101.1;
        option domain-name-servers 132.0.101.2;
        range 132.0.101.11 132.0.101.99;
}

答案1

DHCP客户端系统架构类型选项为 PXE EFI 客户端定义了几种体系结构。其中,两种体系结构值得关注:

Type   Architecture Name
----   -----------------
[...]
  7    EFI BC
[...]
  9    EFI x86-64

EFI BC是一个独立于处理器的驱动程序字节码实现并且经常被 UEFI PXE 启动使用。

现在,在任何最新的 VMware 文档中,过滤器都接受两种类型00:07 或者 00:09,例如此 PDF 文档使用 PXE 安装 ESXi - VMware vSphere 6.0, 或者DHCP 配置示例,均包括:

if option client-system-arch = 00:07or option client-system-arch = 00:09{

这种期望让我相信 VMware 的模拟 UEFI 固件发送的00:09不是更常见的00:07体系结构类型,因此他们建议在 DHCP 服务器上同时拥有这两种类型。
更新:从 OP 的评论来看,根据 x86-64 硬件(或虚拟)供应商的不同,EFI 实现可能有所不同,因此发送类型00:07或类型00:09

您应该添加类型00:09并查看现在是否为 ESXi 客户端提供 TFTP。

我没有办法验证这个理论。

相关内容