我正在尝试弄清楚如何在我们的服务器中构建特定的拓扑,但我主要想要理论层面的帮助。
我知道,只要地址范围不同,同一个网络上可以有 2 个 DHCP 服务器。但是,没有确定的方法可以找到哪个服务器先回复。
我想知道的是,如果将 PXE 引入游戏会发生什么。假设网络中有一台未启用 PXE 的 DHCP 服务器 (A),因此它使用标准 DHCPOFFER(不带 PXE 特定参数)响应初始 DHCPDISCOVER。第二台 DHCP 服务器 (B) 启用了 PXE,因此它使用包含 PXE 参数的 DHCPOFFER 响应初始 DHCPDISCOVER。
如果服务器(A)首先响应,会发生什么?
- 主机是否会放弃第二个 DHCPOFFER 而不进行 PXE 启动?
- 主机是否会接受来自服务器 (A) 的 DHCPOFFER 并遵循来自服务器 (B) 的 PXE 指令?
- 主机是否会拒绝来自服务器(A)的 DHCPOFFER 并接受服务器(B)的 DHCPOFFER?
- 还有别的吗?
答案1
DHCP 无法“启用 pxe”。网络启动不是 DHCP 的职责。DHCP 在这方面的唯一作用是向客户端提供有关启动文件服务器地址和启动应用程序文件名的信息。仅此而已。
引导服务器不必与 DHCP 服务器位于同一台机器上。它可以位于 IP 可达的任何地方。PXE 使用 TFTP 协议下载引导应用程序,因此如果 DHCP 服务器回复中存在相应信息,它将尝试使用它来下载指定文件并运行它。
因此,在您的情况下,只需将两个 DHCP 服务器设置为指向同一个 TFTP 服务器,该服务器可以与其中一个 DHCP 服务器共存,也可以驻留在第三台机器上,这样它就可以正常工作。
答案2
拥有 2 个针对同一子网且不带 MAC 过滤器的活动 DHCP 服务器会导致不确定性,这不是一个好主意。如果您需要高可用性/冗余,只需使用支持冗余的高可用性 DHCP 服务器即可。
当您将 DHCP 服务器配置为提供 PXE 参数时,DHCP 服务器将“启用 pxe”:
- TFTP 服务器 IP
- NBP(网络启动程序)路径和名称
回答您关于 PXE 客户端接收 2 个提供(一个包含 PXE 数据,一个不包含)的问题,那么,客户端应该选择提供 PXE 信息的那个,但我见过有故障的固件没有这样做,并抛出 PXE 错误。您提到的其余选项未由 PXE 标准定义。
如果您的子网已经具有 DHCP 基础架构,您不想或不允许更改其配置,并且想要添加 PXE 服务,则最常见的方法是添加代理 DHCP。代理 DHCP 仅向启动 PXE 客户端提供 PXE 信息,而对启动非 PXE 客户端则保持沉默。然后,启动 PXE 客户端会收到 2 个 DHCP 提供,一个来自提供 IP 和相应 DHCP 选项的 DHCP 服务器,另一个来自提供 PXE 数据的代理 DHCP,并且它能够启动。代理 DHCP 是 PXE 标准的一部分,目前受到 PXE 固件的广泛支持。
尽管 DHCP 提供了 PXE 数据,但 PXE 标准还需要设置用于传输初始引导组件的相应 TFTP 服务器。此外,还需要 HTTP、CIFS、NFS 等其他服务器服务,以便在 PXE 阶段完成后立即为大量正在网络传输的组件提供传输服务。
例如,当 PXE 启动 Linux Live 发行版时,NBP(grub 或 pxelinux)最初会传输,通常会显示启动菜单,随后内核和 initrd 也会通过 TFTP 传输和启动。接下来,启动内核会执行第二次 DHCPDISCOVERY,因为常规 DHCP 客户端(无 PXE)会获取其 IP,接下来 HTTP 或 CIFS 或 NFS 会传输相应的 squashfs 文件,然后启动 Live 发行版。