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

mas*_*ssa 5 dhcp debian-buster

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

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

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

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

可以强迫它总是这样做吗?

mas*_*ssa 11

解决方案很简单,但没有记录(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
Run Code Online (Sandbox Code Playgroud)

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


Daw*_*ton 6

自从这个更改 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=906894 ifupdown 一直在向 dhclient 添加 -i 参数。

-i     Use a DUID with DHCPv4 clients.
Run Code Online (Sandbox Code Playgroud)

但这里有一个修复:此更改 https://salsa.debian.org/debian/ifupdown/-/commit/40eb51499fe71e4fb20c27beea23045c62e9ba07 转到 ifupdown 0.8.36 并使 -i 选项可选。这在 /etc/network/interfaces 的(足够新的)联机帮助页中进行了记录: man Interfaces / INET ADDRESS FAMILY / "The dhcp Method" / Options / client

client client_id
    Client identifier (dhcpcd), or "no" (dhclient)
Run Code Online (Sandbox Code Playgroud)

因此,对于我的情况,实际的解决方案是将“client no”添加到我的 /etc/network/interfaces 中,例如

.....
iface eno1 inet dhcp
    client no
Run Code Online (Sandbox Code Playgroud)

这带来了旧的行为,即: 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地址了。