在 Debian Buster 上强制使用 MAC 地址作为 DHCP 客户端 ID

在 Debian Buster 上强制使用 MAC 地址作为 DHCP 客户端 ID

Debian Buster dhclient 随机使用其 MAC 地址或生成的 DUID-LLT 作为其 DHCP 客户端 ID。

我可以强制它始终使用 MAC 地址而不是生成的 DUID-LLT 吗?

我知道这个选项send dhcp-client-identifier = xx:xx:xx:xx:xx:xx;,但是它迫使我为每个接口手动配置自己的 MAC 地址,如果可能的话,我宁愿避免这种情况。

正如我之前所说,它已经在这样做了,但是是随机的。

可以强制它一直这样做吗?

答案1

解决方案很简单,但没有文档记录(至少手册页上没有dhclient.conf)。您可以设置选项send dhcp-client-identifier = hardware,而不是硬编码特定的 MAC 地址。

完整示例:

$ echo "send dhcp-client-identifier = hardware;" >>/etc/dhcp/dhclient.conf
$ rm /var/lib/dhcp/*
$ systemctl restart networking

它配置dhclient为发送硬件地址作为客户端标识符,删除以前的租约并使用新设置重新启动接口。此更改后,它将自动使用 MAC 地址作为每个接口的客户端 ID。

答案2

自这一改变以来 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=906894 ifupdown 已向 dhclient 添加了 -i 参数。

-i     Use a DUID with DHCPv4 clients.

但这里有一个解决办法:这个改变 https://salsa.debian.org/debian/ifupdown/-/commit/40eb51499fe71e4fb20c27beea23045c62e9ba07 转到 ifupdown 0.8.36 并使 -i 选项成为可选的。这在 /etc/network/interfaces 的(足够新的)手册页中有记录:man 接口 / INET 地址系列 / “dhcp 方法” / 选项 / 客户端

client client_id
    Client identifier (dhcpcd), or "no" (dhclient)

因此,就我的情况而言,实际的解决方案是将“客户端编号”添加到我的 /etc/network/interfaces 中,例如

.....
iface eno1 inet dhcp
    client no

这带来了旧的行为,即:ifup 调用不带“-i”的 dhclient,如下所示: https://salsa.debian.org/debian/ifupdown/-/blob/40eb51499fe71e4fb20c27beea23045c62e9ba07/inet.defn#L101 为了记录,我查看了命令行参数以确认:ps aux | grep dhclient

(顺便说一下,要查看日志,可以这样做sudo journalctl | grep -i dhcp | less:)

这样它就可以与害怕 RFC 4361 的 DHCP 服务器对话。

这有一些细则:对于 Debian 10,我必须反向移植 ifupdown 包。我已遵循https://unix.stackexchange.com/a/112160/203082 在本地获取ifupdown_0.8.36~bpo10+1_amd64.deb软件包。安装后,我无法干净地重启网络(可能是由于一些与 systemd 相关的复杂性)。

所以我不得不重新启动,很不幸。然后它就能如预期的那样获取 IP 地址了。

相关内容