無法 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; }
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 實現可能會有所不同,因此發送 type
00:07
或 type00:09
。您應該添加類型
00:09
並查看現在是否向 ESXi 客戶端提供了 TFTP。我沒有辦法驗證這個理論。