[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