Zamora|León|Oviedo, España
esenfritptru

BLOG

⇉ Cómo configurar un bonding de interfaces en GNU/Linux Debian

⇉ Cómo configurar un bonding de interfaces en GNU/Linux Debian

Hoy en día, todos los sistemas informáticos están redundados con el fin de garantizar un >99,9% de disponibilidad. Al igual que un RAID garantiza el acceso y salvaguarda la información de la información de los discos, un Bonding de interfaces de red, garantiza que un sistema esté siempre accesible a través de una red informática. Si alguna vez te has preguntado como se hace esto, os enseñaré con este pequeño tutorial como se consigue tener HA (high availability) en un servidor con 2 interfaces de red físicas las cuales haremos que formen parte de un Bond.

El bonding de interfaces de red es la solución para tener alta disponibilidad y redundancia en los servidores donde realmente la conectividad sea un factor crítico, como en servidores que ofrecen servicios a clientes (servidores web, ftps, bases de datos etc...). Gracias al bonding, podremos agrupar varias interfaces de red físicas en una para conseguir un HA o incrementar el throughput de red.

En este pequeño tutorial os enseñaré como configurar dos interfaces de red para formar un bond en un sistema GNU/Linux Debian. Usaremos el software ifenslave el cual se encargará de añadir/remover/gestionar las tarjetas físicas que forman el bond. Una vez que el bond se configure y se active, comenzará a trabajar como si fuera un dispositivo físico de red como puede eser eth0, eth1 ...

1.- ELEMENTOS UTILIZADOS EN ESTE TUTORIAL
  • GNU/Linux Debian 8 (Virtualizado)

 

 

2.- TIPOS DE BONDING Y SU FUNCIÓN

Lo primero que tenemos que hacer antes de proceder a realizar ninguna configuración, es determinar el tipo de bonding que necesitamos para nuestro equipo y nuestras necesidades. Existen 6 tipos de bondings soportados por el Kernel de GNU/Linux. Algunos de estos modos de "bonding" requieren solamente de una pequeña configuración en los equipos, pero otros requieren configuraciones especiales en los switches que establecen los links.

Bond Mode 0 (balance-rr)

Este modalidad de bonding se la llama ‘Round-Robin‘. Con este método, los paquetes de red enviados son rotados entre cada una de las tarjetas que forman la interfaz del bond.

Por ejemplo, en un equipo con 4 interfaces de red eth0, eth1, eth2 y eth3 todas ellas como "esclavas" de la interfaz bond0. Cuando establecemos el bond en modo 0 (Round-Robin), el primer paquete se enviará por la interfaz eth0, el segundo por eth1, el tercero por eth2 y el 4 de nuevo por eth0.

 

Bond Mode 1 (active-backup)

Con esta modalidad de bonding, solo una de las interfaces está activa mientras que la otra estará en modo de "espera" hasta que la interfaz activa falle por algún motivo. Cuando falla la interfaz de red activa, la otra interfaz que está de backup asume el rol y se pone en activa.

 

Bond Mode 2 (balance-xor)

Este método evalúa el origen y el destino de los paquetes en función de la "mac address" para determinar a través de que interfaz de red del bond enviará los paquetes. Este método enviará los paquetes por la misma interfaz que tengan el mismo origen y destino. De esta forma conseguimos una especie de balanceo y tolerancia a fallos.

 

Bond Mode 3 (broadcast)

Transmite todas las tramas por todas las interfaces slave. Este modo nos ofrece tolerancia a fallos

 

Bond Mode 4 (802.3ad)

Se trata del estandard IEEE 802.3ad (Dynamic link aggregation) también llamado “port trunking“. Permite la definición de agregados ofreciendo alta disponibilidad y un aumento de la velocidad. Para poder configurar este modo necesitamos:

  • Soporte de ethtool para obtener la velocidad y el modo del interfaz.
  • El switch debe soportar el modo. Por ejemplo los CISCO lo soportan con el nombre port trunking.

 

Bond Mode 5 (balance-tlb)

Este modo transmite balanceando la carga entre los slave en función de la carga de cada slave. En el caso que uno falle la MAC salta a otro slave. Para calcular la carga de cada interfaz es necesario disponer de ethtool.

A diferencia de 802.3ad no se necesario soporte del switch para esta configuración.

Tenemos que tener en cuenta que puede producirse que los paquetes lleguen desordenados, por lo que puede ser peor el remedio que la enfermedad, especialmente en entornos de red complejos.

 

Bond Mode 6 (balance-alb)

Balanceo de carga tanto en el envío como en la recepción. Para el balanceo de carga en la recepción lo que se hace es manipulando los replies ARP para indicar una MAC en concreto de una de las interfaces slave.

Deberemos tener en cuenta que cualquier sistema de seguridad basado en las tablas ARP puede quejarse o simplemente tirar el puerto de la interfaz dejando el servidor sin conectividad.

 

 

3.- CONFIGURANDO EL BONDING

El primer paso se centra en instalar el paquete "ifenslave", encargado de funcionar como parte mediadora entre el bonding y el kernel de GNU/Linux. Lo instalaremos con usuario root ó con otro usuario con permisos de sudo:

# apt-get update
# apt-get install ifenslave

 

Una vez hemos terminado de instalar el paquete ifenslave, necesitamos configurar nuestro equipo para que una vez que se reinicie, el Kernel cargue el módulo necesario para gestionar el bonding. Para ello, bastará con añadir la palabra "bonding" al fichero /etc/modules:

# echo "bonding" >> /etc/modules 

 

Activamos el módulo a mano para proceder a configurar el bonding en los pasos posteriores:

# modprobe bonding 

 

Comprobamos que el módulo está cargado:

# lsmod | grep bonding

 

Ahora necesitamos crear la configuración necesaria para activar nuestro bonding de interfaces de red. En este ejemplo crearé un bonding de tipo 1, es decir activo-pasivo y probaremos que funciona correctamente. La configuración de red en GNU/Linux Debian se realiza en el fichero /etc/network/interfaces y las 2 interfaces que formarán el bonding son eth0 y eth1. La parte de configuración del bond0 en el fichero de configuración queda de la siguiente forma:

iface bond0 inet static
    address 192.168.0.187
    netmask 255.255.255.0
    network 192.168.0.0
    gateway 192.168.0.1
    slaves eth0 eth1
    bond_mode 1
    bond_miimon 100
    bond_downdelay 200
    bond_updelay 200

 

 


Una vez hemos realizado los cambios en el fichero de configuración, reiniciaremos la red con el comando: 

# /etc/init.d/networking restart

 

Ahora listaremos las interfaces de red y veremos como tenemos: eth0, eth1, bond0 y el loopback:

# ifconfig -a

 

Bonding

Listado de interfaces

 

El estado del bonding podemos comprobarlo a través del fichero /proc/net/bonding/bond0:

# cat /proc/net/bonding/bond0

 

Bonding

Estado del bond0

 

 

4.- COMPROBANDO EL FUNCIONAMIENTO DEL BONDING

Abriremos una consola Shell y haremos ping de forma continua hacia Google, por ejemplo:

# ping 8.8.8.8

 

Bonding

Ping a Google 2 interfaces UP

 

Ahora mismo el tráfico está saliendo por una de las 2 interfaces de red. Ambas están UP pero es el bond quién gestiona por cual de ellas sale el tráfico. Podemos indicarle una interfaz preferida en el fichero /etc/network/interfaces con la opción de bond_primary.

 

Lo siguiente que haremos será desconectar la interfaz de red eth0. Como estoy virtualizando el equipo GNU/Linux Debiancon VMWARE WORKSTATION 11, iré a la configuración de la VM y desconectaré la primera interfaz eth0:

 

Bonding

Desconectamos la interfaz de red

 

La interfaz que está como SLAVE RUNNING es la interfaz eth0 y como SLAVE es la eth1. Podemos verlo con el comando "ifconfig". Con el PING funcionando a Google y desconectando la interfaz eth0 (SLAVE RUNNING), veremos como la intarfaz "cae" pero el PING se recupera y el tráfico lo asume la eth1 (SLAVE ahora nueva SLAVE RUNNING):

 

Bonding

Ping a Google se recupera por la interfaz pasiva/slave

 

Si hacemos un ifconfig, podemos ver como ahora eth0 es la interfaz SLAVE y la eth1 la interfaz SLAVE RUNNING:

Bonding

Estado del bond tras la desactivación de eth0

 

El estado del bonding podemos comprobarlo a través del fichero /proc/net/bonding/bond0. Ahora se puede ver que eth0 está DOWN:

# cat /proc/net/bonding/bond0

Bonding

Estado del bond0

 

Estos mismos pasos podemos hacerlos con la interfaz eth1, pero debemos tener en cuenta que al estar en modo 1 (activo-pasivo), al menos una de las 2 interfaces de red debe estar UP&RUNNING para que la conectividad funcione correctamente.

 

ENJOY!


Raúl Prieto Fernández

Sitio Web: www.raulprietofernandez.net

Si quieres ir rápido, ve solo. Si quieres llegar lejos, ve acompañado.

Comentarios  

lmunoza
# lmunoza 21-11-2016 22:14
a mi me ha salido poniendo ifenslave en lugar de ifupslave
Responder
Ral Prieto Fernndez
# Raúl Prieto Fernández 21-11-2016 23:07
Hola:

Efectivamente, era una errata en el tutorial. Muchas gracias por avisar y me alegro que te funcionase.

Un saludo
Responder

Escribir un comentario

Código de seguridad
Refescar

Aprende mucho más...

Acerca de mi

Soy Ingeniero Téc. Industrial Mecánico y Administrador de Sistemas Informáticos.

Contactar conmigo

Dirección: León, España
E-Mail: raul.lnx@gmail.com
Web: http://www.raulprietofernandez.net
Skype: raul.lnx



Follow Me - Instagram

Apúntate Gratis

Entra en la Comunidad VIP y consigue acceso a las descargas en PDF, Trucos y Videotutoriales ocultos y mucho más....

¡Muy Pronto!