Problemas con dhcp leases en Ubuntu 18.04

2019/08/20

TL;DR: netplan en Ubuntu 18.04 no utiliza por defecto la mac al interactuar con el servidor dhcp.

Contexto

Varios PC’s, los cuales se instalaron a partir de una misma imagen de disco basada en Ubuntu 18.04, presentan problemas con la IP asignada mediante dhcp. Por como está configurado el lease time (default-lease-time/max-lease-time) en el servidor dhcp, las IP’s deberían reservarse por varios días, pero se observa que en realidad estas cambian de forma esporádica.

Problema

A partir de Ubuntu 18.04 se depreca ifupdown en favor de netplan.io para realizar la configuración de la red.

Una configuración típica de la red con netplan se realiza mediante archivos yaml en el directorio /etc/netplan/.

Por ejemplo, en el archivo /etc/netplan/use-dhcp.yaml:

network:
  version: 2
  renderer: networkd
  ethernets:
    all-ethernets:
      match:
        name: en*
      dhcp4: true

La configuración anterior indica que se utilizará systemd-networkd para manejar y configurar las interfaces de red cableadas (prefijo en), y que la IP se obtendrá utilizando dhcp.

El problema radica en que por defecto systemd-networkd, el renderer elegido, no utiliza el mac address como identificador del PC (como se espera), sinó que en su lugar utiliza como tipo de identificador el valor por defecto de ClientIdentifier cuyo valor es duid. El tipo de duid a utilizar se indica en la configuración de networkd y corresponde por defecto a vendor, cuyo valor se genera de la siguiente forma:

the DUID value will be generated using “43793” as the vendor identifier (systemd) and hashed contents of machine-id.

Dado que los PC’s se instalaron a partir de una misma imagen utilizando clonezilla, todos poseen el mismo archivo /etc/machine-id, el cual es establecido durante la instalación y debería contener el unique machine ID del sistema local.

Por lo anterior, se entiende el porqué del comportamiento erratico de los leases de dhcp: cada vez que se pide una IP para un PC, se le está enviando al servidor el mismo identificador.

Solución

Según la página del manual de netplan, alcanza con agregar la opción dhcp-identifier: mac para que se le indique a systemd-networkd que utilice la mac de la tarjeta de red como id del cliente al solicitarle una IP al servidor dhcp con lo que se soluciona el problema.

El archivo de configuración de netplan pasa a quedar como sigue:

network:
  version: 2
  renderer: networkd
  ethernets:
    all-ethernets:
      match:
        name: en*
      dhcp4: true
      dhcp-identifier: mac

Observaciones

Se siente como una complejidad adicional el agregado de netplan por defecto en ubuntu.

También se puede considerar una mala elección por parte de systemd (convengamos que críticas no le faltan a systemd), el uso de un identificador que no sea la mac para identificar al PC.