Configuración de acoplamiento de tarjetas de red (bonding).

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: http://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org

Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2014 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector, hace mal uso de éstos.

Introducción.

El controlador bonding, originalmente creado por Donald Becker, está incluido en prácticamente todas las distribuciones de GNU/Linux y permite sumar las capacidades de varias interfaces físicas de red con objeto de crear una interfaz lógica. Esto se lleva a cabo con el objeto de contar con redundancia o bien balanceo de carga.

Procedimientos.

Archivo de configuración.

En CentOS 5 y Red Hat Enterprise Linux 5 se debe editar el archivo /etc/modprobe.conf:

vi /etc/modprobe.conf

En ALDOS 1.4, CentOS 6 y Red Hat Enterprise Linux 6 se debe crear un archivo que puede denominarse arbitrariamente como /etc/modprobe.d/bonding.conf:

vi /etc/modprobe.d/bonding.conf

En cualquiera de los dos casos mencionados, se debe añadirse lo siguiente para asociar el controlador bonding a la interfaz bond0 del siguiente modo:

alias bonding bond0

El controlador puede llevar además opciones que permiten modificar su funcionamiento, de entre los cuales los más importantes son mode y miimon. A fin de obtener un buen funcionamiento, es importante configurar al menos estas dos opciones.

Para fines generales, se puede puede utilizar lo siguiente:

alias bond0 bonding
options bonding mode=0 miimon=0

El valor de la opción mode establece la política de balanceo de carga y tolerancia a fallos y el valor de la opción miimon establece al tipo de supervisión de MII, donde 0 corresponde la configuración más común.

Al terminar con el archivo /etc/modprobe.conf, es importante utilizar el mandato depmod con la opción -a para regenerar el archivo modules.dep, el cual es utilizado como el mapa de dependencias de los controladores utilizados por el núcleo del sistema.

depmod -a

Lo anterior solo debe devolver el símbolo de sistemas después de unos segundos.

Opción mode.

Se utiliza para establecer la política baja la cual se hará trabajar las tarjetas en conjunto. Los posibles valores son:

0 (cero): Establece una política de Round-Robin, que es un algoritmo que asigna una carga equitativa y ordenada a cada proceso, para proporcionar tolerancia a fallos y balanceo de carga entre los miembros del arreglo de dispositivos. Todas las transmisiones de datos son enviadas y recibidas de forma secuencial en cada interfaz esclava del arreglo empezando con la primera que esté disponible. Es la política predeterminada del controlador y la que funciona para la mayoría de los casos.

1 (uno): Establece una política de respaldo activo que proporciona tolerancia a fallos. Todo el tráfico se transmite a través de una tarjeta y solo se utilizará la otra en caso de que falle la primera.

2 (dos): Establece una política XOR (exclusive-or, exclusiva-o) para proporcionar tolerancia a fallos y balanceo de carga. Este algoritmo compara las solicitudes entrantes de las direcciones MAC hasta que coinciden para la dirección MAC (Media Access Control) de una de las tarjetas esclavas. Una vez que se establece el enlace, las transmisiones de datos de datos son enviadas en forma secuencial empezando con la primera interfaz disponible.

3 (tres): Establece una política de Round-Robin, para proporcionar tolerancia a fallos y balanceo de carga. Todas las transmisiones de datos son enviadas de forma secuencial en cada interfaz esclava del arreglo empezando con la primera que esté disponible.

En el siguiente ejemplo se establece la política 0 (cero):

options bonding mode=0

Opción miimon.

Se utiliza para especificar cada cuantos milisegundos se debe supervisar el enlace MII (Media Independent Interface). Se utiliza cuando se necesita alta disponibilidad para verificar si la interfaz está activa y verificar si hay un cable de red conectado. En el siguiente ejemplo se establecen 100 milisegundos:

options bonding mode=0 miimon=100

Se requiere que todos los controladores del arreglo de tarjetas tengan soporte para MII. Para verificar si el controlador de la tarjeta tiene soporte para MII, se utiliza el mandato ethtool, donde la salida debe devolver Link Detected con el valor yes. Ejemplo:

ethtool eth0

Lo anterior debe devolver algo similar a lo siguiente:

Settings for eth0:
	Supported ports: [ TP MII ]
	Supported link modes:   10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	Supports auto-negotiation: Yes
	Advertised link modes:  10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	Advertised auto-negotiation: Yes
	Speed: 100Mb/s
	Duplex: Half
	Port: MII
	PHYAD: 32
	Transceiver: internal
	Auto-negotiation: on
	Supports Wake-on: pumbg
	Wake-on: d
	Current message level: 0x00000007 (7)
	Link detected: yes

Para desactivar esta función, se utiliza el valor 0 (cero). Ejemplo:

options bonding mode=0 miimon=0

Archivo de configuración /etc/sysconfig/network-scripts/bond0.

Este se configura con las mismas variables de un dispositivo de red regular. Requiere las variables ONBOOT, BOOTPROTO, DEVICE, IPADDR, PREFIX (o bien NETMASK en CentOS 5 y Red Hat™ Enterprise Linux 5) y GATEWAY.

En el siguiente ejemplo se configura la interfaz bond0 con la dirección IP estática 192.168.0.1, máscara de subred de 24 bits (255.255.255.0), puerta de enlace 192.168.0.254 y la interfaz inicia junto con el sistema creando el archivo /etc/sysconfig/network-scripts/ifcfg-bond0 con el siguiente contenido:

DEVICE=bond0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192-168.0.1
PREFIX=24
GATEWAY=192.168.0.254

Las interfaces de red a utilizar como esclavas se configuran de la siguiente forma, considerando que se tiene eth0 y eth1, el contenido del archivo /etc/sysconfig/network-scripts/ifcfg-eth0 sería:

DEVICE=eth0
BOOTPROTO=none
ONBOOT=no
SLAVE=yes
MASTER=bond0

Y el contenido del archivo /etc/sysconfig/network-scripts/ifcfg-eth1 sería:

DEVICE=eth1
BOOTPROTO=none
ONBOOT=no
SLAVE=yes
MASTER=bond0

Iniciar, detener y reiniciar el servicio network.

Para ejecutar por primera vez el servicio network tras configurar el acoplamiento de tarjetas, utilice:

service network start

Para hacer que los cambios hechos tras modificar la configuración surtan efecto, utilice:

service network restart

Para detener el servicio network utilice:

service network stop

Comprobaciones.

Para verificar que la interfaz lógica quedó configurada, en el caso de haber utilizado las interfaces eth0 y eth1, utilice:

ip addr list

Lo anterior debe devolver algo similar a lo siguiente:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 qlen 1000
    link/ether 00:06:4f:80:0d:92 brd ff:ff:ff:ff:ff:ff
3: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 qlen 1000
    link/ether 00:06:4f:80:0d:92 brd ff:ff:ff:ff:ff:ff
4: sit0: <NOARP> mtu 1480 qdisc noop 
    link/sit 0.0.0.0 brd 0.0.0.0
5: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue 
    link/ether 00:06:4f:80:0d:92 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.1/24 brd 192.168.1.255 scope global bond0
    inet6 fe80::206:4fff:fe80:d92/64 scope link tentative 
       valid_lft forever preferred_lft forever

Para verificar que las interfaces de red están funcionando correctamente y que hay un cable de red conectado a éstas, se utiliza el mandato ethtool del siguiente modo:

ethtool eth0 |grep "Link detected"
ethtool eth1 |grep "Link detected"

Si ambas tarjetas tiene soporte para MII, lo anterior debe devolver lo siguiente:

	Link detected: yes
	Link detected: yes

Bibliografía.