如何在 DHCPd 中通过 UID 分配 IP

如何在 DHCPd 中通过 UID 分配 IP

这里回答了如何分配知识产权经过苹果地址。
我希望 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;
}

其中IIIAID 有四个字节,UUUUID 有十六个字节,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.leasesUID 值动态更改主机声明并重新加载 DHCPd 配置。

相关内容