2、DHCP服务器配置:安装与配置dhcpd、option 66/67设置、IP地址池规划、租约管理
DHCP 服务器,说白了就是给网络里的设备自动发「身份证」和「地图」的。在 PXE 网络启动里,它不光要发 IP 地址,还得告诉客户端:「你的启动文件在哪台 TFTP 服务器上」。这一步要是配错了,后面全白搭。
我个人习惯,先把 DHCP 服务装好、跑通,再慢慢调那些高级选项。别一上来就搞 option 66/67,容易把自己绕晕。
2.1 安装 dhcpd
在 CentOS/RHEL 系系统上,安装很简单:
yum install -y dhcp
# 或者用 dnf,看你的系统版本
dnf install -y dhcp
装完之后,主配置文件在 /etc/dhcp/dhcpd.conf。嗯,这里要注意,默认这个文件几乎是空的,只有几行注释。你得自己写。
Debian/Ubuntu 系也差不多:
apt install -y isc-dhcp-server
装完先别急着启动,配置文件还没写呢。
2.2 基础配置与 IP 地址池规划
地址池规划,我建议你提前想清楚几个问题:
- 这个子网有多少台机器要 PXE 启动?
- 普通办公设备和 PXE 启动设备要不要分开网段?
- 租约时间设多长?
我在项目里遇到过,有人把租约时间设成 1 天,结果测试的时候改了几次配置,客户端一直拿旧租约,折腾了半天才发现是租约没释放。所以测试环境我一般设 5 分钟,生产环境再改回来。
来看一个基础配置模板:
# /etc/dhcp/dhcpd.conf
option domain-name "example.com";
option domain-name-servers 8.8.8.8, 8.8.4.4;
default-lease-time 600; # 测试用 10 分钟
max-lease-time 7200; # 最大 2 小时
# 声明一个子网
subnet 192.168.100.0 netmask 255.255.255.0 {
range 192.168.100.100 192.168.100.200; # 地址池
option routers 192.168.100.1; # 网关
option broadcast-address 192.168.100.255; # 广播地址
}
地址池规划有个小技巧:把 PXE 用的地址段和普通 DHCP 地址段分开。比如:
| 用途 | 地址范围 | 说明 |
|---|---|---|
| 普通办公设备 | 192.168.100.100 - 192.168.100.150 | 租约 24 小时 |
| PXE 启动设备 | 192.168.100.200 - 192.168.100.250 | 租约 10 分钟,方便调试 |
| 静态保留 | 192.168.100.2 - 192.168.100.50 | 服务器、网络设备 |
2.3 Option 66/67 设置——PXE 启动的关键
这两个选项是 PXE 启动的灵魂。为什么?
- Option 66:TFTP 服务器的 IP 地址或主机名
- Option 67:启动文件名(比如 pxelinux.0 或 bootx64.efi)
客户端拿到 IP 之后,会去 option 66 指定的服务器上,下载 option 67 指定的文件。就这么简单。
配置方法:
# 在 subnet 块里加上这两行
subnet 192.168.100.0 netmask 255.255.255.0 {
range 192.168.100.200 192.168.100.250;
option routers 192.168.100.1;
# PXE 启动选项
next-server 192.168.100.10; # option 66
filename "pxelinux.0"; # option 67
}
如果你用的是 UEFI 启动,文件名要改成 bootx64.efi。我曾经在这个坑里摔过一次——BIOS 和 UEFI 的启动文件名不一样,客户端一直报 TFTP 超时,查了半天才发现文件名写错了。
2.4 租约管理
租约文件默认在 /var/lib/dhcpd/dhcpd.leases。你可以直接 cat 看内容:
cat /var/lib/dhcpd/dhcpd.leases
lease 192.168.100.101 {
starts 2 2025/01/14 09:15:22;
ends 2 2025/01/14 09:25:22;
cltt 2 2025/01/14 09:15:22;
binding state active;
next binding state free;
rewind binding state free;
hardware ethernet 00:1a:2b:3c:4d:5e;
uid "\001\000\032+
租约管理常用的操作:
- 查看租约:
dhcpd -p -f可以前台运行并打印日志 - 手动释放租约:删掉租约文件里对应的记录,然后重启 dhcpd
- 清理过期租约:直接删掉
dhcpd.leases文件(会丢失所有租约,慎用)
避坑指南:我曾经在生产环境直接删了租约文件,结果所有客户端重新获取 IP,网络断了 5 分钟。正确的做法是:
- 停掉 dhcpd 服务
- 备份租约文件
- 编辑租约文件,只删掉你想释放的那条记录
- 启动 dhcpd 服务
2.5 完整配置示例与启动
把上面所有内容串起来,一个完整的 PXE 专用 DHCP 配置大概长这样:
# /etc/dhcp/dhcpd.conf
option domain-name "pxe.lab";
option domain-name-servers 192.168.100.10;
default-lease-time 600;
max-lease-time 7200;
# 日志记录,方便排查
log-facility local7;
subnet 192.168.100.0 netmask 255.255.255.0 {
range 192.168.100.200 192.168.100.250;
option routers 192.168.100.1;
option broadcast-address 192.168.100.255;
# PXE 关键配置
next-server 192.168.100.10;
filename "pxelinux.0";
# 给特定机器固定 IP(按 MAC 地址)
host pxe-server {
hardware ethernet 00:0c:29:ab:cd:ef;
fixed-address 192.168.100.10;
}
}
配置检查与启动:
# 检查配置语法
dhcpd -t -cf /etc/dhcp/dhcpd.conf
# 如果输出没有报错,就可以启动了
systemctl start dhcpd
systemctl enable dhcpd
# 查看状态
systemctl status dhcpd
启动之后,记得看日志:
tail -f /var/log/messages | grep dhcpd
看到类似 DHCPDISCOVER、DHCPOFFER、DHCPREQUEST、DHCPACK 这样的关键字,说明客户端和服务器在正常握手。
2.6 核心流程回顾
我把 DHCP 在 PXE 启动里的完整流程画了张图,方便你理解:
这张图把整个流程串起来了。你配置的时候,心里要清楚:DHCP 不只是发 IP,它还负责「指路」。option 66 和 67 就是那个路标。
2.7 常见问题与排查
| 现象 | 原因 | 解决办法 |
|---|---|---|
| 客户端报 "No DHCPOFFER received" | DHCP 服务器没响应 | 检查 dhcpd 是否运行、防火墙是否放行 UDP 67/68 端口 |
| 客户端报 "PXE-E53: No boot filename received" | option 66/67 没配或配错 | 检查 next-server 和 filename 配置,重启 dhcpd |
| 客户端拿到 IP 但 TFTP 超时 | option 66 指向的 TFTP 服务器不可达 | ping 一下 TFTP 服务器 IP,检查 TFTP 服务是否运行 |
| 客户端一直拿同一个 IP | 租约没释放 | 手动清理租约文件或等租约过期 |
tcpdump -i eth0 -n port 67 or port 68。能看到 DHCPDISCOVER、DHCPOFFER、DHCPREQUEST、DHCPACK 这四个包,说明 DHCP 部分没问题。
嗯,DHCP 服务器配置这块,说白了就是三步:装软件、配地址池、加 option 66/67。但每一步都有细节,尤其是租约管理和地址池规划,很多人不重视,结果上线之后问题不断。我建议你搭个测试环境,把上面这些配置亲手敲一遍,遇到问题再看日志,比光看书强多了。