Mostrando entradas con la etiqueta Bond. Mostrar todas las entradas
Mostrando entradas con la etiqueta Bond. Mostrar todas las entradas

jueves, 10 de agosto de 2017

Configurando Bond promisc

Hace poco he tenido la necesidad, de agregar varias interfaces  en modo promiscuo, en solo una interfaz virtual.

Ya escribí una pequeña introducción sobre configuración de bond, hace mucho tiempo, en la que se indican los distintos tipos.

En esta ocasión el modo usado es el «3» o Broadcast.

La configuración de la interfaz de bond y de sus interfaces físicas es la siguiente.

/etc/sysconfig/network-scripts/ifcfg-bond0
TYPE="Bond"
BONDING_MASTER="yes"
BOOTPROTO="none"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
IPV6_FAILURE_FATAL="no"
NAME="bond0"
DEVICE="bond0"
ONBOOT="yes"
PROMISC="yes"
BONDING_OPTS="mode=3"
NM_CONTROLLED="no"
/etc/sysconfig/network-scripts/ifcfg-eno1
DEVICE="eno1"
ONBOOT="yes"
BOOTPROTO="none"
TYPE="Ethernet"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
IPV6_FAILURE_FATAL="no"
NAME="eno1"
PROMISC="yes"
MASTER="bond0"
SLAVE="yes"
NM_CONTROLLED="no"
/etc/sysconfig/network-scripts/ifcfg-eno2
DEVICE="eno2"
ONBOOT="yes"
BOOTPROTO="none"
TYPE="Ethernet"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
IPV6_FAILURE_FATAL="no"
NAME="eno2"
PROMISC="yes"
MASTER="bond0"
SLAVE="yes"
NM_CONTROLLED="no"
Tras esta configuración, simplemente queda garantizar que las interfaces levanten en modo promiscuo, para lo que editamos rc.local

/etc/rc.local
/sbin/ip link set bond0 promisc on
/sbin/ip link set eno1 promisc on
/sbin/ip link set eno2 promisc on

Llegados aquí podremos capturar todo el tráfico de las interfaces enoX en la interfaz bond0

domingo, 4 de septiembre de 2016

Configurando VLAN tagging sobre Bond

No hace mucho, he tenido que configurar un bond con tagging y he tenido algunos problemas que me parece buena idea, dejar por escrito.

La configuración de una interfaz «tagueada» con el id de una VLAN, no tiene más complicación. Existe mucha documentación al respecto.

Defines tu fichero de interfaz ifcfg-eth0 y su copia «link» con un «.» seguido del vlan_id…. ifcfg-eth0.10 (En este fichero, se define la configuración de red y se añade la clausula «VLAN=yes»)

Hasta aquí, todo según la documentación….

Al combinar, bond y tagging, es cuando he tenido estos problemas principalmente:

1.- Para vlans, necesitamos el modulo 8021q, el cual no carga por defecto, por lo que creamos un fichero /etc/modules-load.conf/8021q.conf
8021q
2.- Según la documentación consultada, desde la versión 6.3 de CentOS, existen problemas con bonding+tagging y NetworkManager. En los «bug reports» se recomienda que se pare NetWorkManager.

Estas pruebas se han realizado con CentOS 7.2 y tenia el mismo problema.

3.- Al parar NetworkManager, el modulo de bond no se carga al arranque. Para esto, tenemos dos alternativas:

3a.- Definir la carga del modulo creando un fichero en /etc/modprob.d/bond.conf
alias bond0 bonding
options bond0 miimon=100 mode=0
El detalle de los modos disponibles, lo tenéis aqui

3b.- Definir en el fichero de configuración del bond, la opción BONDING_OPTS:
BONDING_OPTS="mode=balance-rr miimon=100"
Esto hace que el modulo se cargado al arranque
Tras esto, la configuración siguiente funciona sin problemas:

ifcfg-eno1
TYPE="Ethernet" BOOTPROTO="none" NAME="eno1" DEVICE="eno1" ONBOOT="yes" NM_CONTROLLED="no" MASTER="bond0" SLAVE="yes"
ifcfg-eno2
TYPE="Ethernet" BOOTPROTO="none" NAME="eno2" DEVICE="eno2" ONBOOT="yes" NM_CONTROLLED="no" MASTER=bond0 SLAVE=yes
ifcfg-bond0
TYPE="Bond" BOOTPROTO="none" DEVICE="bond0" NAME="bond0" ONBOOT="yes" BONDING_OPTS="mode=balance-rr miimon=100" NM_CONTROLLED="no"
ifcfg-bond0.10
BOOTPROTO="none" DEFROUTE="yes" NAME="bond0.10" DEVICE="bond0.10" NM_CONTROLLED="no" ONBOOT="yes" IPADDR="192.168.1.23" PREFIX="24" GATEWAY="192.168.1.1"DNS1="8.8.8.8"DNS2="8.8.4.4"BONDING_MASTER=yes VLAN="yes"

Con esto tendremos nuestro bond «tagueado» con el id de la vlan, como vemos a continuación.
# ip -d link show bond0.107: bond0.10@bond0: UP> mtu 1500 qdisc noqueue state UP mode DEFAULT     link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff promiscuity 0     vlan protocol 802.1Q id 10 addrgenmode eui64

[root@XXXXnetwork-scripts]# ip a l 1: lo: ...2: eno1: LOWER_UP> mtu 1500 qdisc mq master bond0 state UP qlen 1000     link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff 3: eno2: LOWER_UP> mtu 1500 qdisc mq master bond0 state UP qlen 1000     link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff 4: ...5: ...6: bond0: UP,LOWER_UP> mtu 1500 qdisc noqueue state UP     link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff     inet6 fe80::xxxx:xxxx:xxxx:xxxx/64 scope link        valid_lft forever preferred_lft forever 7: bond0.10@bond0: UP> mtu 1500 qdisc noqueue state UP     link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff     inet 192.168.1.23/24 brd 192.168.1.255 scope global bond0.10
       valid_lft forever preferred_lft forever     inet6 fe80::xxxx:xxxx:xxxx:xxxx/64 scope link        valid_lft forever preferred_lft forever

jueves, 30 de septiembre de 2010

Apuntes sobre configuración de Bond. (Bonding)

Como curiosidad voy a comentar como me ha dado por escribir un poco acerca del bonding.

Hace un par de dias en el trabajo, nos dimos cuenta de que un par de máquinas con bonding, estaban mal conectadas a los switches, y al plantearnos conectarlas del modo lógico para tener alta disponibilidad (una interfaz a cada switch), me surgio la siguiente duda:Como gestionaria la red tener dos interfaces con la misma MAC????

De aquí llegue a los modos de bond y de aquí a documentarlo para futuras ocasiones.



1.-Que es bond o bonding?

El bond o bonding, a grandes rasgos es un método de unión de interfaces, el cual nos permite desde balancear la carga, hasta soportar fallos de interfaces sin interrupción del servicio (alta disponibilidad)



2.-Tipos de Bond.
Existen varios tipos o modos de bond. Segun nuestras necesidades, debemos optar por el que mejor se nos ajuste.



Modo 0 (Roun Robin)

Transmite alternando interfaces, partiendo del primer esclavo.

Si hay balanceo de carga.
Si hay alta disponibilidad



Modo 1 (Active-Backup)

Usa solo un solo esclavo, solo en el caso de que falle pasa a usar el siguiente.
No hay balanceo de carga.
Si hay alta disponibilidad



Modo 2 (Balance-XOR)

Se alterna el uso de uno u otro esclavo.
Si hay balanceo de carga.
Si hay alta disponibilidad



Modo 3 (Broadcast)

Todo se manda por todos los esclavos.
No hay balanceo de carga.
Si hay alta disponibilidad



Modo 4 (802.3ad)

Crea grupos que comparten la misma velocidad, pero las tarjetas deben soportar, IEEE 802.3ad.
Si hay balanceo de carga.
Si hay alta disponibilidad



Modo 5 (Balace-tbl)

Balancea todo el trafico de salida, y el trafico de entrada es recibido por el esclavo activo.
Si hay balanceo de carga.
Si hay alta disponibilidad



Modo 6 (Balance-alb)

Igual que el anterior pero balancea también el trafico de entrada. El driver de las tarjetas debe soportar el cambio de MAC estando activas.
Si hay balanceo de carga.
Si hay alta disponibilidad



3.-Configuración de Bond.


1.- Creacion de Alias para la carga de los modulos y eleccion del modo de Bond.
En el fichero:
"/etc/modules.conf"

Definimos un alias para el bond, así como seleccionamos el modo en el que correra nuestro bond.
alias bond0 bonding

options bonding mode=X

Donde "X" es el numero del modo que queremos. (0..6)

2.- Cargamos el modulo de bonding.
Para asegurarnos que el modulo esta cargado tras los cambios, ejecutamos:

modprobe bonding
3.- Configuramos las interfaces.

Por último queda definir las interfaces, tanto las de red(fisicas), como la virtual del bond.
Para esto en el directorio (distribuciones basadas en RedHat):
/etc/sysconfig/network-scripts

Editaremos los ficheros pertenecientes a las interfaces eth0 y eth1 por ejemplo:
ifcfg-eth0

ifcfg-eth1

Y crearemos, uno para nuestro bond
ifcfg-bond0

En los ficheros de las interfaces, indicaremos que pertenecen al bond0
Por ejemplo:

DEVICE=eth0

BOOTPROTO=none

MASTER=bond0

SLAVE=yes

ONBOOT=yes

USERCTL=no

Tras esto, editaremos la configuracion de nuestro bond0
DEVICE=bond0

BOOTPROTO=static

IPADDR=192.168.100.10

NETMASK=255.255.255.0

ONBOOT=yes
4.- Reinicio de los servicios de Red.

Para esto, basta con ejecutar como root:
service network restart

Llegados a este punto nuestro bond estará funcionando.


5.- Ver el estado del bond.

Una vez funcionando, podemos ver el estado del bond, ejecutando el comando:

cat /proc/net/bonding/bond0