pxe自动化装机必须依赖dhcp提供ip地址及引导指令,核心是配置filename(如pxelinux.0)和next-server(tftp服务器ip),缺一不可;客户端据此通过tftp下载启动文件,进而加载内核、initrd和kickstart实现无人值守安装。

Linux自动化装机(如PXE启动、Kickstart、AutoYaST或Cloud-init初始化)过程中,客户端在未配置任何网络参数前,必须依赖DHCP获取一个临时IP地址,才能进一步下载内核、initrd、安装镜像和配置脚本。这个过程完全由DHCP服务器驱动,关键在于它不仅要分配IP,还要告诉客户端“下一步该找谁、下载什么”。
以下是实现这一目标的核心要点和实操步骤:
DHCP服务器需提供PXE引导必需的三项扩展参数
标准DHCP只分发IP、掩码、网关、DNS,但自动化装机需要额外引导信息。必须在/etc/dhcp/dhcpd.conf中为对应子网添加:
-
filename:指定客户端应加载的网络启动程序(通常是pxelinux.0、grubx64.efi或bootx64.efi) -
next-server:指定TFTP服务器地址(即存放启动文件的主机IP,通常与DHCP服务器同一台) -
option arch(可选,用于UEFI区分):例如option arch code 93 = integer 16;表示x86_64 EFI
示例配置片段:
subnet 192.168.50.0 netmask 255.255.255.0 {
range 192.168.50.100 192.168.50.200;
option routers 192.168.50.1;
option domain-name-servers 8.8.8.8;
# PXE关键项
filename "pxelinux.0"; # BIOS传统启动
# filename "EFI/boot/bootx64.efi"; # UEFI启动(路径按实际TFTP结构)
next-server 192.168.50.10; # TFTP服务器IP(非DHCP服务器自身IP也可,但需可达)
# (可选)区分BIOS/UEFI
if exists user-class and option user-class = "iPXE" {
filename "http://192.168.50.10/boot.ipxe";
}
}
确保DHCP服务监听正确接口且权限无误
- 编辑
/etc/default/isc-dhcp-server(Debian/Ubuntu)或/etc/sysconfig/dhcpd(RHEL/CentOS),明确指定接口:INTERFACESv4="ens33" # 不要用 eth0 这类易变名,推荐用可预测网卡名
- 检查租约目录权限:
sudo mkdir -p /var/lib/dhcp sudo chown dhcpd:dhcpd /var/lib/dhcp # RHEL系用 dhcp:dhcp;Debian系用 dhcpd:dhcpd
客户端启动时自动触发DHCP+PXE流程
无需手动干预:
- 开机选择PXE启动(或设置BIOS/UEFI默认网络启动)
- 网卡固件广播
DHCPDISCOVER,并携带PXE client标识 - DHCP服务器识别后,返回含
filename+next-server的DHCPOFFER - 客户端用该IP联系
next-server的TFTP服务,拉取启动文件 - 启动文件(如
pxelinux.0)再通过TFTP或HTTP加载内核与initrd,最终挂载Kickstart等配置
验证是否生效的三个检查点
- 查看DHCP日志是否有成功应答:
journalctl -u isc-dhcp-server | grep -i "offer\|pxe"
- 在TFTP根目录确认
pxelinux.0或bootx64.efi存在且可读 - 客户端启动时屏幕应显示类似
DHCP (192.168.50.10) … ok→TFTP … retrieving pxelinux.0→ 进入菜单
不复杂但容易忽略的是:DHCP分配的只是“临时通信凭证”,真正驱动自动化装机的是它附带的引导指令。缺了filename和next-server,客户端拿到IP也只会停在联网阶段,无法继续。











