我正在尝试以 UEFI 模式从 Windows 2012R2 WDS 服务器启动 PC。如果仅有的如果客户端与 DHCP/PXE 服务器位于不同的子网中,则其中一些服务器会失败。(它始终在 BIOS 模式下工作,但我需要 UEFI。)
症状是,在初始 DHCP 请求/提供/请求/确认序列之后,正常工作的客户端会联系 PXE 服务器以获取其启动信息,而出现故障的客户端则不会。
除了 PXE 之外,还有两台 DHCP 服务器(也是 2012R2)。它们上没有配置与启动相关的 DHCP 选项;网络上启用了 DHCP 中继,并将信息中继到所有三台服务器。
这是启动工作客户端的数据包列表:
1 DHCP Discover - Transaction ID 0xe828c4bc
2 DHCP Offer - Transaction ID 0xe828c4bc (from first DHCP)
3 DHCP Offer - Transaction ID 0xe828c4bc (from PXE)
4 DHCP Offer - Transaction ID 0xe828c4bc (from second DHCP)
5 DHCP Request - Transaction ID 0xe828c4bc (to first DHCP)
6 DHCP ACK - Transaction ID 0xe828c4bc (from first DHCP)
7 4011 → 4011 Len=347 (to PXE)
8 4011 → 4011 Len=349 (from PXE)
9 TFTP Read Request, File: boot\x64\wdsmgfw.efi, (to PXE)
...
对于出现故障的客户端,情况直到第 6 行都完全相同,然后什么也没有发生;它只是没有联系 PXE 服务器。
我已经比较了 Wireshark 中的数据包内容,除了依赖于客户端所在网络(giaddr、路由器等)的值之外,所有提供的内容在工作和失败情况下都是相同的。
这似乎会影响特定的 BIOS/固件:正常工作的客户端包括 VMware Workstation 和 ESXi,以及 Intel NUC,而 Asus B150M-C 主板和至少一个 Dell Optiplex 则无法正常工作。所有相关设备上的 BIOS 都是最新的,最多是几个月前的。
我觉得 UEFI 固件不知道如何使用路由器。有办法让它工作吗?
答案1
问题出在客户端;我应该更仔细地查看我的数据包跟踪。我刚刚发现,在从常规 DHCP 服务器获得 DHCP ACK 后,发生故障的客户端立即开始为 PXE 服务器进行 ARPing,当然,没有任何进展。
所以问题实际上是固件不理解路由器。
答案2
您的 DHCP 策略一团糟。每个网络不应有超过一个 DHCP 服务器,并且 PXE 服务器应充当代理 DHCP。
多个 DHCP 服务器会导致竞争条件;您无法预测哪个 DHCP 最终会真正向客户端提供 IP。
您可能在第二个网络中有一些其他 DHCP,并且代理 DHCP 提供(PXE 服务器)可能永远不会到达另一端。
您应该仔细阅读 Wireshark 捕获的内容;将其上传到某处,我们就可以提供帮助。