![如何在 DHCPd 中通过 UID 分配 IP](https://linux22.com/image/654261/%E5%A6%82%E4%BD%95%E5%9C%A8%20DHCPd%20%E4%B8%AD%E9%80%9A%E8%BF%87%20UID%20%E5%88%86%E9%85%8D%20IP.png)
这里回答了如何分配知识产权经过苹果地址。
我希望 DHCPd 服务器分配知识产权经过唯一标识。
我可以用同样的方式添加记录吗dhcpd.conf
?例如:
host example
{
uid 00:70:ff:13:2f:34:30;
fixed-address 192.168.1.30;
}
它会起作用吗?
答案1
使用 DUID-UUID 是可能的。
在服务器端,需要通过option dhcp-client-identifier
如下方式识别主机:
host example {
option dhcp-client-identifier FF:II:II:II:II:00:04:UU:UU:UU:UU:UU:UU:UU:UU:UU:UU:UU:UU:UU:UU:UU:UU;
}
其中II
IAID 有四个字节,UU
UUID 有十六个字节,FF 和 00:04 是这些地方的文字字节。
从 00:04 开始,后面 16 个 UUID 字节的部分是 DUID-UUID,具体描述如下RFC6355。
现在,DHCPv4 客户端需要构造身份关联唯一标识符,该标识符在第6.1节的RFC4361。由于 DHCPv4 仅允许使用 HW 地址或客户端 ID 作为区分不同主机的密钥,因此必须选择客户端 ID(因为 HW 地址具有固定定义)。它以 FF 字节开头,该字节将客户端 ID 标识为基于 DUID。紧接着是 4 个字节的 IAID(不要问,我不知道),然后是 DUID。如果是 DUID-UUID,它以 16 位标识(4)开头,后跟 16 个字节的 UUID。当然,其他 DUID 类型(请参阅第九节的RFC3315) 也可以使用。
我通常选择 0 或 1 作为 IAID。
现在,需要在客户端的某处定义 DUID 和 IAID。由于我使用的是 AlmaLinux 8.6 和 9.0,因此我将展示如何在 NetworkManager 中执行此操作。
DUID 似乎是附加到特定系统的标识符,不一定是接口,因此我将把它放在/etc/NetworkManager/NetworkManager.conf
文件中的[connection]
部分中:
[connection]
ipv4.dhcp-client-id=ipv6-duid
ipv6.dhcp-duid=00:04:UU:UU:UU:UU:UU:UU:UU:UU:UU:UU:UU:UU:UU:UU:UU:UU
第一行表示 DHCPv4 客户端 id 将基于 ipv6-duid,第二行定义系统范围的默认 ipv6.dhcp-duid。
我们还需要 ipv4.dhcp-iaid,它进入同一部分:
[connection]
ipv4.dhcp-iaid=II:II:II:II
ipv4.dhcp-client-id=ipv6-duid
ipv6.dhcp-duid=00:04:UU:UU:UU:UU:UU:UU:UU:UU:UU:UU:UU:UU:UU:UU:UU:UU
注意:我不确定 ipv4.dhcp-iaid 的确切格式,因为我通常在其中放置单个 0 或 1,以匹配服务器端的 00:00:00:00 或 00:00:00:01。
这些设置也可以针对每个连接进行指定。请参阅man nm-settings
以了解更多信息。
最后,我通常根据系统的 FQDN 生成系统 UUID,如下所示:
uuidgen --sha1 --namespace @dns --name host.example.org
我希望这有帮助。
答案2
据我所知,没有直接通过 UID 分配 IP 的方法。dhcpd.leases
手册中只提到了这一点,而且这是客户端发送的可选值。RFC2131 和 RFC2132 中甚至没有提到这一点。
您可以通过将设备的 MAC 地址更改为该 UID(如果可以的话)来解决此问题,或者根据dhcpd.leases
UID 值动态更改主机声明并重新加载 DHCPd 配置。