0

背景资料:

我有一组专有的嵌入式 Linux 网络设备,其中一个将配置为 DHCP 服务器,其余的将是 DHCP 客户端。

我需要让客户端设备只接受来自服务器设备的 DHCP 租约,而忽略同一 LAN 上其他 DHCP 服务器提供的任何其他租约。同样,我需要使服务器设备仅向这组客户端提供 DHCP 请求,而忽略可能出现在未知网络环境中的任何其他 DHCP 请求。本质上,我需要能够在可能已经有 DHCP 服务器的网络环境中为我自己的设备提供 DHCP 服务。

我所有的设备都具有相同的 MAC 地址的前半部分,我打算将其用作过滤器。

我正在使用 BusyBox 中包含的 udhcpc 和 udhcpd,并且由于存储可用性有限,我试图避免将任何其他 DHCP 客户端/服务器包添加到我的设备,但我愿意修改 BusyBox 代码。

通过向 udhcpd.conf 添加一个选项,我可以轻松实现 DHCP 服务器限制,我称之为chaddr_filter,其中包含服务器应检查“客户端硬件地址 (chaddr)”的通配符 MAC 地址。这似乎工作得很好,服务器在为我自己的设备提供服务时忽略了来自其他设备的任何 DHCP 请求。

由于 DHCP 数据包中缺少“服务器硬件地址”字段,客户端过滤成为更大的挑战。

所以这是我的问题:

将服务器的 MAC 传递给 udhcpc 客户端的最佳方式是什么?

目前看起来没有从 DHCP 服务器传递的包含服务器 MAC 的字段或选项(看起来我无法从以太网层读取它)。我想保持符合标准,因此我正在研究可能用于此目的的潜在 DHCP 选项。

我希望我可以使用“选项 54:服务器标识符”,但 RFC 将其定义为 IP 地址。

我正在考虑将服务器的 MAC 放在“选项 60:类标识符”或“选项 43:供应商特定信息”中,有什么理由不应该这样做吗?有没有更好的领域呢?

我期待任何建议。

4

2 回答 2

1

取自维基百科

DHCP 使用 IANA 为 BOOTP 分配的两个相同端口:目标 UDP 端口 67 用于向服务器发送数据,UDP 端口 68 用于向客户端发送数据。DHCP 通信本质上是无连接的。

因此,您可以在客户端过滤端口 68/udp 上的传入数据包,仅接受来自前半部分良好的 mac 地址的数据包。

于 2012-07-27T07:42:52.053 回答
0

仅供参考,我能够通过使用brctlebtables实用程序过滤客户端上感兴趣的数据包来达到预期的效果。

于 2014-12-30T18:03:14.040 回答