我做了一些研究。
我了解到的第一件事是可以根据除MAC地址以外的条件分配DHCP租约。
从dhcp 常见问题解答:
什么是客户编号?
在DHCP协议中,所谓的客户端ID是协议用来标识客户端计算机的任何内容。默认情况下,DHCP实现通常为此目的使用客户端的MAC地址,但是DHCP协议允许其他选项。某些DHCP实现有一个设置选项来指定所需的客户端ID。MAC地址的一种替代选择就是您选择的字符串。在任何情况下,为了使DHCP起作用,必须确保没有其他客户端正在使用您选择的客户端ID,并且必须确保DHCP服务器会接受它。
然后,尽管openWRT上的luci Web界面显然不支持它,但dnsmasq本身支持client_id和多个MAC地址(请注意)。
在dnsmasq 手册页中:
-G,--dhcp-host = [hwaddr] [,id:client_id | *] [,set:tag] [,ipaddr] [,hostname] [,lease_time] [,ignore]为DHCP服务器指定每个主机参数。这样一来,始终为具有特定硬件地址的计算机分配相同的主机名,IP地址和租用时间。这样指定的主机名将覆盖计算机上DHCP客户端提供的任何主机名。也可以省略硬件地址并包含主机名,在这种情况下,IP地址和租用时间将适用于任何声称该名称的机器。例如--dhcp-host = 00:20:e0:3b:13:af,wap,infinite告诉dnsmasq给硬件地址为00:20:e0:3b:13:af的机器命名为wap,然后再加上一个无穷大DHCP租约。--dhcp-host = lap,192.168.0.199告诉dnsmasq始终将计算机lap的IP地址分配为192.168.0.199。
(...)
允许使用客户端标识符而不是硬件地址,以“ id:”为前缀来标识主机。因此:--dhcp-host = id:01:02:03:04,.....引用具有客户端标识符01:02:03:04的主机。还可以将客户端ID指定为文本,例如:--dhcp-host = id:clientidastext,.....
(...)
作为一种特殊情况,可以包含多个硬件地址。例如:--dhcp-host = 11:22:33:44:55:66,12:34:56:78:90:12,192.168.0.2这允许IP地址与多个硬件地址相关联,并授予dnsmasq权限当另一人要求租用时,将DHCP租约放弃给其中一个硬件地址。请注意,这是一件危险的事情,只有在任何时候只有一个硬件地址处于活动状态并且dnsmasq无法强制执行此操作时,它才能可靠地工作。例如,将稳定的IP地址分配给同时具有有线和无线接口的便携式计算机很有用。
我选择了multi-mac解决方案(因为我没有尝试找出如何在客户端上指定客户端ID,这是每个单独的客户端都必须完成的工作,而multi-mac替代方案是适用于房屋中所有便携式设备的一种解决方案。)
我绕过了luci接口,并直接将以下行添加到/etc/dnsmasq.conf中:
dhcp-hostsfile = / etc / dnsmasq-dhcphosts.conf
/etc/dnsmasq-dhcphosts.conf包含以下格式的行:
mac1,mac2,ip
(我将此配置保存在单独的文件中,以防止下次更新覆盖它。)
工作良好。