CHANNEL BONDING EN DEBIAN
El Channel Bonding1 o unión de interfaces de red consiste en simular un dispositivo de red con
gran ancho de banda uniendo varias tarjetas de red independientes, de manera que las aplicaciones
sólo verán un interfaz de red. Con el channel bonding conseguimos varias cosas:
• Mayor ancho de banda: el ancho de banda de la interfaz virtual será la suma de los anchos de
banda de las interfaces reales.
• Balanceo de carga: tendremos balanceo de carga del tráfico de red entre todas las interfaces
reales (por defecto, Round Robin).
• Redundancia: si falla una tarjeta de red los datos irán sólo por las que estén en buen estado.
En Linux se encarga del channel bonding el módulo Linux Channel Bonding (abreviadamente
bonding2). Para activarlo en Debian, en un equipo con un par de adaptadores de red (eth0 y eth1),
seguiremos los siguientes pasos:
1. Instalar el paquete ifenslave (interface enslave, encargado de funcionar como parte mediadora
entre el bonding y el kernel de GNU/Linux):
# apt-get install ifenslave
Nota: El anterior paquete proporciona el comando ifenslave que permite en tiempo real modificar un
bond ya existente, pudiendo alterar su modo, añadir o sacar interfaces de red, etc. Por ejemplo:
Añadir tarjetas al bond: # ifenslave bond0 eth1 eth2
Eliminar tarjetas del bond: # ifenslave -d bond0 eth2
Cambiar la tarjeta de red esclava: # ifenslave -c bond0 eth2 eth1
2. Cargar el módulo bonding del kernel (el parámetro miimon=100 significa que monitoriza cada
100ms si las tarjetas reales funcionan)
# modprobe bonding miimon=100
Nota: Si al iniciar la máquina no se carga automáticamente el módulo del kernel puede añadirse el
nombre del módulo al fichero /etc/modules o al /etc/modules-load.d/modules.conf. También
puede crearse un archivo, a saber, /etc/modprobe.d/bonding.conf, con las opciones de
configuración deseadas, como muestran las líneas siguientes 3:
alias bond0 bonding
[options bond0 mode=1 miimon=100 ...]
3. Configurar la interface virtual bond0 en el fichero /etc/network/interfaces, p.e:
...
auto bond0
iface bond0 inet dhcp
bond_slaves eth0 eth1
bond_mode active-backup
bond_miimon 100
1 Ethernet bonding, está regulada por la norma IEEE 802.3ad con el título link aggregation. Es un término
técnico de las redes informáticas que describe el acoplamiento de dos o más canales de Ethernet en paralelo
para producir un solo canal de mayor velocidad y/o aumentar la disponibilidad y la redundancia de ese canal.
2 Puede verse información sobre el módulo y opciones de configuración con el comando: # modinfo bonding
3 También puede que se cargue el módulo automáticamente al activarse el bond0 de /etc/network/interfaces.
bond_primary eth0
bond_downdelay 200
bond_updelay 200
#bond_fail_over_mac active
...
Nota: Los interfaces esclavos, eth0 y eth1, no deberían tener ninguna configuración en dicho fichero.
La última opción del fichero anterior puede ser necesaria en un entorno de Virtualización para
que funcione correctamente el bonding en algunos modos de red, como el modo puente.
4. Reiniciamos el servicio de red y comprobamos la configuración con todos o algunos de los
siguientes comandos:
# systemctl restart networking4
# ifconfig -a (o ip address list)
# cat /proc/net/bonding/bond0
# cat /sys/class/net/bond0/bonding/fichero_variable
Nota: Deberían aparecer los tres interfaces: bond0, eth0 y eth1, con el estado correspondiente
(master/slave) y deberían tener la misma MAC, para que las tres sean “vistas” por el resto de la
red como una sola interface.
5. Comprobar el funcionamiento. Para ello, p.e., realizamos un ping hacia internet y desactivamos
temporalmente la interfaz que se encuentra como activa en el bonding bien bajando el interfaz
con uno de los siguientes comandos o desconectando físicamente el cable de red:
# ping 8.8.8.8
# ip l set dev eth0 down (o ifdown eth0)
La conexión debería interrumpirse momentáneamente pero recuperarse rápidamente, tomando
eth1 el relevo del interface activo dentro del bonding. Puede comprobarse de nuevo el estado del
bonding con los comandos del punto 4.
Nota: Si se desea ver en tiempo real las estadísticas de los paquetes recibidos y transmitidos por los
interfaces se puede ejecutar el comando siguiente:
# watch -d -n1 netstat -i
(Con el parámetro -d veremos resaltado con gris los cambios que ocurran, en este caso el número
de paquetes que se envían y reciben. Con -n1 se indica que se actualizará cada segundo. Veremos
como se van alternando las tarjetas de red en la recepción y envío de paquetes según el algoritmo
utilizado)
4 Si aparece algún mensaje de error eliminar o comentar todas las líneas de configuración de las interfaces esclavas.
APÉNDICE 1 - NOTAS SOBRE LA CONFIGURACIÓN DE BONDING EN CENTOS
La configuración de bonding en CentOS es muy similar. En principio no requiere la instalación
de ningún paquete adicional. Quizás la única diferencia sea la configuración de los adaptadores de
red que en este caso debe realizarse en diferentes ficheros de configuración:
1. Configurar la carga del módulo en memoria en el arranque del sistema, por ejemplo, creando el
fichero /etc/modules-load.d/bonding.conf con el siguiente comando:
# echo bonding > /etc/modules-load.d/bonding.conf
2. Arrancar el módulo manualmente:
modprobe bonding
3. Crear los ficheros de configuración de los interfaces5:
/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
/etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
/etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
ONBOOT=yes
BOOTPROTO=dhcp6
BONDING_OPTS7=”mode=0 miimon=100”
#BOND_FAIL_OVER_MAC=active
4. Reiniciamos los servicios de red:
# systemctl restart network
5 Si ya existen dichos ficheros se pueden dejar el resto de opciones con los valores existentes
6 También se puede usar una dirección estática si se desea.
7 No es necesario incluir las opciones que ya se especificaron en el fichero de configuración del módulo,
aunque se pueden incluir opciones adicionales que no se especificaron en dicho fichero.
APÉNDICE 2 – PARÁMETROS DE CONFIGURACIÓN DE BONDING
TIPOS DE BONDING
• Modo 0 ó Balance-RR (Balance Round Robin): Utiliza el método Round-Robin entre las
tarjetas de red que forman el enlace. Es decir, transmite los paquetes en orden secuencial desde
la primera tarjeta esclava hasta la última, y entonces vuelve a empezar por la primera de nuevo.
Esta opción ofrece balanceo de carga y tolerancia a fallos.
• Modo 1 ó Active-Backup: Sólo una de las tarjetas esclavas está activa. Si la tarjeta activa falla,
otra tarjeta se vuelve activa y recibe el tráfico. Ofrece tolerancia a fallos.
• Modo 2 ó Balance-XOR: Se aplica una política XOR basada en dirección MAC origen XOR
dirección MAC destino. De esta forma se selecciona la misma tarjeta esclava para cada MAC de
destino. Ofrece balanceo de carga y tolerancia a fallos.
• Modo 3 ó Broadcast: Se retransmiten todos los paquetes a todas las tarjetas esclavas. Ofrece
tolerancia a fallos.
• Modo 4 ó 802.3ad: 802.3ad nos permite agregar varios enlaces para conseguir un mayor ancho
de banda. Todos los enlaces deben tener la misma velocidad y ancho de banda. Es necesario
equipamiento de red que soporte 802.3ad. En redes esto se conoce como Port Trunking y en
Cisco como LACP.
• Modo 5 ó Balance-TLB (Adaptative Transmit Load-Balance): El tráfico saliente se distribuye
según la carga de trabajo en cada tarjeta esclava.
• Modo 6 ó balance-ALB (Adaptative Load-Balancing): Incluye el balanceo de tráfico saliente
(modo 5) más el balanceo de tráfico entrante.
CONFIGURACIÓN EN /etc/network/interfaces
• Las interfaces esclavas del canal bonding no deben tener ninguna configuración en el fichero
/etc/network/interfaces, ni se activarán con líneas auto o allow-hotplug.
• Elegimos un nombre para la interfaz maestra, normalmente bond0, bond1, etc.
• Si queremos que el canal bonding se active automáticamente al arrancar el sistema añadimos la
línea: auto bond0
• Definimos la interfaz maestra bond0 con una línea iface y sus parámetros normales para el
método static (address, netmask, gateway, network, broadcast, up, down, etc.) o dhcp y los
parámetros bonding que se deseen.
PARÁMETROS BONDING DE iface
• bond_mode: Modo de funcionamiento de bonding elegido (0, 1, etc.), aunque también podemos
poner el nombre del modo en minúsculas.
• bond_miimon: Tiempo en milisegundos entre revisiones del sistemas de las interfaces para ver
si tienen algún problema (estropeada o cable desconectado).
• bond_downdelay: Tiempo en milisegundos para considerar caída una interfaz.
• bond_updelay: Tiempo en milisegundos para considerar levantada una interfaz.
• bond_slaves: Listado ordenado de las interfaces que forman el canal bonding. En el modo
active-backup la primera será la interfaz esclava primaria.