我刚刚看到新闻https://www.isc.org/dhcp:
ISC 已于 2022 年初停止了 ISC DHCP 客户端的开发。此客户端实现不再维护,不应再在生产中使用。
现在dhclient
似乎已经退役了,我应该使用哪个 DHCP 客户端?
更具体地说,我使用 Debian 11,我需要一个可以从命令行指示续订租约的 DHCP 客户端。目前我这样做:
sudo dhclient -r
sudo dhclient
或者,对于特定的接口,例如eth0
:
sudo dhclient -r eth0
sudo dhclient eth0
- - 编辑 - -
该问题的其他讨论:
- https://groups.google.com/g/linux.debian.user/c/FSEkTKp3zEg
- https://lists.debian.org/debian-devel/2021/09/msg00407.html
他们似乎建议systemd-networkd
。
答案1
我按照以下方式将 dhclient 替换为 systemd-networkd 的 DHCP 客户端:
1.卸载 dhclient
sudo apt purge -y isc-dhcp-client
sudo apt purge -y isc-dhcp-common
2.启动 systemd-networkd
sudo systemctl start systemd-networkd
sudo systemctl enable systemd-networkd
3.让 systemd-networkd 使用其自己的 DHCP 客户端来管理网络接口
对于每个接口,*.network
在 中创建一个配置文件/etc/systemd/network
,例如05-enp1s0.network
:
[Match]
Name=enp1s0
[Network]
DHCP=yes
重启 Linux、重启 systemd-networkd 或 后sudo networkctl reload
,这些接口将由 systemd-networkd 的 DHCP 客户端配置。更新接口配置很容易,例如:
sudo networkctl renew enp1s0
这是非常主观的,但我的初步经验是 systemd-networkd 的 DHCP 客户端比 dhclient 更值得信赖且反应更快。如果我更改网络连接(这在我的使用案例中经常发生),我会获得不错的即插即用体验。
4. [可选]添加 8.8.8.8 作为主 DNS 服务器
开启 systemd-resolved:
sudo systemctl start systemd-resolved
sudo systemctl enable systemd-resolved
在/etc/systemd/resolved.conf
:
[Resolve]
DNS=8.8.8.8
在 中/etc/nsswitch.conf
,resolve
首先添加hosts
:
...
hosts: resolve [!UNAVAIL=return] files dns
...
现在systemd-resolve
就可以工作了,但仍将使用DHCP 客户端nslookup
写入的 DNS 服务器。为了解决这个问题,请将其转换为 systemd-resolved 使用的 resolv.conf 文件的软链接:/etc/resolv.conf
/etc/resolv.conf
cd /etc
sudo rm resolv.conf
sudo ln -s /run/systemd/resolve/stub-resolv.conf resolv.conf
重启 systemd-resolved 后,该文件第一行包含 8.8.8.8,其下方是 DHCP 客户端从所连接网络的 DHCP 服务器收集的 DNS 服务器信息,例如:
nameserver 8.8.8.8
nameserver 192.168.1.1
nameserver 192.168.42.129
答案2
我刚刚用 udhcpc 替换了 isc-dhcp-client:
apt purge isc-dhcp-client udhcpc+
更新(使用默认的 eth0):
udhcpc renew