我正在为我工作的地方制作一个 PXE 服务器模型。我试图将图像文件和配置文件放在一些更有序的地方。尽管我dhcpd.conf
指定了告诉 PXELinux 在哪里查找配置文件所需的配置选项,但它仍然找不到所述文件。
这是我的 /etc/dhcp/dhcpd.conf 的样子,我想象问题就在这里。
option space PXE;
option PXE.mtftp-ip code 1 = ip-address;
option PXE.mtftp-cport code 2 = unsigned integer 16;
option PXE.mtftp-sport code 3 = unsigned integer 16;
option PXE.mtftp-tmout code 4 = unsigned integer 8;
option PXE.mtftp-delay code 5 = unsigned integer 8;
option arch code 93 = unsigned integer 16;
option space pxelinux;
option pxelinux.magic code 208 = string;
option pxelinux.configfile code 209 = text;
option pxelinux.pathprefix code 210 = text;
option pxelinux.reboottime code 211 = unsigned integer 32;
ddns-update-style none;
option domain-name "lab.solignis.com";
option domain-name-servers ns01.lab.solignis.com;
default-lease-time 600;
max-lease-time 7200;
authoritative;
log-facility local7;
subnet 192.168.147.0 netmask 255.255.255.0 {
range 192.168.147.100 192.168.147.254;
option subnet-mask 255.255.255.0;
option routers 192.168.147.2;
option broadcast-address 192.168.147.255;
default-lease-time 600;
max-lease-time 7200;
class "pxeclients" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
next-server 192.168.147.10;
if option arch = 00:00 {
option pxelinux.configfile "common.cfg";
option pxelinux.pathprefix "/configs/";
filename "/pxelinux/images/BIOS/pxelinux.0";
} elsif option arch = 00:06 {
#option pathprefix "/configs/";
#option configfile "/EFIx64/default";
filename "/images/EFIx64/syslinux.efi";
} elsif option arch = 00:07 {
#option pathprefix "/configs/";
#option configfile "/EFIx64/default";
filename "/images/EFIx64/syslinux.efi";
} elsif option arch = 00:09 {
#option pathprefix "/configs/";
#option configfile "/EFIx64/default";
filename "/images/EFIia32/syslinux.efi";
}
}
}
配置的各部分是从文档的各个部分编译而来的,注释掉的部分是旧的,我还没有修复,请忽略它们。现在我只想让标准 BIOS 正常工作(arch = 00:00
)。
这是我的 tftpboot 目录的文件结构。
server01@server01:/var/lib/tftpboot$ tree
.
└── pxelinux
├── configs
│ └── common.cfg
└── images
├── BIOS
│ ├── ldlinux.c32
│ └── pxelinux.0
├── EFIia32
│ └── syslinux.efi
└── EFIx64
└── syslinux.efi
6 directories, 5 files
我很确定我已经为 pxelinux 设置了正确的设置,但它看不到配置文件,所以有些配置不正确。有人能告诉我我配置错误的地方吗?我整天都在为此绞尽脑汁。
答案1
请注意 是configfile
相对于 的pathprefix
:
if option arch = 00:00 {
option pxelinux.configfile "common.cfg";
option pxelinux.pathprefix "/pxelinux/configs/";
filename "/pxelinux/images/BIOS/pxelinux.0";
这将在 TFTP 服务器上查找名为 /pxelinux/configs/common.cfg 的配置文件。
如果失败,只需获取 Wireshark 流量捕获并查看 TFTP 文件请求及其指向的位置。
答案2
我今天努力了,终于成功了。关键是PXELINUX 维基(我在 CentOS 7.8 上有 ISC dhcp-4.2.5-79.el7.centos.x86_64):
在 ISC dhcp 版本高于 3.0 时,站点本地选项空间从 224 开始,而不是 128(以符合 RFC 3942),因此您应将 PXELINUX 选项 208-211 定义为常规 DHCP 选项,而不是站点本地选项。例如:
option magic code 208 = string;
option configfile code 209 = text;
option pathprefix code 210 = text;
option reboottime code 211 = unsigned integer 32;
在您的 PXELINUX 引导组或类中(无论您在哪里有与 PXELINUX 相关的选项,例如“filename”选项),您可以添加,例如:
# Always include the following lines for all PXELINUX clients
option magic f1:00:74:7e;
if exists dhcp-parameter-request-list {
# Always send the PXELINUX options (specified in hexadecimal, ie: 208 = 0xd0, 209 = 0xd1, etc.)
option dhcp-parameter-request-list = concat(option dhcp-parameter-request-list,d0,d1,d2,d3);
}
# These lines should be customized to your setup
option configfile "configs/common";
option pathprefix "/tftpboot/pxelinux/files/";
option reboottime 30;
filename "/tftpboot/pxelinux/pxelinux.bin";