我已经设置了一个 pxe 服务器,并想从中启动客户端主机。我根据https://wiki.debian.org/PXEBootInstall教程来 pxe 启动 debian 安装程序。
我们知道,pxe 服务器由 dhcp 服务器和 tftp 服务器组成。两者都可以工作。当我将客户端启动到普通的 linux 操作系统时,它可以获取一个 ipv4 地址,并通过 tftp 从服务器下载文件。但是当我启动到 pxe 时,通过在启动菜单中选择相应的选项,它会获取 ip 地址,但不会尝试下载任何文件。我在服务器上使用 tcpdump 和“journalctl -b0 -u tftpd”来获取一些信息。它没有显示客户端通过 tftp 获取文件的任何尝试。
最有趣的一点是,另一台计算机(一台旧的 Fujitsu Esprimo)能够从该服务器进行 pxe 启动。但我想启动一台“HP Elite Tower 800 G9 台式电脑”,它的行为与之前解释的一样。我想到,提供的文件可能适用于老式 bios,不适合较新的 uefi。但我排除了这种可能性,因为客户端甚至没有尝试下载该文件。但谁知道呢,这仍然是可以想象的。
我尝试更改 bios-config(F10),因为这是一个可行的解决方案。我的 uefi-config 的当前状态如下
Advanced > Boot Options > Network (PXE) Boot, enabled
Advanced > Boot Options > Network Boot TFTP Window Size, has value 1
Advanced > Boot Options > UEFI Boot Order, all options except 'NETWORK BOOT: IPV4 Network' are disabled
Security > TPM Embedded Security > TPM Device, Hidden
所以这是 dhcp 服务器 dnsmasq 的配置文件。
interface=enp0s31f6
domain=ftpdom.com
dhcp-range=192.168.0.3,192.168.0.253,255.255.255.0,1h
dhcp-boot=pxelinux.0,pxeserver,192.168.0.2
dhcp-host=bc:0f:f3:c4:[...],set:allowed,192.168.0.167
dhcp-ignore=#known
enable-tftp
tftp-root=/srv/tftp
pxe-service=x86PC, "PXELINUX (BIOS)", "pxelinux.0"
pxe-service=X86-64_EFI,"PXE (UEFI)","grubx64.efi"
pxe-service=2, "PXELINUX (0002-EFI)", "grubx64.efi"
pxe-service=6, "PXELINUX (0006-EFI)", "grubx64.efi"
pxe-service=7, "PXELINUX (0007-EFI)", "grubx64.efi"
pxe-service=8, "PXELINUX (0008-EFI)", "grubx64.efi"
pxe-service=9, "PXELINUX (0009-EFI)", "grubx64.efi"
客户端启动时的输出是
>>>Start PXE over IPv4
Station IP address is 192.168.0.167
PXE (UEFI)
PXELINUX (0007-EFI)
最后,它通过一个非常简单的 isc-dhcp 配置来工作。
其中192.168.0.2是服务器地址。