在实际的机房里,批量装机、系统救援、无盘启动和应用分发都依赖同一种底层能力:让一台没有光驱、没有操作系统、甚至没有硬盘的机器,通过网络把启动文件拉下来并完成启动。这项能力就是网络启动,而 NBM(网络启动大师)是把散乱的 DHCP、TFTP、HTTP、启动菜单和网卡驱动管理整合成一体化工具的项目。NBM 在 1.0 版本中免费开放使用,服务端同时支持 Windows 和 Linux,并内置了网卡 PnP 功能,专门解决 PXE 启动环境里“换了网卡就启不来”的经典问题。
下面的内容按“理解链路、准备环境、部署服务、配置任务、启动验证、排查故障、生产落地”这条主线展开。无论你是第一次接触 PXE 的网络工程师,还是已经在用其他网络启动工具、想对比方案的运维人员,这篇文章都能提供一个可落地的参考框架。文中所有配置、菜单和命令都基于标准 PXE 工作流程,实际使用 NBM 时,以你下载版本的界面和文件路径为准。
1. 先理解 NBM 所处的网络启动生态:PXE 链路与网卡 PnP 的价值
NBM 不是孤立的一个软件,它是站在一套成熟网络启动协议之上做整合的工具。要真正用好它,首先要理解它替你做掉了哪些底层工作。
1.1 装机运维场景里,为什么偏偏需要网络启动
传统装机的痛点集中在三处:
- 机器没有光驱,U 盘量产又要单独制作,批量部署时每台机器都要插一次盘、按一次启动键,人力成本高。
- 系统损坏、分区表丢失、引导文件被破坏时,机器进不了系统,需要外部介质救援。
- 无盘工作站、云桌面终端、批量测试机这类场景,整机不需要本地系统盘,必须依赖网络引导。
网络启动把“引导介质”从物理设备变成了网络服务。服务端维护一份启动镜像、一个驱动库、一套菜单,客户端开机时通过网络获取这些内容。几十台机器可以同时启动,镜像更新只需要改服务端,客户端无感。NBM 这类工具的价值,就是把这些服务统一管理,而不是让运维自己手工搭建一整套 DHCP、TFTP、HTTP 和驱动注入链路。
1.2 PXE 启动的基本链路:DHCP、TFTP 和启动文件是怎么配合的
PXE(Preboot eXecution Environment)是 Intel 定义的网络启动标准。客户端在 BIOS/UEFI 阶段启用网络启动后,会按下面这条链路走:
| 阶段 | 协议 | 承担角色 | 作用 |
|---|---|---|---|
| 获取网络参数 | DHCP | DHCP 服务端 | 给客户端分配 IP,同时下发 TFTP 服务器地址和启动文件名 |
| 下载启动引导器 | TFTP | TFTP 服务端 | 传输第一阶段的启动文件,例如 undionly.kpxe、pxelinux.0 |
| 加载菜单 | TFTP/HTTP | 文件服务 | 启动引导器读取菜单配置,决定加载哪个系统镜像 |
| 加载内核或 PE | TFTP/HTTP | 文件服务 | 下载 vmlinuz、initrd.img、boot.wim 等实际启动内容 |
| 进入安装或维护环境 | 本地执行 | 客户端 | 内核启动或 Windows PE 加载,进入后续流程 |
关键点在第一阶段和第二阶段是分离的。客户端网卡固件里的 PXE ROM 只负责很小的事:发 DHCP 请求、拿 IP、下载一个启动引导器。真正复杂的菜单、驱动、镜像加载逻辑都放在这个引导器里。这就是为什么日常排障时,问题往往要先区分“PXE ROM 阶段”还是“引导器阶段”。
DHCP 在中间的作用不只是分配 IP,它还要携带 PXE 专有选项。常见的三个选项是:
- option 60:客户端标识,PXE 客户端会携带“PXEClient”字符串,服务端据此识别这是网络启动请求。
- option 66:TFTP 服务器地址。
- option 67:要下载的启动文件名。
NBM 内置这些服务后,相当于把一条原本需要多个软件配合的链路做成了开箱即用的整体。
1.3 网卡 PnP 在网络启动中的地位
网卡 PnP(Plug and Play)是整个网络启动流程里最容易翻车、也最容易被忽视的部分。
PXE 启动发生在操作系统加载之前,此时网络功能完全依赖启动环境内的网卡驱动。问题在于:
- 不同厂商网卡设备 ID 不同,驱动不能通用。
- Windows PE 镜像默认只包含基础驱动,新网卡、服务器板载网卡、国产网卡经常识别不到。
- 早期 PXE ROM 依赖网卡厂商自带固件,兼容性和可维护性都差。
NBM 的网卡 PnP 功能,本质上是把“驱动匹配”自动化:启动时识别客户端网卡的厂商和设备 ID,再从驱动库里选择对应驱动,注入到 Windows PE 或引导环境中。这样同一个 PE 镜像可以覆盖多种硬件,不需要为每种网卡单独做一版镜像。
1.4 NBM 1.0 的功能范围与适用场景
从发布信息看,NBM 1.0 的核心定位是免费、跨平台、自带网卡 PnP。这意味着它适合以下几类场景:
| 场景 | 使用方式 |
|---|---|
| 批量重装 Windows | 维护一个 WinPE + 系统镜像,批量机器 PXE 启动后自动进入安装流程 |
| Linux 网络安装 | 通过 PXE 加载 vmlinuz 和 initrd,结合 Kickstart 或 Preseed 自动安装 |
| 系统救援 | 客户端从网络启动 WinPE 或 Linux 救援系统,进行磁盘修复和数据备份 |
| 无盘启动实验 | 小范围测试无盘工作站,验证启动链路 |
| 硬件兼容性测试 | 利用网卡 PnP 功能快速验证不同网卡能否统一启动 |
需要说明的是,1.0 版本的功能边界、内置菜单语法和驱动库覆盖范围,要以官方发布说明为准。但 PXE 的工作机制是标准的,下面的部署和配置思路可以直接迁移。
2. 部署前环境准备:服务端、客户端和网络这三个维度
很多网络启动项目装不起来,不是因为工具本身难,而是环境里存在 DHCP 冲突、防火墙拦截或客户端启动项没开。部署 NBM 之前,先把环境检查做完整。
2.1 服务端要求:Windows 与 Linux 两侧分别确认
NBM 1.0 的服务端同时支持 Windows 和 Linux,但两种平台的资源要求和部署方式不同。
| 项目 | Windows 服务端 | Linux 服务端 |
|---|---|---|
| 操作系统 | Windows 10/11、Windows Server 2016 及以上 | CentOS 7/8、Rocky Linux、Ubuntu 20.04/22.04、Debian 等 |
| 内存 | 建议 4 GB 以上 | 建议 4 GB 以上 |
| 磁盘 | 根据镜像数量准备,建议 50 GB 以上 | 根据镜像数量准备,建议 50 GB 以上 |
| 网络 | 一块用于启动服务的网卡,必须配置静态 IP | 一块用于启动服务的网卡,必须配置静态 IP |
| 权限 | 管理员权限运行 | root 或 sudo 权限 |
| 服务管理 | 可以注册为 Windows 服务运行 | 建议使用 systemd 管理 |
注意一个常见误区:服务端不要使用 DHCP 自动获取的地址。因为 NBM 如果启用了内置 DHCP,服务端自身 IP 必须稳定,否则客户端拿到的是错误的 TFTP 服务器地址。
2.2 客户端要求:BIOS 与 UEFI 的差异不能忽视
客户端机器需要支持网络启动,并且在 BIOS/UEFI 中开启对应选项。
| 固件类型 | 需要开启的选项 | 常见启动文件名 | 备注 |
|---|---|---|---|
| BIOS/Legacy | Network Boot、PXE Boot | undionly.kpxe、pxelinux.0 | 兼容性好,配置简单 |
| UEFI x64 | IPv4 PXE Network Boot | ipxe.efi、bootx64.efi、grubx64.efi | 需要处理 Secure Boot 签名问题 |
| UEFI ARM64 | IPv4 PXE Network Boot | snp.efi 等 ARM 版引导器 | 资源较少,先确认 NBM 是否支持 |
Secure Boot 是 UEFI 机器上最容易踩的坑。未签名的 iPXE 引导文件默认会被拒绝加载。如果客户端报“Security Violation”,要么在 BIOS 中临时关闭 Secure Boot,要么使用经过签名的引导文件,要么配合 shim 方案。学习环境直接关闭 Secure Boot 最省事,生产环境要评估合规和策略要求。
2.3 网络环境要求:先排除 DHCP 冲突这个最大隐患
网络启动对网络环境有两个硬要求:客户端能收到 DHCP 响应,客户端能访问 TFTP/HTTP 服务。
第一优先级是检查同网段内是否已有 DHCP 服务。NBM 如果启用内置 DHCP,而网络里已经存在路由器 DHCP 或 Windows DHCP 服务,就会出现地址分配混乱,客户端可能拿到错误的网关和 DNS,甚至拿不到 option 66/67。生产环境建议把网络启动服务放在独立 VLAN,或者在已经存在的 DHCP 服务上做 proxyDHCP 配置。
第二优先级是防火墙。服务端要放行以下端口:
| 端口 | 协议 | 用途 |
|---|---|---|
| 67/68 | UDP | DHCP 服务 |
| 69 | UDP | TFTP 服务 |
| 80 | TCP | HTTP 文件服务(可选) |
| 4011 | UDP | proxyDHCP 服务(如果启用) |
客户端侧一般不需要放行出方向端口,PXE ROM 会自动发起请求。
2.4 环境检查清单
部署前逐项确认下面这些内容,能省掉后续一半的排障工作:
| 检查项 | 确认方式 | 通过标准 |
|---|---|---|
| 服务端 IP 固定 | ipconfig或ip addr | IP、网关、DNS 手动配置且稳定 |
| 无 DHCP 冲突 | 检查同网段内 DHCP 服务情况 | 网络内只有一个 DHCP 源,或已做 proxyDHCP |
| 防火墙端口 | Windows 防火墙、Linux firewalld/iptables | 67/68/69/80 已放行 |
| 客户端网络启动开启 | 进入 BIOS/UEFI 确认 | Network Boot 或 PXE Boot 处于 Enabled |
| 客户端 Secure Boot 状态 | UEFI 设置确认 | 学习环境可临时关闭,生产环境评估签名方案 |
| 交换机配置 | 检查 DHCP Snooping、IP Helper | 跨网段时配置了 ip helper-address |
| 镜像文件准备 | 确认 boot.wim、vmlinuz、initrd 等文件存在 | 文件完整,路径无中文或空格 |
3. NBM 服务端部署:Windows 与 Linux 两套流程
环境确认完成后,开始部署服务端。这里给出 Windows 和 Linux 两种路径,二选一即可。所有命令都按通用示例给出,具体路径和包名以实际下载的 NBM 版本为准。
3.1 Windows 服务端部署步骤
在 Windows 上部署 NBM,关键点是“用管理员权限运行”和“注册为服务后注意日志位置”。
REM 以管理员身份打开命令行 cd C:\NBM NBM.exe install NBM.exe start如果操作成功,会看到 NBM 服务注册并启动的提示。然后放行防火墙端口:
# PowerShell 管理员方式执行 New-NetFirewallRule -DisplayName "NBM DHCP" -Direction Inbound -Protocol UDP -LocalPort 67,68 -Action Allow New-NetFirewallRule -DisplayName "NBM TFTP" -Direction Inbound -Protocol UDP -LocalPort 69 -Action Allow New-NetFirewallRule -DisplayName "NBM HTTP" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow部署完成后,用浏览器打开 NBM 提供的管理入口(通常是http://127.0.0.1:端口),确认控制台能正常加载。
3.2 Linux 服务端部署步骤
Linux 端的部署逻辑是创建专用用户、解压程序、配置 systemd 服务,避免直接使用 root 运行常驻服务。
# 创建运行用户和目录 sudo useradd -r -s /sbin/nologin nbm sudo mkdir -p /opt/nbm sudo tar -xzf nbm-1.0-linux-x64.tar.gz -C /opt/nbm sudo chown -R nbm:nbm /opt/nbm # 安装 systemd 服务(假设压缩包附带 nbm.service 模板) sudo cp /opt/nbm/nbm.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now nbm sudo systemctl status nbm如果需要在调试模式下前台运行并观察输出,可以停掉服务后直接执行:
sudo -u nbm /opt/nbm/bin/nbm run这种方式适合排查启动失败问题,日志会直接打印到终端。
3.3 服务端目录结构与关键文件
NBM 服务端解压后,典型目录结构如下:
/opt/nbm/ ├── bin/ # 可执行文件 ├── conf/ # 配置文件 │ ├── nbm.ini # 主配置,包含 DHCP、TFTP、HTTP 参数 │ └── menu.ipxe # 启动菜单脚本 ├── tftp/ # TFTP 根目录,存放引导文件 │ ├── undionly.kpxe │ ├── ipxe.efi │ ├── wimboot │ └── pxelinux.0 ├── images/ # 镜像文件目录 │ ├── winpe/ │ └── linux/ ├── drivers/ │ └── nic/ # 网卡驱动库 ├── www/ # HTTP 根目录 └── logs/ # 日志目录理解这个结构对排障很重要。PXE 报“文件找不到”时,第一反应应该是去tftp/目录确认文件是否存在、文件名是否和 DHCP option 67 完全一致。文件名的多一个字符或少一个字符,都会导致 TFTP 下载失败。
3.4 主配置参数说明
以nbm.ini为例,核心配置项通常是下面这类结构:
[dhcp] enabled = true interface = eth0 range_start = 192.168.10.100 range_end = 192.168.10.200 subnet_mask = 255.255.255.0 gateway = 192.168.10.1 dns = 192.168.10.1 boot_file_bios = undionly.kpxe boot_file_uefi = ipxe.efi tftp_server = 192.168.10.1 [tftp] enabled = true root = /opt/nbm/tftp [http] enabled = true root = /opt/nbm/www listen = 0.0.0.0:80这些参数的含义需要理解清楚:
| 参数 | 含义 | 调大/调小的影响 |
|---|---|---|
| range_start/range_end | DHCP 地址池范围 | 范围过小会导致并发启动时地址不够 |
| boot_file_bios | BIOS 客户端启动文件名 | 指错文件会直接导致 PXE 引导失败 |
| boot_file_uefi | UEFI 客户端启动文件名 | 32 位和 64 位 UEFI 文件不能混用 |
| tftp_server | 下发给客户端的 TFTP 地址 | 写成服务端实际 IP,不能写 127.0.0.1 |
| listen | HTTP 监听地址 | 生产环境按需绑内网 IP,不要盲目绑 0.0.0.0 |
4. 配置启动任务:DHCP 选项、启动菜单、PE 镜像与网卡驱动
服务端起来之后,真正进入核心配置阶段。这个阶段决定客户端启动后看到什么、能启动什么。
4.1 DHCP 选项配置:option 60/66/67 的作用
PXE 能否走到启动文件下载这一步,完全取决于 DHCP 返回的选项。标准 PXE 客户端会在 DHCP Discover 中附带 option 60 值为PXEClient,服务端识别到这个标识后,应该在响应中返回:
| 选项 | 值示例 | 作用 |
|---|---|---|
| 60 | PXEClient | 告诉客户端这是一次 PXE 响应 |
| 54 | 192.168.10.1 | DHCP 服务器标识 |
| 66 | 192.168.10.1 | TFTP 服务器地址 |
| 67 | undionly.kpxe | 启动文件名 |
如果 NBM 使用内置 DHCP,配置界面里一般直接填这几个值。如果网络里已有 DHCP 服务,可以采用 proxyDHCP 模式。proxyDHCP 不分配 IP,只负责在已有 DHCP 响应之后追加 PXE 选项。NBM 内部通常使用 4011 端口接收 proxyDHCP 请求。
参考等价配置可以这样理解:
# 这是标准 dnsmasq 的 proxyDHCP 写法,NBM 的 proxyDHCP 模式逻辑相同 port=0 dhcp-range=192.168.10.0,proxy dhcp-option=60,"PXEClient" dhcp-option=66,192.168.10.1 dhcp-option=67,undionly.kpxe enable-tftp tftp-root=/opt/nbm/tftp4.2 配置启动菜单:用 iPXE 脚本控制启动流程
NBM 的菜单通常基于 iPXE 脚本。iPXE 是 PXE 的增强实现,支持 HTTP 下载、脚本控制、简单的交互菜单。下面是一个最小菜单示例:
#!ipxe dhcp set menu-timeout 5000 menu NBM 启动菜单 item --key 1 winpe 启动 Windows PE item --key 2 ubuntu 安装 Ubuntu 22.04 item --key 3 shell 进入 iPXE Shell choose --default winpe --timeout ${menu-timeout} target goto ${target} :winpe kernel http://192.168.10.1/boot/wimboot initrd http://192.168.10.1/boot/boot.wim boot.wim boot :ubuntu kernel http://192.168.10.1/boot/vmlinuz initrd http://192.168.10.1/boot/initrd.img imgargs vmlinuz initrd=initrd.img ip=dhcp url=http://192.168.10.1/iso/ubuntu-22.04.iso boot :shell shell这个脚本的要点是:
dhcp先让客户端获取网络参数,之后才能访问 HTTP。menu定义菜单项,choose实现选择和超时逻辑,默认进入 Windows PE。- 使用 HTTP 而不是 TFTP 传输大文件,速度和稳定性都更好。TFTP 只有 512 字节窗口确认机制,大文件下载容易超时。
- 每个
LABEL对应的kernel、initrd路径都要以服务端 HTTP 根目录为基准核对。
4.3 配置 Windows PE 启动
Windows PE 是网络启动 Windows 批量安装的核心载体。客户端通过wimboot引导器加载boot.wim,然后进入 PE 环境。
实现路径如下:
- 准备好
boot.wim文件,通常从 Windows 安装介质或 ADK 中提取。 - 将
wimboot和boot.wim放到 HTTP 根目录。 - 在菜单中按上面示例增加一个 Windows PE 入口。
PE 里后续要做的事情,比如分区、释放镜像、映射网络共享盘,都是在boot.wim内的脚本或外部作业文件里控制的。NBM 的网卡 PnP 功能会在这个环节起作用:PE 加载时自动匹配网卡驱动,让 PE 能看到网络,才能继续访问网络共享。
4.4 配置 Linux 网络安装
Linux 网络安装的组件是 vmlinuz 内核文件、initrd.img 初始化镜像和自动安装配置。
菜单入口示例:
:ubuntu-install kernel http://192.168.10.1/boot/vmlinuz initrd http://192.168.10.1/boot/initrd.img imgargs vmlinuz initrd=initrd.img ip=dhcp url=http://192.168.10.1/iso/ubuntu-22.04.iso autoinstall ds=nocloud-net;s=http://192.168.10.1/ks/ boot其中autoinstall和ds=nocloud-net是 Ubuntu 的自动安装参数,url指向 ISO 镜像位置。对于 CentOS/Rocky,对应的是ks=http://192.168.10.1/ks/ks.cfgKickstart 文件。不同发行版参数不同,但整体模式一致:网络启动内核,内核通过网络获取安装源和应答文件。
4.5 网卡 PnP 驱动配置:从驱动库到自动注入
网卡 PnP 是 NBM 1.0 的宣传亮点,落地时主要做两件事:
- 维护驱动库。把各厂商网卡驱动按“厂商 ID + 设备 ID”分类放入
drivers/nic/目录。设备 ID 可以在 Windows 设备管理器的“硬件 ID”中看到,形式类似PCI\VEN_10EC&DEV_8168,也可以从 Linux 的lspci -nn输出中确认。
# Linux 下查看网卡设备 ID lspci -nn | grep -i ethernet- 自动注入。NBM 在生成 PE 启动文件或引导参数时,根据客户端上报的硬件信息,把匹配的驱动加入启动环境。这样不需要手工为每种网卡维护一个 PE 镜像。
如果脱离 NBM,手动向 boot.wim 注入网卡驱动的命令是:
dism /Mount-Wim /WimFile:C:\boot.wim /index:1 /MountDir:C:\mount dism /Image:C:\mount /Add-Driver /Driver:C:\drivers\nic dism /Unmount-Wim /MountDir:C:\mount /CommitNBM 的 PnP 功能正是把这个过程自动化了。需要强调的是,PnP 能覆盖的网卡范围取决于驱动库的完整程度。拿到生产环境前,建议先整理一份公司内部机型网卡的硬件 ID 清单,逐项验证。
5. 客户端 PXE 启动验证:正常现象与日志对照
配置完成不是结束,必须从客户端角度完整走一遍启动流程。这一步最能暴露问题。
5.1 客户端网络启动设置
在客户端 BIOS 或 UEFI 中:
- 将 Network Boot 或 PXE Boot 设为 Enabled。
- 把 Network Boot 的启动顺序放在硬盘和 U 盘之前,或者临时按启动快捷键(常见为 F12)进入网络启动。
- UEFI 机器确认 IPv4 PXE 已开启,IPv6 PXE 如果不使用可以关闭,减少干扰。
5.2 正常启动应该看到的日志序列
一次成功的 iPXE 启动,屏幕上大致会出现以下关键信息:
Press F12 for network boot... <- PXE ROM 开始 iPXE initialising devices... <- 网卡被引导器识别 Configuring (net0 ...)................ OK net0: 192.168.10.101/255.255.255.0 gw 192.168.10.1 <- DHCP 分配成功 Loading http://192.168.10.1/boot/boot.wim... http://192.168.10.1/boot/boot.wim... ok <- 镜像加载成功 Booting...如果使用 pxelinux.0,则会出现 syslinux 的菜单界面,选择菜单项后加载内核和 initrd。
按顺序验证以下节点:
| 验证节点 | 看到的现象 | 说明 |
|---|---|---|
| DHCP 获取 | 客户端显示 IP、网关 | 说明 DHCP 服务正常 |
| 引导器加载 | iPXE/pxelinux 版本信息 | 说明 option 66/67 正确 |
| 菜单出现 | 菜单项可选可跳转 | 说明菜单脚本无语法错误 |
| 镜像下载 | 进度条或 ok 提示 | 说明 HTTP/TFTP 路径正确 |
| 内核启动 | 内核日志滚动 | 说明 vmlinuz/initrd 匹配 |
| PE 环境 | WinPE 桌面或命令行出现 | 说明 boot.wim 完整 |
| 网络可用 | PE 内ipconfig能看到地址 | 说明网卡 PnP 驱动生效 |
5.3 在 WinPE 里验证网卡 PnP 是否真正生效
进入 WinPE 后,第一步不是直接跑部署脚本,而是确认网络状态。
ipconfig /all如果ipconfig显示以太网适配器没有有效 IP,说明网卡驱动没有加载。进一步用命令确认:
pnputil /enum-devices /class Net这条命令会列出 PE 环境中已识别的网卡设备。如果列表为空或设备带感叹号,说明驱动注入失败,需要回到驱动库检查。WinPE 里也可以临时手动加载驱动:
drvload X:\drivers\nic\rtl8168.infdrvload是 WinPE 内置的驱动加载命令,用它验证成功后,再回到 NBM 的 PnP 配置里把驱动路径修正。
5.4 服务端日志怎么看
客户端启动的同时,服务端会记录每次请求。Linux 下通常直接查看日志文件:
tail -f /var/log/nbm/nbm.log正常时应该能看到类似下面的记录:
DHCP Discover from 00:1e:06:xx:xx:xx DHCP Offer to 00:1e:06:xx:xx:xx TFTP Read Request: undionly.kpxe HTTP GET /boot/boot.wim HTTP GET /menu.ipxe日志里出现大量 TFTP 超时或 HTTP 404,就说明请求到了服务端,但文件或路径有问题。如果日志里完全没有客户端请求,问题就在更早的阶段,比如 DHCP 未到达、防火墙拦截、客户端根本没发起 PXE。
6. 常见问题排查:五个高频故障的定位路径
网络启动排障有固定套路:先判断问题发生在 DHCP 阶段、TFTP 阶段、引导器阶段还是内核/PE 阶段。阶段判断对了,问题基本解决一半。
6.1 客户端拿不到 IP
现象:PXE ROM 提示PXE-E51: No DHCP or proxyDHCP offers were received,客户端一直停留在一个 IP 都没有的状态。
常见原因和检查方式:
| 可能原因 | 检查方式 | 处理建议 |
|---|---|---|
| 同网段存在其他 DHCP | 检查路由器和现有 DHCP 服务 | 停用冲突服务,或把 NBM 切到独立 VLAN |
| 服务端 67/68 端口未放行 | 服务端执行端口监听检查 | 放行防火墙端口 |
| 交换机 DHCP Snooping 拦截 | 查看交换机 DHCP Snooping 日志 | 在信任端口放行 NBM 服务端 |
| 客户端与服务端跨网段 | 确认是否配置 IP Helper | 在交换机配置ip helper-address |
| NBM 的 DHCP 未启用 | 检查配置里dhcp.enabled = true | 确认启用状态并重启服务 |
关于 DHCP Snooping 需要多说一句:很多企业交换机默认开启 DHCP Snooping 后,非信任端口的 DHCP Offer 会被丢弃。NBM 服务端连接的端口需要配置为信任端口,否则客户端永远收不到响应。
6.2 TFTP 下载启动文件失败
现象:客户端已经拿到 IP,但提示PXE-E32: TFTP open timeout或报找不到文件。
TFTP 阶段的问题,十有八九出在文件名或路径上。
| 可能原因 | 检查方式 | 处理建议 |
|---|---|---|
| option 67 文件名写错 | 对比配置值和tftp/目录实际文件名 | 文件名必须完全一致,注意大小写 |
| TFTP 服务未监听 | 服务端ss -lunp | grep :69 | 确认 TFTP 服务启动 |
| 防火墙拦截 69 端口 | 检查防火墙规则 | 放行 UDP 69 |
| TFTP 根目录指向错误 | 确认配置文件里的 root 路径 | 将根目录改为实际存放引导文件的目录 |
| 引导文件过大导致超时 | 观察 TFTP 下载是否中断 | 大文件改用 HTTP 加载,减小 TFTP 文件体积 |
TFTP 协议每次只确认 512 字节数据块,传输大文件效率低且容易超时。生产环境建议只让 TFTP 传输引导器小文件,boot.wim 这类大文件走 HTTP。
6.3 引导器加载后黑屏或没有菜单
现象:客户端已经进入了 iPXE 或 pxelinux,但屏幕无菜单,或者选择菜单后黑屏。
这个阶段的问题集中在架构不匹配和文件缺失:
- BIOS 客户端拿到了 UEFI 引导文件,或者反过来。
- 菜单脚本引用的 wimboot、vmlinuz、initrd 路径不存在。
- Secure Boot 拦截了未签名引导文件,画面停在黑屏或安全提示。
- 内核与 initrd 版本不匹配,内核启动到一半崩溃。
处理建议是按架构拆分引导文件:DHCP 下发时根据客户端固件类型返回不同的 option 67。NBM 在配置里通常区分boot_file_bios和boot_file_uefi,分别指向undionly.kpxe和ipxe.efi。
6.4 进入 PE 后网卡识别不到
现象:WinPE 能启动,桌面和命令行都正常,但ipconfig没有地址,设备管理器里网卡带黄色感叹号。
这是网卡 PnP 功能要解决的核心问题,排查顺序如下:
- 确认 PE 里网卡设备 ID 是多少,在 Windows 设备管理器“详细信息 -> 硬件 ID”中查看。
- 回到 NBM 驱动库,确认存在该设备 ID 对应的驱动。
- 用
drvload手动加载对应驱动,验证驱动文件本身是否能工作。 - 确认驱动架构匹配:64 位 PE 必须使用 64 位驱动,不能混用。
- 确认驱动是 PE 可用的 WinPE 驱动,而不是普通安装版驱动。部分 OEM 驱动在 PE 下无法直接使用,需要提取其 INF 和 sys 文件。
这一步最容易被忽略的是架构匹配。一个 32 位的网卡驱动注入到 64 位 PE 中,驱动列表里能看到,但永远无法生效。
6.5 排查顺序清单
遇到任何网络启动故障,按这个顺序检查,不要跳步:
| 顺序 | 检查内容 | 确认方法 |
|---|---|---|
| 1 | 客户端是否发起 PXE | 观察 PXE ROM 提示和网口灯 |
| 2 | 客户端是否拿到 IP | 看客户端 IP 显示或抓包 DHCP 交互 |
| 3 | 服务端是否收到请求 | 查看 NBM 日志 |
| 4 | option 66/67 是否正确 | 抓包或查看 DHCP 响应 |
| 5 | 引导文件是否存在 | 核对 TFTP 根目录文件名 |
| 6 | 引导器能否加载菜单 | 观察菜单显示情况 |
| 7 | 菜单引用的镜像路径是否正确 | 核对 HTTP 请求日志 |
| 8 | 内核/PE 是否加载成功 | 观察启动日志和 PE 命令行 |
| 9 | 网卡驱动是否生效 | ipconfig、pnputil验证 |
7. 生产环境使用 NBM 的落地建议与扩展方向
测试环境跑通之后,进入生产环境还要补很多工作。网络启动服务是基础设施,一旦出现问题,影响的是整个机房的批量操作。
7.1 学习环境与生产环境的差异
| 维度 | 学习环境 | 生产环境 |
|---|---|---|
| DHCP 模式 | NBM 内置 DHCP 直接分配 | 推荐 proxyDHCP 或独立 VLAN 内置 DHCP |
| 网络范围 | 单网段、直连交换机 | 多网段、配置 DHCP Relay、划分广播域 |
| 文件传输 | TFTP 即可 | 大镜像走 HTTP,TFTP 只传引导器 |
| 安全控制 | 不配置,方便实验 | MAC 白名单、VLAN 隔离、端口受限 |
| 镜像管理 | 一份 boot.wim 测试 | 按硬件型号和系统版本分类管理,版本化命名 |
| 日志与监控 | 手动看日志 | 集中收集日志,配置告警 |
| 变更流程 | 直接改配置 | 先备份配置文件,测试机验证后再批量 |
7.2 服务部署上的三条建议
第一,尽量使用 proxyDHCP 模式接管 PXE 选项,而不是替换现有 DHCP。生产网络的 IP 分配通常由核心设备统一管理,直接替换 DHCP 风险太大。proxyDHCP 只增加 PXE 相关选项,对 IP 分配无影响。
第二,将镜像服务从 TFTP 迁移到 HTTP。boot.wim 动辄数 GB,TFTP 传输慢且容易断。让 TFTP 只承担引导器下载,镜像文件统一放 HTTP,可以显著提升批量启动的稳定性和速度。
第三,服务端绑定专用网卡和静态地址。不要把 NBM 和办公网混在同一张网