0

I've just seen the news on https://www.isc.org/dhcp :

ISC has ended development on the ISC DHCP client as of early 2022. This client implementation is no longer maintained and should not be used in production any longer.

Now that dhclient seems to be retired, what DHCP client should I use?

More specifically, I use Debian 11 and I need a DHCP client that can be instructed from the command line to renew the lease. Currently I do this:

sudo dhclient -r
sudo dhclient

Or, for a specific interface, like eth0:

sudo dhclient -r eth0
sudo dhclient eth0

--- EDIT ---

Other discussions of this question:

They seem to suggest systemd-networkd.

kol
  • 133
  • 7

1 Answers1

1

I replaced dhclient with systemd-networkd's DHCP client the following way:

1. Uninstall dhclient

sudo apt purge -y isc-dhcp-client
sudo apt purge -y isc-dhcp-common

2. Start systemd-networkd

sudo systemctl start systemd-networkd
sudo systemctl enable systemd-networkd

3. Make systemd-networkd manage network interfaces, using its own DHCP client

For every interface, create a *.network config file in /etc/systemd/network, for example 05-enp1s0.network:

[Match]
Name=enp1s0

[Network]
DHCP=yes

After restarting Linux, or restarting systemd-networkd, or sudo networkctl reload, these interfaces will be configured by the DHCP client of systemd-networkd. Renewing interface configurations is easy, for example:

sudo networkctl renew enp1s0

This is highly subjective, but my initial experience is that systemd-networkd's DHCP client is more trustworthy and reacts faster than dhclient. If I change network connections, which happens often in my use case, I get a nice plug'n'play experience.


4. [Optional] Add 8.8.8.8 as the primary DNS server

Turn on systemd-resolved:

sudo systemctl start systemd-resolved
sudo systemctl enable systemd-resolved

In /etc/systemd/resolved.conf:

[Resolve]
DNS=8.8.8.8

In /etc/nsswitch.conf, add resolve at first place for hosts:

...
hosts:      resolve [!UNAVAIL=return] files dns
...

Now systemd-resolve will work, but nslookup will still use the DNS server that was written into /etc/resolv.conf by the DHCP client. To solve this, convert /etc/resolv.conf into a soft link to the resolv.conf file used by systemd-resolved:

cd /etc
sudo rm resolv.conf
sudo ln -s /run/systemd/resolve/resolv.conf resolv.conf

This file contains 8.8.8.8 in the first line and below that the DNS servers collected by the DHCP client from the DHCP servers of connected networks, for example:

nameserver 8.8.8.8
nameserver 192.168.1.1
nameserver 192.168.42.129
kol
  • 133
  • 7