Buscando...
28 septiembre 2009

Unión de interfaces de red (channel bonding) en Linux DEBIAN y sus derivados.


A continuación publico esta aportación del Ing. Basilio B. Alvárez sobre el Channel Bonding en Linux Debian.
Actualmente el Ing. Alvárez imparte docencia en el
Instituto de Formación Técnico Profesional (INFOTEP)
en la República Dominicana.
Agradezco su colaboración y ojalá pueda enviarnos más...

Channel bonding en Linux DEBIAN y sus derivados.

El channel bonding 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:
Esta es una manera de hacer redundancia, balanceo de carga, y sobre todo tener un mayor ancho de banda.
* 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.

Uso más comun de esta configuración:

Cuando se tiene poco presupuesto y se quiere tener un buen ancho de banda especialmente en un servidor de archivo, ya sea porque no se pueden comprar equipos para fibra optica, aun así se puede utilizar este método con varias tarjetas a 1Gbs de Fibras, suponiendo que tenemos 4 tarjetas configuradas en la interfaz bond0, eso sería igual a la suma de los anchos de banda de todas las tarjetas en este caso 4 Gbs simulando una sola tarjeta, donde cualquiera de éstas puede fallar por cualquier causa, entrado en funcion la interfaz bond0 con una de la tarjeta menos, pero sin sacar el servidor de línea.
El Linux se encargará del channel bonding mediante el módulo Linux Channel Bonding.

Veamos cómo activarlo en un equipo con dos interfaces de red (eth0 y eth1):

1. Instalamos ifenslave (interface enslave, paquete ifenslave):
# apt-get install ifenslave
2. Cargamos en el kernel el módulo bonding (el parámetro miimon=100 significa que monitoriza cada 100 ms si las tarjetas reales funcionan):
# modprobe bonding miimon=100
3. Editamos /etc/network/interfaces y configuramos la interfaz virtual bond0 (con la directiva slaves definimos las tarjetas de red reales que forman bond0):
auto bond0
iface bond0 inet static
address 192.168.0.100
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1
slaves eth0 eth1
Para que al arrancar sólo se active bond0 eliminaremos las líneas auto eth0 y auto eth1, Así sucesivamente ethN.
4. Levantamos la interfaz virtual:
# ifup bond0
Si las interfaces reales están up las hecharemos abajo:
# ifdown eth0
# ifdown eth1
5. Comprobamos si todo está correcto (las tres interfaces deben tener la misma MAC):
# ifconfig
bond0 Link encap:Ethernet HWaddr 00:11:22:33:44:55
inet addr:192.168.0.100 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::211:22ff:fe33:4455/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:1357 errors:0 dropped:0 overruns:0 frame:0
TX packets:793 errors:14 dropped:0 overruns:0 carrier:14
collisions:0 txqueuelen:0
RX bytes:144979 (141.5 KiB) TX bytes:148606 (145.1 KiB)
eth0 Link encap:Ethernet HWaddr 00:11:22:33:44:55
inet6 addr: fe80::211:22ff:fe33:4455/64 Scope:Link
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:462 errors:0 dropped:0 overruns:0 frame:0
TX packets:303 errors:14 dropped:0 overruns:0 carrier:14
collisions:0 txqueuelen:1000
RX bytes:51388 (50.1 KiB) TX bytes:51796 (50.5 KiB)
Interrupt:17 Base address:0×1800
eth1 Link encap:Ethernet HWaddr 00:11:22:33:44:55
inet6 addr: fe80::211:22ff:fe33:4455/64 Scope:Link
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:895 errors:0 dropped:0 overruns:0 frame:0
TX packets:490 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:93591 (91.3 KiB) TX bytes:96810 (94.5 KiB)
Interrupt:16 Base address:0×8400
Con esto quedará lista la SUMA de varias Tarjetas de REDES simuladas en una SOLA Tarjeta de red y una Sola Dirección IP para el Usuario.

Unión de interfaces de red (channel bonding) en Linux Red Hat y sus derivados.

Red Hat Enterprise Linux permite a los administradores vincular múltiples interfaces de red en un único canal usando el módulo del kernel bonding y una interfaz de red especial llamada la interfaz de unión de canales.
Canal de unión permite que dos o más interfaces de red actuar como una sola, al mismo tiempo aumentar el ancho de banda y proporcionando redundancia.

1. Añadir en /etc/modules.conf (para kernel 2.4) o /etc/modprobe.conf (para kernel 2.6) :
alias bond0 bonding
options bond0 miimon=100 mode=0

2. Crear el archivo ifcfg-bond0 en /etc/sysconfig/network-scripts, asumiendo que nuestro servidor tendrá el IP 192.168.0.1 y máscara 255.255.255.0 :
DEVICE=bond0
IPADDR=192.168.0.1
NETMASK=255.255.255.0
NETWORK=192.168.0.0
BROADCAST=192.168.0.255
ONBOOT=yes
BOOTPROTO=none
USERCTL=no

3. Modificar el archivo ifcfg-eth0 en /etc/sysconfig/network-scripts
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no

4. Modificar ifcfg-eth1 en /etc/sysconfig/network-scripts
DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no

5. Reiniciar la red: “service network restart” o reiniciar la PC si prefieren.

6. Verificar el estado de las tarjetas de red con el comando ifconfig, debe aparecer algo similar a lo siguiente:
bond0 Link encap:Ethernet HWaddr 00:09:6B:89:28:28
inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::209:6bff:fe89:2828/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:75698444 errors:0 dropped:0 overruns:0 frame:0
TX packets:71137605 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2329750937 (2.1 GiB) TX bytes:3737122066 (3.4 GiB)
eth0 Link encap:Ethernet HWaddr 00:09:6B:89:28:28
inet6 addr: fe80::209:6bff:fe89:2828/64 Scope:Link
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:37802769 errors:0 dropped:0 overruns:0 frame:0
TX packets:35568803 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1118695876 (1.0 GiB) TX bytes:1868633917 (1.7 GiB)
Base address:0×2500 Memory:f8fe0000-f9000000
eth1 Link encap:Ethernet HWaddr 00:09:6B:89:28:28
inet6 addr: fe80::209:6bff:fe89:2828/64 Scope:Link
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:37895675 errors:0 dropped:0 overruns:0 frame:0
TX packets:35568802 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1211055061 (1.1 GiB) TX bytes:1868488149 (1.7 GiB)
Base address:0×2540 Memory:f8fc0000-f8fe0000
Observar como se define el dispositivo bond0 que agrupa a eth0 y eth1 en una sola MAC 00:09:6B:89:28:28, y como está balanceada la carga, con 1.7GBytes transmitidos en cada tarjeta y casi 1GByte recibidos en cada tarjeta también.

EN RESUME PARA RED HAT

Para crear una interfaz de unión de canales, cree un archivo en el directorio /etc/sysconfig/network-scripts/ llamado ifcfg-bond, reemplazando con el número para la interfaz, tal como 0
A continuacion se muestra un ejemplo de un archivo de configuracion de unión de canales:
DEVICE=bond0
BOOTPROTO=none
ONBOOT=yes
NETWORK=10.0.1.0
NETMASK=255.255.255.0
IPADDR=10.0.1.27

Después de crear la interfaz de union de canales, las interfaces de red a ser unidas se deben configurar añadiendo las directrices MASTER= y SLAVE=
a sus archivos de configuracion.
Los archivos de configuracion para cada interfaz de union de canales pueden ser casi idénticos.
DEVICE=eth
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes


En este ejemplo, reemplace
con el valor numérico para la interfaz.

Para que una interfaz de unión de canales sea válida, se debe cargar el modulo del kernel. Para asegurar que el modulo está cargado cuando se suba la interfaz de unión, añada la línea siguiente a /etc/modules.conf:
alias bond bonding
Reemplace con el número de la interfaz, tal como 0. Para cada interfaz de union de canales ya configurada,
debe haber una entrada correspondiente en /etc/modules.conf.
Una vez que /etc/modules.conf está
configurado y también la interfaz de unión de canales y las interfaces de red, puede utilizar
ifup para activar la interfaz de unión de canales.

Escrito por el Ing. Basilio B. Alvárez para el Blog Tecnológico Dominicano

2 comentarios:

Unknown dijo...

yo tengo dos conexiones adls cada una con sus datos correspondientes ip, netmask etc,, mi duda al realizar el bonding en debian que direccion ip se tiene que poner asi como netmask gateway etc en el bondig para que este fucione, la del isp 1 o la del isp 2. es que necesito realizar un bonding pero no se que datos poner ahi y tambien esa direccion bond es la que tomara como default mi tercera tarjeta de red que es a que se conextara a mi red lan. ayuda ......

Conectora dijo...

Hola, ojalá que el Ing. Basilio B. Alvárez, quien fue el que aportó esta información nos pueda informar si te puede ayudar.

Saludos..

 
Back to top!