Hostname Configured in hostname File Is Superseded by the DHCP hostname Option
If a Cumulus Linux switch receives a DHCP lease containing the hostname option, the received DHCP hostname supersedes any hostname applied in /etc/hostname.
Issue
Changing the system hostname via /etc/hostname
in Cumulus Linux does not have any effect while an active DHCP lease containing the hostname option exists, or if an active DHCP server continues to offer the hostname option in assigned leases.
Environment
- Cumulus Linux 2.5.x and later
- Active DHCP lease containing the hostname option cached in
/var/lib/dhcp/dhclient.eth0.leases
, and/or a DHCP server offering a lease containing the hostname option - DHCP client configuration in
/etc/dhcp/dhclient.conf
containing default parameters send host-name and request host-name
Cause
This condition can occur when a switch running Cumulus Linux obtains a DHCP lease on management port eth0 and you attempt to change the hostname by editing /etc/hostname
.
If you try to reboot the switch to change to the new hostname configured in /etc/hostname
while the previous DHCP lease is still active, the DHCP hostname option cached locally on the switch in /var/lib/dhcp/dhclient.eth0.leases
and/or the hostname option received from an active DHCP server supersedes the name manually configured in /etc/hostname
.
Note that even if the DHCP server is not explicitly configured to offer a lease containing the hostname option, it might continue to send a previous version of the switch hostname configured in /etc/hostname
because Cumulus Linux enables the send-hostname option by default in /etc/dhcp/dhclient.conf
. This causes the switch to send the locally configured hostname in DHCP Discover and Request messages. The DHCP server might cache this value and continue to offer it back in subsequent DHCP offers to the switch as long as the original lease is active, which supersedes any new changes made to /etc/hostname
on the switch.
Resolution
You have two ways to work around this issue. You can configure dhclient.conf
to:
- Supersede the hostname option received from DHCP
- Not request the hostname option in DHCP Discover and Request packets
Superseding the hostname Option
After configuring the desired hostname in /etc/hostname
, add the following line to /etc/dhcp/dhclient.conf
to supersede any received hostname option from DHCP with the desired hostname configured in /etc/hostname
instead:
supersede host-name "configured-hostname";
Not Requesting the hostname Option
If preferred, you can configure /etc/dhcp/dhclient.conf
to not request the hostname option in the Parameter Request List [option 55] in DHCP Discover and Request packets.
To do this, edit /etc/dhcp/dhclient.conf
and remove "host-name" from the Request option list, as highlighted here:
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, domain-search, host-name,
dhcp6.name-servers, dhcp6.domain-search,
netbios-name-servers, netbios-scope, interface-mtu,
rfc3442-classless-static-routes, ntp-servers, cumulus-provision-url;