Ir al contenido

Convertir una configuración de red Debian ifupdown a netplan

Christophe TREMBLAY-GUILLOUX
Christophe TREMBLAY-GUILLOUXIngeniero de sistemas Linux

Desde siempre, el sistema de configuración de red en Debian ha sido ifupdown. Desde hace un tiempo ha aparecido Netplan y parece usarse cada vez más. Sé que a mucha gente le pesa este cambio forzado, pero no es el tema de esta nota.

bash
apt update
apt install netplan.io

2. Preparar después la configuración de Netplan

Sección titulada «2. Preparar después la configuración de Netplan»

Obtén el nombre y la dirección MAC de las interfaces:

bash
ip link

Este es el ejemplo en OVHcloud, con una instancia conectada a un VRACK además de la red externa. Pon la IPv6 asignada si existe, las direcciones MAC y los nombres correctos de interfaz de red:

/etc/netplan/50-cloud-init.yaml:

yaml
network:
version: 2
ethernets:
ens3:
accept-ra: false
addresses:
- 2001:xxx/56
dhcp4: true
match:
macaddress: xxx1
mtu: 1500
nameservers:
addresses:
- 213.186.33.99
search: []
routes:
- to: ::/0
via: 2001:xxx::1
set-name: ens3
ens7:
dhcp4: true
dhcp4-overrides:
use-routes: false
match:
macaddress: xxx2
set-name: ens7

3. Permisos del archivo, activación de networkd y prueba

Sección titulada «3. Permisos del archivo, activación de networkd y prueba»

Corrige los permisos del archivo yaml (netplan rechaza un archivo legible por todos):

bash
chmod 0600 /etc/netplan/50-cloud-init.yaml

Valida la sintaxis y genera la configuración de networkd (sin aplicar nada):

bash
netplan generate

Activa systemd-networkd antes de la prueba. Si no, netplan try avisa de que networkd no está arrancado, pasa a un «hard restart» y su vuelta atrás automática no es fiable:

bash
systemctl enable --now systemd-networkd

Prueba la configuración:

bash
netplan try

Te propone aplicarla: confirma si no has perdido la conexión. Si la has perdido, no toques nada: vuelve solo a la configuración anterior cuando se agota el plazo.

Comprueba primero que networkd está activado en el arranque (si no, la red no volverá en el próximo reinicio):

bash
systemctl is-enabled systemd-networkd # debe responder: enabled

Después el estado de las interfaces:

bash
netplan status --all
Online state: offline
DNS Addresses: 213.186.33.99
xxx
xxx
DNS Search: openstacklocal
● 1: lo ethernet UNKNOWN/UP (unmanaged)
MAC Address: 00:00:00:00:00:00
Addresses: 127.0.0.1/8
::1/128
● 2: ens3 ethernet UP (networkd: ens3)
MAC Address: xxx
Addresses: xxx/32 (dynamic, dhcp)
2001:xxx/56
fe80::xxx/64 (link)
Routes: default via xxx from xxx metric 100 (dhcp)
xxx from xxx metric 100 (dhcp, link)
213.186.33.99 via xxx from xxx metric 100 (dhcp)
2001:xxx::/56 metric 256
fe80::/64 metric 256
default via 2001:xxx::1 metric 1024 (static)
● 3: ens7 ethernet UP (networkd: ens7)
MAC Address: xxx
Addresses: xxx/16 (dynamic, dhcp)
fe80::xxx/64 (link)
Routes: xxx/16 from xxx metric 100 (link)
xxx from xxx metric 100 (dhcp, link)
xxx from xxx metric 100 (dhcp, link)
fe80::/64 metric 256
bash
apt purge ifupdown
apt purge resolvconf

6. (opcional) Instalar el soporte de los resolvedores conocidos por systemd-networkd

Sección titulada «6. (opcional) Instalar el soporte de los resolvedores conocidos por systemd-networkd»

Si systemd-networkd no está instalado, el archivo /etc/resolv.conf es un archivo normal que debe contener el DNS correcto, por ejemplo:

nameserver 213.186.33.99

Ese archivo, por tanto, no se actualizará con lo que indique el netplan, porque hemos tenido que quitar resolvconf, que ya no sirve de nada.

Así que instalamos el nuevo paquete systemd-resolved, que se encarga de apuntar resolv.conf hacia sí mismo y usa los DNS que haya recibido por su lado:

bash
apt install systemd-resolved

Para ver la configuración DNS:

bash
networkctl status
● Interfaces: 1, 2, 3
State: routable
Online state: online
Address: xxx on ens3
xxx on ens7
2001:xxx on ens3
fe80::xxx on ens3
fe80::xxx on ens7
Gateway: xxx on ens3
2001:xxx::1 on ens3
DNS: 213.186.33.99
xxx
xxx