Centos7

無法 PXE 引導 UEFI 伺服器

  • March 8, 2019

最近我在 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;
}

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:07 or option client-system-arch = 00:09{

這種期望讓我相信 VMware 的仿真 UEFI 韌體發送00:09而不是更常見的00:07架構類型,因此他們建議在 DHCP 伺服器上同時擁有這兩者。

更新:從 OP 的評論看來,取決於 x86-64 硬體(或虛擬)供應商,EFI 實現可能會有所不同,因此發送 type00:07或 type 00:09

您應該添加類型00:09並查看現在是否向 ESXi 客戶端提供了 TFTP。

我沒有辦法驗證這個理論。

引用自:https://serverfault.com/questions/926886