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 地址了。