[LUG.ro] Consulta Balanceo.

Galleguindio Ramirez galleguindioramirez en gmail.com
Mar Feb 16 13:23:55 ART 2016


Copy-paste del foro wireless 
(http://foro.seguridadwireless.net/zona-linux/balanceo-de-carga-en-linux/)
Saludos

Varios interfaces conectados a un ADSL (Load balancing)
June 8th, 2007 by Busindre

Muchas veces tenemos varios interfaces de red (Ethernet / Wireless) que 
sobran y no se les da todo el uso que merecen. Vamos a ver como poder 
usar múltiples tarjetas conectadas todas a un solo ordenador y a un 
mismo router ADSL, de forma que el trafico sea repartido entre todos los 
interfaces de red que dispongamos (Balanceo de carga).

Esto puede carecer de utilidad a simple vista, pero permite aumentar el 
ancho de banda en una red LAN y le da más confiabilidad a la conexión, 
ya que cuando un interfaz muere los demás se reparten el trabajo siendo 
transparente para el usuario. Lógicamente, aunque carezca de poca 
importancia, también complicaría un poco el entendimiento del tráfico 
capturado por un supuesto espía de la red.

Ejemplo de aumento de ancho de banda:

Tarjeta FastEthernet (100 Mbps) + Wireless (11 Mbps) + Wireless (54) 
Mbps = 165 Mbps (Teóricos)

NOTA: Por supuesto hablamos del ancho de banda de la red LAN, el ADSL 
contratado no varía lógicamente. Para lograr un aumento del ancho de 
banda ADSL, cada interfaz de red debe conectarse a otro router ADSL para 
sumar los anchos de banda, no es el caso.

GNU/Linux se encarga automáticamente del balanceo de carga entre los 
interfaces si usamos kernels no muy antiguos. Solo debemos de crear unas 
ip virtuales en el router e indicar a GNU/Linux las rutas por defecto (A 
esas ip virtuales) con misma métrica para que el trafico pueda ser 
batido entre interfaces, como veremos en el ejemplo de fácil comprensión.

Opciones del kernel activadas

equal cost multi path (Por norma activada)

En Kernel 2.6 ademas es recomendable activar:

Dentro de IP: Virtual Server Configuration > IP virtual server support

TCP load balancing support
UDP load balancing support
ESP load balancing support
AH load balancing support

NOTA: Por norma si el kernel es nuevo todo esto viene activado.

Comandos interesantes:


ip route show -> Muestra las rutas.
ip route show cache -> Muestra las rutas en cache.
ip route flush default -> Borra las rutas.
ip route flush cache -> Borra las utas de la cache.

Permitir que linux enrute (Permite a GNU/Linux pasar paquetes entre los 
distintos interfaces de red)

# echo 1 > /proc/sys/net/ipv4/ip_forward

NOTA: Obligatorio hacerlo antes de levantar los interfaces !!

Ficheros de interes:

/proc/net/rt_cache -> Rutas de la cache
/proc/sys/net/ipv4/route/gc_timeout -> Tiempo usado por el kernel para 
eliminar una ruta.
/proc/sys/net/ipv4/route/max_size -> Tamaño máximo de la caché de rutas. 
Se eliminan entradas antiguas cuando la caché alcance el limite.

Demos paso al ejemplo practico para ver como implementar el balanceo.

Interfaces usados

eth0 (Fastethernet) 100 Mbps
rausb0 (Wireless 11g) 54 Mbps
wlan (Wireless 11b) 11 Mbps

Router: Xavi Wireless x7868r (ADSL)

Configurando las direcciones IP:

Lo primero que debemos hacer es configurar el router para que escuche 
peticiones de múltiples redes. En el caso del ejemplo usaremos la redes:

192.168.1.1 / 255.255.255.0 (Default)
192.168.2.1 / 255.255.255.0 (Virtual)
192.168.3.1 / 255.255.255.0 (Virtual)

Pocos son los routers ADSL que no permiten aplicar alias a los 
interfaces que permita el acceso al mismo con varias ip pertenecientes a 
distintas redes. Mostraremos como hacerlo en el router Xavi, pero como 
comente en los demás el proceso de creación sera distinto, pero no por 
ello complicado. El nombre que suele recibir es "Segmentación de Red- IP 
alias".

Navegador: 192.168.1.1 -> "LAN Settings.." -> "Change default LAN port 
IP address" -> "Advanced..." -> Creamos las ip de la forma anteriormente 
comentada.

En otros routers por ejemplo Zyxel la forma de hacerlo seria esta.

Una vez tenemos debidamente configurado el router para responder 
peticiones desde distintas redes, tenemos que crear las direcciones IP 
de los interfaces que conectaran al router, ya sean ethernet o wireless. 
El router al que intentamos conectar en este ejemplo usa encriptación 
WEP de 64 bits, para darle un poco mas jugo veamos que pasos realizar 
para conectarnos con las distintas tarjetas. Lo haremos de forma 
estándar ya que cada distribución de GNU/Linux permite configurar la red 
de formas distintas con distintas aplicaciones gráficas, archivos de 
configuración y demás. Al hacerlo mediante comandos estándar debería de 
funcionar en todas las distros.

Direcciones IP de los interfaces:

192.168.1.33 / 255.255.255.0 (Wlan0) -> Wireless
192.168.2.1 / 255.255.255.0 (Rausb0) -> Wireless
192.168.3.1 / 255.255.255.0 (eth0)

* Conectando wlan0 a la red Wireless:


#wlanctl-ng wlan0 lnxreq_ifstate ifstate=enable
#wlanctl-ng wlan0 dot11req_mibset mibattribute=dot11PrivacyInvoked=true
#wlanctl-ng wlan0 dot11req_mibset mibattribute=dot11WEPDefaultKeyID=0
#wlanctl-ng wlan0 dot11req_mibset 
mibattribute=dot11WEPDefaultKey0=aa:aa:aa:aa:aa
#wlanctl-ng wlan0 lnxreq_autojoin ssid=Wireless_gratis authtype=opensystem

* Configurando dirección IP de wlan0:


#ifconfig wlan0 192.168.1.33 netmask 255.255.255.0 broadcast 192.168.1.255
#route add default gw 192.168.1.1 dev wlan0

* Conectando rausb0 a la red Wireless:


# iwconfig rausb0 essid Wireless_gratis mode managed channel 2
# iwconfig rausb0 key aaaaaaaaaa

* Configurando dirección IP de rausb0:

#ifconfig rausb0 192.168.2.33 netmask 255.255.255.0 broadcast 192.168.2.255
#route add default gw 192.168.1.1 dev rausb0


* Configurando dirección IP de eth0:


# ifconfig eth0 192.168.3.33 netmask 255.255.255.0 broadcast 192.168.3.255
# route add default gw 192.168.33.1 dev eth0

Comprobando que están todas las Interfaces correctamente conectadas:

# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.3.0 * 255.255.255.0 U 0 0 0 eth0
192.168.2.0 * 255.255.255.0 U 0 0 0 rausb0
localnet * 255.255.255.0 U 0 0 0 wlan0
loopback * 255.0.0.0 U 0 0 0 lo
default 192.168.3.1 0.0.0.0 UG 0 0 0 eth0
default 192.168.2.1 0.0.0.0 UG 0 0 0 rausb0
default 192.168.1.1 0.0.0.0 UG 0 0 0 wlan0

Ahora mediante cualquier monitor / analizador de la red (gkrellm, 
net-applet, etc.. ) debemos hacer ping a las distintas direcciones ip 
del "gateway / router / puerta de enlace predeterminada,.." Es decir, si 
hago un ping a una ip del gateway debemos de observar actividad en la 
interfaz de red unida a dicha red del gateway:

ping -s 999 192.168.3.1 -> Debe mostrarse actividad en el interfaz eth0
ping -s 999 192.168.2.1 -> Debe mostrarse actividad en el interfaz rausb0
ping -s 999 192.168.1.1 -> Debe mostrarse actividad en el interfaz wlan0

De no ser así, es que alguna red falla (Problemas Wireless / 
Direccionamiento IP / Fallo en la creación de la ip-virtual del router) 
y no se batirá carga a través de ella. Este paso es importante ya que 
aunque sin tener tres interfaces de red el router también contestaría a 
cualquiera de esas ip teniendo una sola tarjeta de red, se debe tener en 
cuenta.

Una vez todas las interfaces estén funcionando correctamente GNU/Linux 
se encargará de batir la carga de forma efectiva entre las interfaces de 
red. Veamos un ejemplo de como quedaria una salida del comando iwconfig 
para ver de que forma aparecen configuradas las tarjetas wireless:
PLAIN TEXT
XML:
rausb0    RT73 WLAN  ESSID:"Wireless_gratis"  Nickname:"busipc"
           Mode:Managed  Frequency=2 MHz  Access Point: 00:01:38:68:02:D9
           Bit Rate=54 Mb/s
           RTS thr:off   Fragment thr:off
           Encryption key:AAAA-AAAA-AA
           Link Quality=77/100  Signal level:-62 dBm  Noise level:-99 dBm
           Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
           Tx excessive retries:0  Invalid misc:0   Missed beacon:0

wlan0     IEEE 802.11-b  ESSID:"Wireless_gratis" Nickname:"Wireless_gratis"
           Mode:Managed  Frequency:2.417 GHz  Access Point: 
00:01:38:68:02:D9
           Bit Rate:11 Mb/s   Tx-Power:18 dBm
           Retry min limit:8   RTS thr:off   Fragment thr:off
           Encryption key:AAAA-AAAA-AA   Security mode:open
           Link Quality=65/92  Signal level=-34 dBm  Noise level=-100 dBm
           Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
           Tx excessive retries:0  Invalid misc:0   Missed beacon:0

Veamos como el Kernel mueve / balancea la carga entre las tres interfaces:

Balanceo de carga con tres interfaces

El orden es el siguiente, de izquierda a derecha eth0, rausb0 y wlan0. 
Como podemos apreciar en eth0 tenemos fullduplex, subida y bajada por el 
mismo interface, en los otros dos solo tenemos bajada. también a parte 
de balancear en cuanto a la subida y bajada lo hace por protocolo.

eth0 -> TCP, SMTP, UDP, BITTORRENT, DNS, HTTP Y MSNMS (Subida y bajada)
rausb0 -> TCP y MSNMS (Bajada)
wlan0 -> BITTORRENT y UDP (Bajada)

Como vemos lo hace de forma organizada, ahora veamos que ocurre si 
perdiéramos un interfaz,.. por ejemplo el ethernet, quedándonos solo con 
las dos tarjetas wireless unidas al router / punto de acceso.

Balanceo de carga con dos interfaces wireless

Como vemos en la imagen, de la subida se encarga una tarjeta y de la 
bajada la otra. Pero también podemos encontrarnos con que bate la carga 
de la siguiente forma:

Balanceo de carga con dos interfaces wireless, en modo fullduplex las dos

Cada interfaz maneja tanto trafico de subida y de bajada. Como vemos 
puede ser muy variante la forma en la que GNU/Linux balancea la carga 
entre interfaces dependiendo del momento, la carga, los interfaces, el 
orden de las rutas por defecto,.. Como vemos algo muy fácil al alcance 
de todo el mundo y que permite usar las interfaces de red que nos 
sobran, aumentando un poco la estabilidad y el ancho de banda de 
nuestras conexiones.

El 16/02/16 a las 12:48, Pablo Fernando Viganotti escribió:
> Hola, queria consultar si alguien realizo algun balanceo de lineas
> adsl con debian? por donde puedo encarar el tema.
> _______________________________________________
> Lugro mailing list
> Lugro en lugro.org.ar
> http://lugro.org.ar/mailman/listinfo/lugro



Más información sobre la lista de distribución Lugro