PXE 启动失败 - PXE-E21(远程主机已取消)
🧩 PXE 启动失败 - PXE-E21(远程主机已取消)
由异常 DHCP 助手或辅助 DHCP 服务器导致
🔎 概述
当 ggRock 服务器配置为完整 DHCP + PXE 时,但同一网段上的另一台设备也在响应 DHCP 请求时,会出现此问题。
常见客户端错误:
PXE-E21: Remote host cancelled
这几乎总是由以下原因引起的:
- DHCP 助手(IP helper-address)
- 第二个 DHCP 服务器
- PXE 响应程序(Acronis、WDS 等)
- 无意中转发 DHCP 的网络设备
🛠️ 症状
- PXE 客户端收到 IP 地址但启动失败
- 启动成功不稳定
- dnsmasq 日志中出现
DHCPNAK wrong server-ID - 客户端显示 PXE-E21 错误
- tcpdump 显示来自多个 IP 的应答
示例捕获:
tcpdump -ni vmbr0 port 67 or port 68
示例问题输出:
192.168.50.1.67 > 255.255.255.255.68: BOOTP/DHCP, Reply
192.168.50.10.67 > 255.255.255.255.68: BOOTP/DHCP, Reply
在此示例中:
192.168.50.10= ggRock(预期)192.168.50.1= 意外响应者(网关或上游设备)
如果多个设备回复,PXE 行为会变得不可预测。
🧠 为什么会发生这种情况
在 PXE 启动期间:
- 客户端发送 DHCPDISCOVER
- 多个设备响应
- 客户端可能选择的 DHCP 服务器不是 ggRock
- ggRock 发送 DHCPNAK(wrong server-ID)
- PXE 过程中止
- 客户端显示 PXE-E21
即使 DHCP 助手配置不当,也可能导致此问题。
PXE 对重复响应者极其敏感。
✅ 解决方案
步骤 1 – 验证多个响应者
在 ggRock 服务器上:
tcpdump -eni vmbr0 'port 67 or port 68'
启动一个客户端并观察:
- 应答是否来自多个 IP?
- 意外响应者的 MAC 地址是什么?
步骤 2 – 检查 DHCP 助手
在上游路由器或第 3 层交换机上,验证:
- 未配置
ip helper-address - 该 VLAN 上未启用 DHCP 中继
- 未启用引导服务
示例(类似 Cisco 的语法):
interface vlan 50
no ip helper-address
步骤 3 – 检查 PXE 响应程序
验证这些在任何其他系统上都已禁用:
- Acronis PXE 响应程序
- Windows 部署服务(WDS)
- SCCM PXE 服务点
- 其他映像平台
即使 DHCP 已禁用,PXE 响应程序仍然可能造成干扰。
步骤 4 – 确认仅 ggRock 响应
运行:
tcpdump -ni vmbr0 port 67 or port 68
您应该只看到来自以下地址的应答:
192.168.50.10
如果仅 ggRock 响应,PXE 应该正常运行。
🏗️ 推荐配置结构
为防止 ggrock-linux-configurator 覆盖完整 DHCP 配置:
1️⃣ 设置 dnsmasq 配置目录
验证:
grep CONFIG_DIR /etc/default/dnsmasq
应显示:
CONFIG_DIR=/etc/dnsmasq.main.d
2️⃣ 拆分 DHCP 和 PXE 配置
/etc/dnsmasq.main.d/10-dhcp.conf
包含:
dhcp-rangedhcp-optiondhcp-authoritative
示例:
dhcp-range=192.168.50.20,192.168.50.100,255.255.255.0,12h
dhcp-option=option:router,192.168.50.1
dhcp-option=option:dns-server,8.8.8.8,8.8.4.4
dhcp-authoritative
/etc/dnsmasq.main.d/20-pxe.conf
包含:
enable-tftptftp-rootdhcp-bootdhcp-vendorclass- iPXE 链式加载逻辑
运行完整 DHCP 时,不要使用 ProxyDHCP(dhcp-range=...,proxy)。
🔒 最佳实践(推荐)
如果您的交换机支持:
- 启用 DHCP 监听
- 仅将 ggRock 端口标记为受信任
- 阻止所有其他 DHCP 应答
这可防止将来出现意外 DHCP 响应程序。
📌 根本原因示例
在一个案例中:
- PXE 助手仍在上游配置
- 它与 ggRock 并行响应
- 客户端收到多个 DHCP 提议
- 发生 PXE-E21
- 删除助手立即解决了问题
🧾 总结
ggRock 完整 DHCP 部署期间的 PXE-E21 几乎总是由以下原因引起的:
- 第二个 DHCP 服务器
- DHCP 助手
- PXE 响应程序
PXE 需要网段上单一权威 DHCP 服务器。
排查 DHCP 问题时:
数据包捕获是事实的唯一来源。更新于: 24/04/2026
谢谢!
