![PXE 启动无法通过 DHCP 获取 IP 地址,但操作系统启动时 DHCP 有效](https://linux22.com/image/611616/PXE%20%E5%90%AF%E5%8A%A8%E6%97%A0%E6%B3%95%E9%80%9A%E8%BF%87%20DHCP%20%E8%8E%B7%E5%8F%96%20IP%20%E5%9C%B0%E5%9D%80%EF%BC%8C%E4%BD%86%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%90%AF%E5%8A%A8%E6%97%B6%20DHCP%20%E6%9C%89%E6%95%88.png)
我正在尝试通过网络对 Cisco UCS C240 服务器进行 PXE 启动以安装新操作系统,但它在启动期间未通过 DHCP 获取 IP 地址。我从 Intel Boot Agent 收到“未收到 DHCP 或代理 DHCP 提供”错误。DHCP 服务器上的 tcpdump 显示 DHCP 服务器计算机上未收到与 DHCP 相关的数据包:
tcpdump -n -e -i eth2 ether src FC:99:47:49:D4:9E or ether dst FC:99:47:49:D4:9E
但是,当我将计算机启动到已安装的操作系统(在本例中为 Windows Server 2012)并为 DHCP 配置该网络接口时,它会从 DHCP 服务器获取 IP 地址。如果我让 tcpdump 保持运行,则会看到以下内容:
13:34:36.525646 fc:99:47:49:d4:9e > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 126: 169.254.239.3.54275 > 255.255.255.255.111: UDP, length 84
13:34:40.118071 fc:99:47:49:d4:9e > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 110: 169.254.239.3.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
13:34:40.888206 fc:99:47:49:d4:9e > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 110: 169.254.239.3.137 > 169.254.255.255.137: NBT UDP PACKET(137): REGISTRATION; REQUEST; BROADCAST
13:34:40.975407 fc:99:47:49:d4:9e > 01:00:5e:00:00:fc, ethertype IPv4 (0x0800), length 66: 169.254.239.3.55524 > 224.0.0.252.5355: UDP, length 24
13:34:41.387736 fc:99:47:49:d4:9e > 01:00:5e:00:00:fc, ethertype IPv4 (0x0800), length 66: 169.254.239.3.55524 > 224.0.0.252.5355: UDP, length 24
13:34:41.418849 fc:99:47:49:d4:9e > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 358: 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from fc:99:47:49:d4:9e, length 316
13:34:41.419144 60:73:5c:68:b4:b6 > fc:99:47:49:d4:9e, ethertype IPv4 (0x0800), length 342: 10.10.0.131.67 > 10.10.0.151.68: BOOTP/DHCP, Reply, length 300
什么原因会导致 DHCP 在 PXE 启动过程中失败,而在启动到操作系统时却成功?据我所知,PXE 使用与 Windows 相同的网络接口。至少,在 PXE 启动期间报告的 MAC 地址与 Windows 启动时通过 DHCP 获取 IP 的 MAC 地址相同。
答案1
我见过 Portfast(或缺少 Portfast)导致此问题。在 DHCP 客户端和服务器之间的端口上启用 Portfast 解决了这个问题。
您可能还会在预启动执行 (PXE) 设备(例如 Windows 部署服务)上看到此问题。下图显示了典型的 PXE 实现。以下是使用 PXE 时发生的情况:
您给计算机通电,从而激活了 NIC,但不到五秒钟,计算机的 POST 就完成了,NIC 尝试从 DHCP 获取 IP 地址,以便它可以直接从 PXE 服务器加载启动映像,但这一过程失败了。
计算机在大约 10 秒内多次尝试从 DHCP 服务器获取 IP 地址,之后放弃并转到另一个启动设备,例如硬盘驱动器。这个过程的不幸之处在于,由于它无法获取 IP 地址或无法与 PXE 服务器连接,因此您无法在该计算机上安装新的操作系统映像。
这种情况下的问题在于,由于 STP 要求计算机等待 45 秒才能转发端口上的流量,因此 PXE 网络启动已超时。 image0.jpg PortFast 是解决客户端计算机连接到交换机时出现延迟问题的解决方案。默认情况下不启用 PortFast。在端口上启用 PortFast 后,您可以有效地占用该端口并告诉生成树不要在该端口上实施 STP。
如果只有一台计算机插入端口,这个解决方案还不错——这样人们就不会在网络上创建意外循环,而这很容易发生。
http://www.dummies.com/how-to/content/spanning-tree-protocol-stp-and-portfast.html
答案2
如果您无法/不愿意为计算机端口打开 portfast(或同等功能),我发现您也可以在计算机打印“DHCP...”后按下键盘上的 Pause 键。ASCII 图形将停止旋转。等待 30 秒或任何需要的时间,按下一个键取消暂停,然后您就可以正常启动网络了。
答案3
通常是两件事之一(或同时发生)。
1) 服务器连接的边缘端口上的生成树协议,就像上面 Ryan Ries 提到的那样。
2) 在 PC 和交换机之间进行自动协商,其花费的时间比 PXE 引导加载程序愿意等待地址的时间更长。
如果您无法控制开关,最好的选择通常是将服务器启动到 Bios。等待一分钟左右让开关稳定下来,然后让 bios 继续启动。
在启动初期(在 PXE 开始启动尝试之前)按下键盘上的 Pause/ScrollLock 按钮可以实现相同的效果。
当然,这两种情况都意味着您可以将键盘和显示器连接到设备上。
答案4
我的 WDS 服务器和交换机断电后也遇到了类似的问题。我发现 Server\Options 设置中的 DNS 设置为 NULL,因此我必须输入 DNS 设置,我还验证了其他服务器选项设置以查看它们是否为 NULL。