El bonding de Linux agrupa varias interfaces de red físicas en una sola interfaz lógica (bond0). Según el modo, sirve para tener redundancia (si cae un cable, puerto o switch, el tráfico sigue por el otro enlace) o para sumar ancho de banda con LACP. En este tutorial configurarás un bond con Netplan en Ubuntu 24.04, primero en modo active-backup y después en modo LACP (802.3ad), y comprobarás que el failover funciona. Al final verás el equivalente con NetworkManager para Rocky Linux 9.

Requisitos previos

Para seguir esta guía necesitas:

  • Un servidor con Ubuntu 24.04 LTS con al menos dos interfaces de red conectadas a la misma red, normalmente un servidor dedicado o bare metal. Un VPS con una única interfaz no sirve para bonding.
  • Un usuario no root con privilegios sudo.
  • Acceso por consola remota (IPMI, iDRAC, iLO o KVM) al servidor. Vas a cambiar la configuración de la interfaz por la que te conectas, y un error puede dejarte sin acceso SSH.
  • Para el modo LACP, un switch que lo soporte y acceso a su configuración (o que tu proveedor configure el port-channel).

Paso 1: Elegir el modo de bonding

El kernel ofrece varios modos. Estos son los que se usan en la práctica:

ModoNombreQué haceConfiguración en el switch
1active-backupSolo un enlace transmite; el otro entra si el primero caeNinguna
4802.3ad (LACP)Agrega los enlaces y reparte las conexiones entre ellos; negocia con el switchPort-channel LACP
6balance-albReparte la carga sin ayuda del switch manipulando ARPNinguna
0balance-rrReparte paquete a paquete en turnosGrupo estático; puede desordenar paquetes TCP

Como regla general: usa active-backup si solo buscas redundancia o no controlas el switch, y 802.3ad si el switch soporta LACP y quieres usar el ancho de banda de ambos enlaces. Con LACP, una sola conexión TCP nunca supera la velocidad de un enlace: lo que se reparte son conexiones distintas.

Paso 2: Identificar las interfaces

Lista las interfaces del servidor y su estado:

ip -br link
lo               UNKNOWN        00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
eno1             UP             3c:ec:ef:12:34:56 <BROADCAST,MULTICAST,UP,LOWER_UP>
eno2             UP             3c:ec:ef:12:34:57 <BROADCAST,MULTICAST,UP,LOWER_UP>

Comprueba que ambas tienen enlace físico:

sudo ethtool eno1 | grep -E "Speed|Link detected"
sudo ethtool eno2 | grep -E "Speed|Link detected"
	Speed: 10000Mb/s
	Link detected: yes

Si ethtool no está instalado, instálalo con sudo apt install ethtool. En esta guía las interfaces son eno1 y eno2; sustitúyelas por las tuyas.

Anota también la configuración IP actual (dirección, puerta de enlace y DNS), porque pasará de la interfaz física al bond:

ip -br addr show eno1
ip route show default

Paso 3: Configurar un bond active-backup con Netplan

Ubuntu 24.04 gestiona la red con Netplan, que genera la configuración para systemd-networkd. Primero haz una copia de los archivos actuales:

sudo mkdir -p /root/netplan-backup
sudo cp /etc/netplan/*.yaml /root/netplan-backup/
ls /etc/netplan/
50-cloud-init.yaml

Si el archivo lo genera cloud-init (lo indica un comentario al inicio), evita que lo regenere en el siguiente arranque:

echo "network: {config: disabled}" | sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg

Edita el archivo de Netplan:

sudo nano /etc/netplan/50-cloud-init.yaml

Sustituye su contenido por esta configuración, con tus propios valores de IP, puerta de enlace y DNS en lugar de los de ejemplo:

network:
  version: 2
  renderer: networkd
  ethernets:
    eno1:
      dhcp4: false
    eno2:
      dhcp4: false
  bonds:
    bond0:
      interfaces: [eno1, eno2]
      addresses:
        - 203.0.113.10/24
      routes:
        - to: default
          via: 203.0.113.1
      nameservers:
        addresses: [1.1.1.1, 9.9.9.9]
      parameters:
        mode: active-backup
        primary: eno1
        mii-monitor-interval: 100
        up-delay: 200
        down-delay: 200

Qué significan los parámetros del bond:

  • primary: eno1: enlace preferido. Cuando esté disponible, el tráfico irá por él.
  • mii-monitor-interval: 100: comprueba el estado del enlace de cada interfaz cada 100 ms.
  • up-delay y down-delay: milisegundos que espera antes de activar un enlace que vuelve o de dar por caído uno que falla. Evitan cambios continuos si un enlace parpadea. Deben ser múltiplos de mii-monitor-interval.

Netplan exige que el archivo no sea legible por otros usuarios. Ajusta los permisos y comprueba la sintaxis:

sudo chmod 600 /etc/netplan/50-cloud-init.yaml
sudo netplan generate

Si netplan generate no muestra nada, la sintaxis es correcta. Aplica el cambio con netplan try, que revierte la configuración automáticamente si no confirmas en 120 segundos. Así, si pierdes la conexión, recuperarás el acceso sin tocar nada:

sudo netplan try
Do you want to keep these settings?

Press ENTER before the timeout to accept the new configuration

Changes will revert in 118 seconds

Desde otra terminal, abre una nueva sesión SSH al servidor. Si funciona, vuelve a la primera y pulsa Enter para confirmar.

Paso 4: Verificar el estado del bond

El kernel publica el estado detallado del bond en /proc/net/bonding/:

cat /proc/net/bonding/bond0
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: eno1 (primary_reselect always)
Currently Active Slave: eno1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 200
Down Delay (ms): 200

Slave Interface: eno1
MII Status: up
Speed: 10000 Mbps
Link Failure Count: 0

Slave Interface: eno2
MII Status: up
Speed: 10000 Mbps
Link Failure Count: 0

Comprueba también que la IP está ahora en bond0 y que tienes salida a Internet:

ip -br addr show bond0
ping -c 3 1.1.1.1
bond0            UP             203.0.113.10/24

Paso 5: Probar el failover

Un bond que nunca se ha probado no es redundancia. Desde otro equipo, lanza un ping continuo contra la IP del servidor y déjalo en marcha:

ping 203.0.113.10

En el servidor, desde la consola remota, desactiva la interfaz activa:

sudo ip link set eno1 down
grep "Currently Active Slave" /proc/net/bonding/bond0
Currently Active Slave: eno2

En el ping del otro equipo deberías perder como mucho uno o dos paquetes. Vuelve a activar la interfaz:

sudo ip link set eno1 up

Tras el up-delay, eno1 vuelve a ser la interfaz activa porque es la primaria. El contador Link Failure Count de eno1 en /proc/net/bonding/bond0 habrá aumentado en uno.

La prueba más realista es desconectar el cable o desactivar el puerto en el switch, porque también comprueba que la segunda interfaz está bien cableada y configurada en el switch.

Paso 6: Cambiar a LACP (802.3ad)

Con LACP, el servidor y el switch negocian un grupo de enlaces y ambos se usan a la vez. Configura primero el switch: los dos puertos deben pertenecer al mismo port-channel en modo LACP activo. Como referencia, en un switch con sintaxis tipo Cisco o Arista:

interface Port-Channel1
   description bond0 servidor
   switchport access vlan 100
!
interface Ethernet1
   channel-group 1 mode active
!
interface Ethernet2
   channel-group 1 mode active

Después, en el servidor, cambia el bloque parameters de bond0 en /etc/netplan/50-cloud-init.yaml:

sudo nano /etc/netplan/50-cloud-init.yaml
      parameters:
        mode: 802.3ad
        lacp-rate: fast
        transmit-hash-policy: layer3+4
        mii-monitor-interval: 100
  • lacp-rate: fast envía las tramas LACP cada segundo en lugar de cada 30, así que detecta antes un enlace roto.
  • transmit-hash-policy: layer3+4 reparte el tráfico saliente según IP y puerto, de modo que distintas conexiones pueden ir por enlaces distintos. Con el valor por defecto (layer2) todo el tráfico hacia la misma puerta de enlace usaría un solo enlace.
  • primary, up-delay y down-delay no aplican a LACP en esta configuración, por eso se eliminan.

Aplica el cambio con la misma red de seguridad:

sudo netplan generate
sudo netplan try

Verifica que LACP ha negociado con el switch. Ambas interfaces deben compartir el mismo Aggregator ID y el Partner Mac Address debe ser la MAC del switch, no ceros:

grep -E "Bonding Mode|Transmit Hash|Aggregator ID|Partner Mac" /proc/net/bonding/bond0
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer3+4 (1)
	Aggregator ID: 1
	Partner Mac Address: 28:99:3a:aa:bb:cc
Aggregator ID: 1
Aggregator ID: 1

Si una interfaz aparece con un Aggregator ID distinto o el Partner Mac Address es 00:00:00:00:00:00, el switch no está negociando LACP en ese puerto.

Equivalente con NetworkManager en Rocky Linux 9

En Rocky Linux 9, AlmaLinux 9 y RHEL 9 la red la gestiona NetworkManager. El bond active-backup equivalente se crea con nmcli:

sudo nmcli connection add type bond con-name bond0 ifname bond0 \
  bond.options "mode=active-backup,primary=eno1,miimon=100,updelay=200,downdelay=200" \
  ipv4.method manual ipv4.addresses 203.0.113.10/24 \
  ipv4.gateway 203.0.113.1 ipv4.dns "1.1.1.1 9.9.9.9"
sudo nmcli connection add type ethernet slave-type bond con-name bond0-eno1 ifname eno1 master bond0
sudo nmcli connection add type ethernet slave-type bond con-name bond0-eno2 ifname eno2 master bond0

Desactiva la conexión que tenía antes la IP en eno1 (consulta su nombre con nmcli connection show) y activa el bond, desde la consola remota:

sudo nmcli connection down "your_old_connection"
sudo nmcli connection up bond0
cat /proc/net/bonding/bond0

Para LACP, cambia las opciones a mode=802.3ad,lacp_rate=fast,xmit_hash_policy=layer3+4,miimon=100 con sudo nmcli connection modify bond0 bond.options "..." y reactiva la conexión.

Solución de problemas

netplan try revierte o pierdes la conexión. Revisa desde la consola remota los logs de systemd-networkd y el estado de las interfaces:

sudo journalctl -u systemd-networkd --since "10 min ago"
networkctl status bond0

Los errores más habituales son una IP o puerta de enlace mal escritas y que la interfaz física siga teniendo su propia IP en otro archivo de /etc/netplan/.

Solo una interfaz aparece en el bond. Comprueba con ethtool que la otra tiene enlace y que no está definida en otro archivo de Netplan con su propia configuración.

LACP no negocia. Confirma en el switch que los dos puertos están en el mismo port-channel y en modo active, y que ambos llegan al mismo switch (o a un par de switches con MLAG). Los mensajes del kernel indican el motivo:

sudo dmesg | grep -i bond

El ancho de banda no supera el de un enlace con LACP. Es lo esperado para una sola conexión. Para comprobar el reparto, lanza varias conexiones en paralelo, por ejemplo con iperf3 -P 8, y observa los contadores de cada interfaz con ip -s link show eno1.

Conclusión

Has agrupado dos interfaces en un bond con Netplan en Ubuntu 24.04, lo has verificado en /proc/net/bonding/bond0, has probado el failover en modo active-backup y has pasado a LACP con reparto por IP y puerto. Como siguientes pasos, puedes crear VLAN sobre el bond con la sección vlans de Netplan, repetir la prueba de failover desactivando puertos en el switch y añadir alertas cuando aumente el Link Failure Count de cualquier interfaz.