3. DHCP 参数故障:Option 67/66/17 配置错误、IP 地址池耗尽、DHCP 中继代理失效
DHCP 这玩意儿,说白了就是网络启动的「引路人」。PXE 客户端一开机,啥也不知道,全靠 DHCP 告诉它:「你去哪拿系统文件、你的 IP 是多少、服务器在哪儿。」
但引路人要是带错了路,或者干脆罢工了,那客户端就只能卡在启动界面干瞪眼。这一章,我带你把这几个最常见的 DHCP 坑挨个踩一遍,顺便告诉你怎么填。
3.1 Option 67/66/17:三个最容易配错的参数
这三个 Option 是 PXE 启动的核心。我见过太多人把 66 和 67 搞混,或者漏了 17,结果折腾一整天。
3.1.1 Option 66(Next-Server)
告诉客户端:「去这个 IP 找 TFTP 服务器。」
- 常见错误:填成了 DHCP 服务器自己的 IP,或者写了个不存在的地址。
- 我的经验:有一次客户报修,说新部署的 50 台机器全起不来。我一查,Option 66 写的是网关地址。网关哪有 TFTP 服务?改过来秒好。
3.1.2 Option 67(Bootfile-Name)
告诉客户端:「去 TFTP 服务器上找这个文件。」
- 常见错误:路径写错、文件名大小写不对、或者忘了加路径前缀。
- 避坑指南:我曾经遇到一个案例,文件名写的是
pxelinux.0,但实际文件是pxelinux.0.bak。就少了个后缀,排查了俩小时。
3.1.3 Option 17(Root-Path)
告诉客户端:「你的根文件系统挂载点在哪。」常用于无盘工作站或 iSCSI 启动。
- 常见错误:格式不对,或者路径指向了一个不存在的 NFS 导出。
- 注意:有些老旧的 PXE 固件根本不认 Option 17,你得用别的办法传。
核心原则:Option 66 是 IP 地址,Option 67 是文件名,Option 17 是路径。三者各司其职,别串了。
3.2 IP 地址池耗尽:无声的杀手
这个故障最隐蔽。客户端拿到 IP 了吗?拿到了。能启动吗?不能。为什么?因为 DHCP 池子里没地址了,但客户端可能拿到了一个「过期」的租约,或者干脆被拒绝。
3.2.1 症状
- 部分客户端能启动,部分不能。
- 能启动的机器,过一会儿也挂了。
- DHCP 服务器日志里全是
No free leases或Address exhausted。
3.2.2 排查方法
- 登录 DHCP 服务器,查看当前租约数量。
- 对比地址池大小和在线设备数。
- 检查租约时间(Lease Time)是否设置得太长。
我的习惯:PXE 启动环境的租约时间我一般设 10-15 分钟。够用就行,别设成 24 小时。否则机器重启后,旧租约还在,新机器就分不到地址了。
3.2.3 解决方案
| 方案 | 适用场景 | 操作 |
|---|---|---|
| 扩大地址池 | 子网内还有空闲 IP | 修改 DHCP 作用域范围 |
| 缩短租约时间 | 临时部署,机器频繁重启 | 将 Lease Time 改为 5-10 分钟 |
| 清理过期租约 | 地址池被僵尸租约占满 | 强制回收或重启 DHCP 服务 |
| 增加 DHCP 服务器 | 大规模部署,单点瓶颈 | 部署多台 DHCP 做负载分担 |
3.3 DHCP 中继代理失效:跨网段启动的噩梦
你想想看,如果客户端在 VLAN 10,DHCP 服务器在 VLAN 100,中间没有中继代理,那广播包根本过不去。客户端收不到回应,自然就启动失败了。
3.3.1 中继代理的工作原理
说白了,就是交换机或路由器上配一个 ip helper-address,把客户端的 DHCP 广播包转成单播,发给远端的 DHCP 服务器。
3.3.2 常见故障点
- 中继没配:接口下忘了加
ip helper-address。 - 配错了地址:指向了错误的 DHCP 服务器 IP。
- ACL 拦截:防火墙或 ACL 把 DHCP 的 UDP 67/68 端口给拦了。
- 中继设备性能不足:大量客户端同时请求,中继设备处理不过来,丢包。
我曾经踩过的坑:有一次在 Cisco 交换机上配了
ip helper-address,但忘了在全局模式下开启 ip dhcp relay。结果中继代理根本没生效,客户端全卡在获取 IP 那一步。查了半小时日志才发现。
3.3.3 验证中继是否正常
- 在客户端抓包,看有没有 DHCP Offer 回来。
- 在中继设备上查看
show ip dhcp relay统计信息。 - 在 DHCP 服务器上查看是否有来自中继网段的请求。
3.4 知识体系:DHCP 参数故障全景图
下面这张图,我把本章的核心逻辑串起来了。你可以把它当成排查时的路线图。
3.5 实战排查步骤
遇到 DHCP 相关的 PXE 启动故障,我一般按这个顺序来:
- 确认客户端能否获取 IP:在客户端抓包,看 DHCP Discover/Offer/Request/Ack 四步握手是否完整。
- 检查 Option 参数:在 DHCP 服务器上查看分配给客户端的 Option 66/67/17 值是否正确。
- 验证地址池状态:登录 DHCP 服务器,查看剩余可用地址数。
- 测试中继链路:在中继设备上 ping DHCP 服务器,确认网络连通性。
- 查看日志:DHCP 服务器日志、中继设备日志、客户端抓包,三管齐下。
一个小技巧:如果你不确定 Option 参数对不对,可以在 DHCP 服务器上手动给一台客户端分配固定地址,然后指定正确的 Option 值。如果这台机器能启动,那问题就出在地址池或中继上。
3.6 总结
DHCP 参数故障,说白了就是三个坑:参数配错、地址不够、中继不通。每个坑都有对应的排查方法和解决手段。你只要按顺序来,别跳步,大部分问题都能在 10 分钟内定位。
嗯,这一章就到这儿。记住那张全景图,下次遇到 DHCP 故障,拿出来对照着查,效率翻倍。