文章分类: ggRock
本条还可参阅:

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 启动期间:

  1. 客户端发送 DHCPDISCOVER
  2. 多个设备响应
  3. 客户端可能选择的 DHCP 服务器不是 ggRock
  4. ggRock 发送 DHCPNAK(wrong server-ID)
  5. PXE 过程中止
  6. 客户端显示 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-range
  • dhcp-option
  • dhcp-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-tftp
  • tftp-root
  • dhcp-boot
  • dhcp-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

这篇文章有帮助吗?

分享您的反馈意见

取消

谢谢!