前段时间,我为我的 Raspberry Pi 配置了网络启动,以便它们从我的主服务器启动。由于 Pi 的操作略有不同,我认为在 x86 测试机上运行 PXE Boot 可能会很有趣。我找到了一些指南,我读过,它与 Pi 设置并没有太大不同,只是它还涉及 DHCP 上的选项 67,而 Pi 仅使用选项 66。
我在服务器上配置了所有内容,但我无法真正测试它,因为机器似乎没有从 DHCP 读取选项 66。我在我的测试机器、我自己的工作站上尝试过,甚至还设置了一个虚拟机。它们可以很好地读取选项 67,但服务器地址针对的是网关 (DHCP) 本身。
我通过 Omada 使用 TP-Link ER605 路由器。DHCP 上的选项 66 设置为 PXE 服务器,而192.168.69.59
网关位于192.168.69.254
。选项 67 设置为syslinux.efi
。
这是启动时的输出
>>Start PXE over IPv4.
Station IP address is 192.168.69.101
Server IP address is 192.168.69.254
NBP filename is syslinux.efi
NBP filesize is 0 bytes
PXE-E99: Unexpected network error.
我知道选项 66 在 DHCP 上正常工作,因为我的 RPI 仍然可以正常启动。
我花了一天时间搜索这个问题。我似乎找不到任何人来解决这个问题,据我所知,它应该将选项 66 和 67 合并为 syslinux 启动文件的完整 TFTP 路径。但是,我发现的每个指南都在 PXE 服务器本身上安装了单独的 DHCP,因此,如果他们在这些指南中错误地定位服务器,这并不意味着什么,因为 IP 无论如何都是正确的。
答案1
我发现本文这也许可以解释这个问题。PXE 和选项 66/67 等接缝的工作方式与大多数人所知道的接缝略有不同?
DHCP 服务器可以以这种方式欺骗大多数客户端固件,但并非全部。有些固件过于信任。当需要下载启动文件时,它会尝试从 DHCP 服务器下载。毕竟,DHCP 服务器确实说过它是 PXE 服务器。这当然会失败 - DHCP 服务器没有任何启动文件。
我认为选项 66 的想法是将该信息传递给客户端,但事实上它听起来更像是 DHCP 内部使用它来将通信从客户端转发到服务器。
所以如果我理解正确的话,就意味着您需要在 PXE 服务器上运行第二个 DHCP,以便启动文件的下载请求针对正确的 IP。
答案2
根据 RFC2132,选项 66 是 TFTP 服务器的名称,选项 67 是从 TFTP 服务器获取的文件名。因此,不一定需要单独的服务器(或第二个 DHCP 服务器),但肯定需要单独的协议:TFTP。有些 DHCP 服务器包含 TFTP 服务器,有些则没有。没有进行路由,至少在隐含的配置中没有,因为一切似乎都在同一个子网上。客户端使用 DHCP 服务器的答案联系 TFTP 服务器获取文件。就是这样,客户端不知道也不关心这两个协议是否托管在同一设备上或同一软件中。
RFC2132 还指出,选项 66 是一个最小长度为 1 的名称。如果您指定 IP 地址而不是名称,则它是否有效取决于(客户端)实现。我怀疑它适用于 Raspis,但不适用于 x86 盒,因为 Raspis 将选项 66 解释为 IP 地址,而 x86 盒则不这样做。如果我的理论是正确的,那么将选项 66 更改为名称后,它应该对两者都有效。