Wrong IP address from DHCP client on Ubuntu 18.04

The cause of the problem is that the built-in network config of Ubuntu 18.04 no longer uses the NIC Mac address as the default id for DHCP requests.

The traditional (and I believe "sensible") behavior can be restored by adding dhcp-identifier: mac to the configuration in the /etc/netplan/xxx.yaml (cloud-init) file as follows:

network:
    renderer: networkd
    version: 2
    ethernets:
        nicdevicename:
            dhcp4: true
            dhcp-identifier: mac

Where "nicdevicename" is the name of your network device

Use

sudo netplan apply

to try the new configuration. If you get any errors, please note that precise indentation is very important in .yaml files..


Denying the lease won't work. There's no way networkd could know why it's being denied, so it won't just magically switch to a different ID type if you do so. You have to do that manually.

If your systemd version is recent enough and if you have direct control over the config files written out by cloud-init, you can tell systemd-networkd to send a MAC-address-based client ID via the *.network file:

[DHCP]
ClientIdentifier=mac

But if you know that systemd-networkd will always be used, you can just assign the correct lease to client ID 032e827c00020000ab11d0fc617dced58a43, because that's what systemd-networkd will always send for that machine. (It generates the ID based on /etc/machine-id.)


Mos DHCP clients, including dhclient, supply a client-ID field of type '01' (MAC-based). Another common type is '00' (domain name). However, by default, systemd-networkd supplies an "opaque" client-ID that was generated from the contents of /etc/machine-id.

According to the DHCP protocol, leases are chosen by client ID first (as long as the client supplies a "client ID" option, which may or may not be MAC-based), then by the MAC address only if the client didn't send an ID.

So when you're configuring a reservation, all good DHCP servers will allow you to enter either the client ID or the MAC address. If you enter just the MAC address, then I suppose that a type-'01' (MAC-based) client ID is automatically implied. There may be a checkbox named "Ignore client ID", which is convenient for you but technically violates the DHCP spec.

(For example, I have two Wi-Fi adapters with different MACs, but I've configured the OS to send the same client ID no matter which adapter is connected. This way I get the same address via both.)