背景信息:
我有一套专有的嵌入式linux网络设备,其中一个将被配置为DHCP服务器,其余的将是DHCP客户端。
我需要让客户端设备只接受来自服务器设备的DHCP租约,而忽略同一LAN上其他DHCP服务器提供的任何其他租约。同样,我需要使服务器设备仅向这组客户端提供DHCP请求,忽略可能出现在未知网络环境中的任何其他DHCP请求。基本上,我需要能够在已经有DHCP服务器的网络环境中为我自己的设备提供DHCP服务。
我的所有设备都有相同的MAC地址的前半部分,我打算用它作为过滤器。
我正在使用包含在BusyBox中的udhcpc和udhcpd,并且由于存储空间有限,我试图避免将任何其他DHCP客户端/服务器包添加到我的设备,但我愿意修改BusyBox代码。
我通过向udhcpd.conf添加一个选项来实现DHCP服务器限制没有问题,我调用了chaddr_filter
,其中包含一个通配符MAC地址,服务器应检查“客户端硬件地址(chaddr)”。这似乎工作正常,服务器在提供自己的服务时忽略来自其他设备的任何DHCP请求。
由于DHCP数据包中缺少“服务器硬件地址”字段,客户端过滤结果是一个更大的挑战。
所以这是我的问题:
将服务器的MAC传递给udhcpc客户端的最佳方法是什么?
目前看起来没有从DHCP服务器传递包含服务器MAC的字段或选项(看起来我不能从以太网层读取它)。我想保持符合标准,所以我正在寻找可能用于此目的的潜在DHCP选项。
我希望我可以使用“选项54:服务器标识符”,但RFC将其定义为IP地址。
我正在考虑将服务器的MAC放在“选项60:类标识符”或“选项43:供应商特定信息”中,是否有理由不这样做?有更好的领域吗?
我期待任何建议。
答案 0 :(得分:1)
DHCP使用IANA为BOOTP分配的相同两个端口:destination UDP端口67用于向服务器发送数据,UDP端口68用于数据 给客户。 DHCP通信本质上是无连接的。
因此,您可以在客户端上过滤端口68 / udp上的传入数据包,只接受来自前半部分良好的mac地址的数据。
答案 1 :(得分:0)
仅供参考我通过使用brctl
和ebtables
实用程序来过滤客户端上感兴趣的数据包,从而实现了预期的效果。