> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://helpdesk.ggcircuit.com/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# 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 问题时：
```
数据包捕获是事实的唯一来源。