DHCP 客户端认为什么是“最佳”答案?

DHCP 客户端认为什么是“最佳”答案?

我们的培训室通常安装 Windows XP(通过 PXE)。“正常”的 DNS/DHCP 基础设施是 Windows 服务器。培训室有自己的 VLAN(不同于 Windows 服务器),因此很可能在 Cisco 路由器上有一个用于 DHCP 请求的 IP 助手,该房间的所有 PC 都连接到该路由器。

现在我们想将一些 PC 改为 Linux。我们的想法是:将我们自己的笔记本电脑和 DHCP 服务器放入房间的 VLAN,并覆盖“正常”的 DHCP 响应。我们的想法是,这应该可行,因为该 VLAN 中直接连接的 DHCP 服务器的响应时间应该比距离该 VLAN 几跳的“正常”DHCP 服务器更快。

事实证明,这不起作用。我们必须手动释放原始 DHCP 服务器上的租约才能使其正常工作。

在笔记本电脑上,我们确实看到客户端请求 IP,并且“我们的” dhcp 正在向 Windows IP 请求发送 NACK,在此之前我们确实提供了自己的响应。

老问题:为什么这没有按预期进行?是什么让 PC 重新获得其旧租约?

更新2012-08-08:

DHCP-RFC 中已经解释了重新获得租约的问题。现在这解释了为什么 PC 会重新获得其旧租约。

现在我们确实要从 Windows-DHCP 服务器释放 IP,然后再试一次。

再次,Windows-DHCP 服务器获胜。

我怀疑 dhcp 客户端存在某种算法,可以确定客户端的“最佳”dhcp 答案。新问题是:

客户如何选择“最佳”答案?

答案1

客户端如何对多个 DHCP 应答作出反应取决于供应商,甚至固件。

多年来我见过的变体有:

1)不管它是ACK还是NACK,都接受第一个。

2)采用第一个 ACK​​,完全忽略 NACK。

3)获取在设定的时间间隔内(通常为 5-10 秒)收到的最后一个 ACK​​。

示例:几年前,我们的 Ricoh MFP 出现了问题。
我们有 2 个 DHCP 服务器。一个提供地址,另一个仅提供附加 DHCP 选项。第二个服务器总是先响应。
即使第一个提议仅包含 DHCP 选项,Ricoh 也会使用变体 1)。在我们向他们解释了问题之后,Ricoh 通过固件更新将其更改为变体 2)。

答案2

假设路由器仍充当 DHCP 中继并将请求转发到您的原始服务器,那么它这样做的原因仅仅是因为 Windows DHCP 服务器告诉它继续使用 IP。在这种情况下,来自新服务器的 DHCPNACK 无关紧要,因为 DHCP 客户端会考虑所有响应,而且由于它从 Windows DHCP 框中获得了提供,因此它非常乐意使用它。

PC:哦,你好,我可以使用 192.168.1.123 吗?

New-DHCP:我说不。

Old-DHCP:我认为是的。

PC:有人说可以!太好了,我要用它!

答案3

如果没有其他帮助 - RTFM(阅读手册)。在这种情况下,第一个是命中的。

RFC 2131概述 DHCP 操作。

第 1.6 节规定 DHCP必须

在服务器重新启动后保留 DHCP 客户端配置,并且尽可能在 DHCP 机制重新启动后为 DHCP 客户端分配相同的配置参数,

现在有趣的问题是,在不了解过去的客户端上如何实现该设计目标。第 3.2 节概述:

3.2 客户端与服务器交互——重用先前分配的网络地址

如果客户端记得并希望重用先前分配的
网络地址,客户端可以选择省略
上一节中描述的一些步骤。图 4 中的时间线图
显示了客户端重用先前分配的网络地址的典型客户端-服务器交互中的时序关系。

  1. 客户端在其本地子网上广播 DHCPREQUEST 消息。该消息在“请求的 IP 地址”选项中包含客户端的网络地址。由于客户端尚未收到其网络地址,因此它不得填写“ciaddr”字段。BOOTP 中继代理将消息传递给不在同一子网上的 DHCP 服务器。如果客户端使用“客户端标识符”获取其地址,则客户端必须在 DHCPREQUEST 消息中使用相同的“客户端标识符”。

  2. 了解客户端配置参数的服务器会向客户端发送 DHCPACK 消息。服务器不应检查客户端的网络地址是否已被使用;此时客户端可能会响应 ICMP 回显请求消息。

因此,持有有效租约的 DHCP 服务器可以通过使用协议中的快捷方式获得优先权。

  1. 客户端:DHCREQUEST(MAC 地址,广播,将在本地广播域中传输 - 此处为本地 VLAN,并通过 IP 助手传输到 Windows-DHCP 服务器)
  2. 笔记本电脑 DHCP 服务器:DHCPOFFER
  3. Windows-DHCP-Server:嘿 - 我已经认识你了 - DHCPACK
  4. 客户:哦,我收到了两个回复。其中一个已经认识我了。太好了,我会接受这个。

从那时起,Laptop-DHCP 服务器将被客户端忽略。

因此,我们案例中的解决方案可能是(当我们实际测试时我会更新它):

  1. 确保客户端已关闭
  2. 关闭笔记本电脑上的 DHCP 服务器、笔记本电脑上的伪造客户端 MAC 地址、DHCP 请求
  3. 发布 IP
  4. 恢复原有IP和MAC,开启DHCP-Server
  5. 打开客户端并进行 PXE 启动...

答案4

新问题可能应该放在不同的问题中——问题的标题与问题的大部分内容完全不符。

无论如何,对于客户端如何选择接受哪个提议,在没有当前租约的情况下:这取决于客户端,但在我所知道的每个 DHCP 客户端实现中,这是一场简单的竞争。

RFC 2131涵盖以下内容:

DHCP 客户端可以自由使用任何策略在客户端接收 DHCPOFFER 消息的服务器中选择一个 DHCP 服务器。

有一个IETF 草案那里似乎已经死了,这将为选择过程增加可配置性,并且还提到了平淡无奇的客户端实现(十多年前,但没有太大变化):

实际上,大多数供应商在此处的策略实施非常基础(例如,首先收到的报价或首先收到的可接受的报价)并且是“硬编码的”(即可不可配置)。

让两台 DHCP 服务器以不同的配置为同一网络提供服务只会导致竞争,从可靠性或可预测性的角度来看,这是不可取的。您没有理由不能让一台 DHCP 服务器提供您所需的服务。

相关内容