Publicado 2019-08-20.
Palabras clave: dhcp netplan systemd-networkd
TL;DR: netplan en Ubuntu 18.04 no utiliza por defecto la mac al interactuar con el servidor dhcp.
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.
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.
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
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.