Unir conexiones ADSL-Wifi para sumar el ancho de banda

Iniciado por el-brujo, 1 Marzo 2012, 17:44 PM

0 Miembros y 1 Visitante están viendo este tema.

el-brujo

Introducción

Conceptos previos, conceptos erróneos y funcionamiento del protocolo de Internet

Cuando alguien entra a su casa , generalmente entra por la puerta , o si es medio paranoico, tal vez por la ventana. Pero nunca por  las dos a la vez, ya que un cuerpo partido a la mitad no puede sobrevivir

En el modelo TCP/IP pasa exactamente lo mismo. Un paquete sale (petición) y entra (respuesta) "obligadamente" siempre por la misma gateway y mismo DNS.

Si un paquete saliera por una puerta de enlace "1",  deberia volver por la misma, porque sino se perdería. (time to live, traceo , etc)

Resumiendo, se puede sumar y aumentar la velocidad global de descargas, pero no la de un archivo en particular.

Teóricamente no es posible descargar 1 solo archivo con dos conexiones diferentes. La razón de esto, es que cuando uno empieza a descargar un archivo de un servidor, el servidor estable una espiece de "tunel" entre tu direccion IP y el para asi poder comunicarse. Dado que las dos conexiones de internet tienen diferentes direcciones IP, el servidor sólo establecera conexión con alguna de las dos. En teorçoa es posible hacerle creer al servidor que las dos conexiones estan bajo 1 sola IP, pero eso causaria un caos al tratar de recibir los paquetes de datos, porque no existe ningún protocolo que regule este tipo de transferencia de datos.

Pero si podemos hacer que este archivo se descargue por segmentos y posteariormente unimos los trozos, con lo que al final el resultado que obtendremos será la suma de bambas conexiones.

Por lo tanto no resulta tan sencillo "sumar" dos conexiones a internet, porque el protocolo tcp/ip tiene ciertas limitaciones. Pero si podremos hacerlo por hardware rápidamente tal y como veremos más adelante.

Lo que normalmente se hace es repartir (que no es lo mismo que sumar a la vez dos conexiones) 2+2 = 4, pero a veces es mejor que unos usen 2 y los otros 2 y no que todos usen 4 a la vez.

Podemos repartir el ancho de banda de varias maneras (QoS) (Calidad del servicio)

- Podemos usar una conexión para navegar y otra para bajar ficheros (por el tipo de tráfico, http, ftp, smtp, pop3, skype, youtube, escritorio remoto), por rangos de ip (por departamentos de trabajo, etc) que unas salga por una conexión y otras por otra)

- Podemos configurar cuánto saldrá por cada WAN y cuantó entrará (kbps) así si   abres en tu PC youtube saldra por WAN1 y si entras a otras webs por WAN2, igual puedes deperminar dominios que salgan por determinada WAN

- Podemos distrubir las solicitudes procedentes de la LAN a través de una politica "round-robin" (por peso) a través de múltiples pasarelas de Internet. En otras palabras, si en un determinado momento sólo hay un usuario de internet haciendo sólo una conexión TCP (por ejemplo, se ejecuta sólo una descarga desde la web), su tráfico se derivará a traves de una única pasarela, por lo que no habría beneficio en el equilibrado de conexiones. En cambio, si la LAN está repleta de usuarios, cada uno ejecutando múltiples solicitudes al mismo tiempo, como un todo, sus conexiones tendrán acceso a un mayor ancho de banda, lo que equivale a la suma de los anchos de banda de acceso único.

IP Failover (fail over, a prueba de fallas)

Failover es cuando tenemos una o más conexiones y cuando falla una salimos automáticamente por la otra que si que funcione. También llamado conexión redundante. Si una de las líneas falla, el router continua automáticamente la conexión utilizando exclusivamente la segunda.




a) Balanceo de Carga (Load balancing)
¿Qué es?
Repartir ancho de banda

El balanceo no suma, reparte.


b) Sumar ancho de banda (Bonding)
Juntar conexiones, unir conexiones, sumar dos conexiones o más

Bonding: ip network multipathing con LINUX

¿Qué es el bonding? Es un driver que originalmente venía con los parches para clusters beowulf, desde hace un tiempo se puede implementar en un kernel 2.2X, 2.4X y 2.6x ¿Pero qué hace realmente?¿Para que sirve? Es la forma de tener dos tarjetas de red funcionando como una sola y aprovechando el ancho de banda de las dos a la vez En definitiva con bonding (ip network multipathing) tendríamos dos tarjetas de red físicas y por encima una virtual que suministra el servicio.

El bonding es una técnica que permite agregar varios interfaces de red físicos en uno único virtual. A cada interfaz físico se le denominará slave (esclavo). Con esto podemos realizar un balanceo de carga entre las dos interfaces y conseguir un ancho de banda final igual a la suma de los anchos de banda de cada slave.

Necesitamos al menos dos conexiones a internet para hacer bonding.

Tipos de Balanceos de Carga con bonding:

Round Robin balance-rr (modo 0)
Va repartiendo el tráfico (entrante) asignando de forma rotatoria cada conexión a una entrada WAN distinta, es decir, la primera a la WAN 01, la siguiente a la WAN 02, la tercera de nuevo a la WAN 01, ...

Se emplea un algoritmo round robin entre la cola virtual y las de los esclavos. Es algo así como: un paquetillo para un esclavo, otro para otro esclavo, un paquetillo para un esclavo, otro para el otro... etc. Es el algoritmo que se usa por defecto.

active-backup (modo 1):

Realmente no balancea la carga, usa sólo un esclavo y en caso de fallar, usa el siguiente disponible. Si falla el activo, pasa al slave (pasivo)

balance-xor (modo 2):

Para transmitir una trama lo hace basado en el siguiente calculo: (MAC de origen XOR MAC destino)%numero de interfaces slaves. De esta manera para cada MAC de destino se selecciona una interfaz en concreto. Este modo nos ofrece balanceo de carga y tolerancia a fallos.

broadcast (modo 3):

se transmite todo por todas las interfaces. Este método no balancea tampoco, pero provee tolerancia a fallos.

802.3ad (modo 4):

Se trata del estandard IEEE 802.3ad (Dynamic link aggregation) también llamado "port trunking". Permite la definición de agregados ofreciendo alta disponibilidad

balance-tlb (modo 5):

balancea la carga de transmisión entre los esclavos dependiendo de la velocidad de estos y de la carga total. El tráfico es recibido por un esclavo, en caso de fallar otro esclavo toma su MAC y continúa recibiendo tráfico.

balance-alb (modo 6)

realiza el balanceo anterior además de un balanceo también en la recepción.


Otros tipos de balanceo de carga en aparatos de hardware:

Basado en sesiones
Cada conexión de salida se compone de varias conexiones TCP/IP, el router reparte las conexiones de cada sesión entre los dos puertos WAN. Un ejemplo, una página de Internet tiene una sesión TCP/IP por cada elemento de la misma, cuando un usuario se conecta a esa página Web a través del router XiNCOM, los elementos de la página se descargan paralelamente y a la vez utilizando las dos líneas WAN de forma simultanea, es decir, repartiendo los elementos entre las dos líneas de conexión.

Basado en paquetes
En lugar de repartir las conexiones TCP/IP de una sesión, el balanceo de carga basado en paquetes reparte los paquetes de cada conexión TCP/IP entre los dos puertos WAN.




Funcionamiento

¿Cómo lo hacemos?

- Mediante Software

En Windows con el programa WinGate, Double surfer, mobile net switch
virtualwifi, BVRP Connection Manager, MultiNetwork Manager, WiFi Hopper 1.2
Midpoint Internet LoadBalancer, etc

Con el comando "route"  (modificando la tabla de rutas, la ruta de encaminamiento, cambiando la puerta de enlace (gateway))

En Linux con pfsense (una distrbución liviana basada en FreeBSD derivada de m0n0wall), Brazilfw, o Mikrotik

pfSense permite balanceo de carga (load balancing) con detección de fallo (fail-over)
con fail-over. Permite además añadir un Portal Cautivo o captivo (hotspot), OpenVPN, gestión del ancho de banda (limitar y repartir ancho de banda) (Traffic Shape), tráfico por prioridades, etc

Con los comandos  iproute2

Ejemplos

                                                                ________
                                         +------------+        /
                                         |            |       |
                           +-------------+ Provider 1 +-------
       __                  |             |            |     /
   ___/  \_         +------+-------+     +------------+    |
 _/        \__      |     if1      |                      /
/             \     |              |                      |
| Local network -----+ Linux router |                      |     Internet
\_           __/    |              |                      |
  \__     __/       |     if2      |                      \
     \___/          +------+-------+     +------------+    |
                           |             |            |     \
                           +-------------+ Provider 2 +-------
                                         |            |       |
                                         +------------+        \________

Datos previos

Si suponemos los siguientes datos:

Citareth0: Interfaz conectado a un ADSL
eth1: Interfaz conectado a otro ADSL
IP0: Dirección IP de la máquina en eth0
IP1: Dirección IP de la máquina en eth1
GW0: Dirección IP del gateway en el interfaz eth0
GW1: Dirección IP del gateway en el interfaz eth1
NET0: Subred de la salida ADSL 0
NET1: Subred de la salida ADSL 1

Definir tablas de rutas

Definir dos tablas de routing auxiliares en el
fichero /etc/iproute2/rt_tables, simplemente añade estas dos lí­neas:

2 T0
3 T1


Añadir rutas de encaminamiento

Añadir información a las dos tablas auxiliares con información de
routing de cada una de las dos salidas:

ip route add default via GW0 dev table T0
ip route add NET0 dev eth0 src IP0 table T0
ip route add default via GW1 dev table T1
ip route add NET1 dev eth1 src IP1 table T1


Añadir las reglas de encaminamiento

Añadir las reglas necesarias para utilizar cada una de las dos tablas
auxiliares:

ip rule add from IP0/32 table T0
ip rule add from IP1/32 table T1


Añadir la ruta por defecto

Añadir la ruta por defecto en la tabla principal, que se encarga de
repartir la carga. Puedes cambiar el peso de cada enlace después del
parámetro weight:

ip route add default scope global nexthop via GW0 dev eth0 weight 1
nexthop via GW1 dev eth1 weight 1


Ejemplo 2:

Cómo juntar dos ADSL

Nomenclatura:

Citareth0  -> primer interfaz conectado a la ADSL1
192.168.1.1  -> IP asociada a eth0
192.168.1.2  -> IP del router ADSL1
192.168.1.0/24  -> subred donde hay ADSL1

eth1  -> primer interfaz conectado a la ADSL2
192.168.2.1  -> IP asociada a eth1
192.168.2.2  -> IP del router ADSL2
192.168.2.0/24  -> subred donde hay ADSL2

Primero:
Crear dos tablas de rutas adicionales al fichero /etc/iproute2/rt_#tables/.
Es tan sencillo como abrir el fichero con un editor de texto y añadir las dos líneas siguientes:
200 ADSL1
201 ADSL2

Segundo:
Asignamos cada subred a la tabla e interfaz correspondiente.
Desde el prompt del sistema:
# ip route add 192.168.1.0/24 dev eth0 src 192.168.1.1 table ADSL1
# ip route add default via 192.168.1.2 table ADSL1
# ip route add 192.168.2.0/24 dev eth1 src 192.168.2.1 table ADSL2
# ip route add default via 192.168.2.2 table ADSL2


Tercero:
Ahora hace falta asegurar que el servidor contesta por la misma interfaz que se ha hecho la petición.
# ip route add 192.168.1.0/24 dev eth0 src 192.168.1.1
# ip route add 192.168.2.0/24 dev eth1 src 192.168.2.1


Quarto:
Sólo hace falta crear la ruta por defecto balanceada.
# ip route add default scope global netxhop via 192.168.1.2 dev eth0 weight 1 nexthop via 192.168.2.2 dev eth1 weight 1


- Mediante Hardware

Routers de doble Wan (Dual Wan) "Multihomed" o "Multiwan".

Balanceador de carga con el protocolo CARP (Common Address Redundancy Protocol), básicamente es proporciona redundancia. Es decir que si tu internet falla, el software lo detecta en decimas de segundo y te hace el switch hacia el enlace bueno, el usuario nunca se da cuenta cuando falla el servicio.

Muxing, multiplexar líneas ADSL.

Sólo es posible por hardware.


Limitar y Repartir ancho de banda

Palabras claves: Traffic Shapper o Traffic Shapping, QoS, fair queuing

QoS (Quality of Service o Calidad de Servicio) es un conjunto de protocolos y tecnologías que garantizan la entrega de datos a través de la red en un momento dado. Una de las principales metas de QoS es la priorización.

Por defecto, cuando enviamos información por una interfaz (tarjeta de red en este caso) las tramas de datos se encolan en una pila FIFO: la primera trama en entrar, es la primera en salir.

Configurar QoS (Quality of Service) en el router.

Los routers Zyxel llevan la opción "Media Bandwidth Management"
http://www.adslzone.net/tutorial-20.18.html

Los routers CT Comtrend para configurar el QoS debes ir a Advanced Setup => Quality of Service dentro de la configuración del router.

Con Mikrotik PCQ (Queues)

Con PfSense y su opción de Traffic Shape.

Con un router que acepte firmware dd-wrt

Programas para Windows como el NetPeeker que permite repartir el ancho de banda (tanto de subida como de bajada) para cada aplicación.

Más programas:

El NetLimiter o el DU Super Controler, o el WebScout, y el Bandwidth Speed Balancer, el Bandwidth Controller, WinTC,
DU Meter, Net Peeker, BWMeter

Para limitar el ancho de banda en Linu hace bastante tiempo que se puede usar:

- iproute2 (TC, traffic control)
- cbq.init

Y para controlar el ancho de banda no, pero para medirlo y controlar mucha más información está el ntop,

http://www.openxtra.com/products/ntop-xtra.htm





Referencias, fuentes
http://www.zeroshell.net/eng/net-balancer-spanish/
http://multingles.net/docs/jmt/2isps.htm
http://crysol.org/es/node/811
http://www.openbsd.org/faq/pf/es/queueing.html
http://www.openbsd.org/faq/pf/index.html
http://bulma.net/body.phtml?nIdNoticia=1759
http://redesteleco.com/balanceo_de_carga
http://guifi.net/es/node/10643
http://gnulinuxtips.blogspot.com/2010/10/balanceo-de-carga-con-pfsense.html
http://doc.pfsense.org/index.php/MultiWanVersion1.2
http://www.openbsd.org/faq/pf/es/queueing.html
http://www.bellera.cat/josep/pfsense/cabal_cs.html




En el foro:

conectarse a varias Wifi a la vez
http://foro.elhacker.net/hacking_wireless/conectarse_a_varias_wifi_a_la_vez-t195713.0.html

Slurpr casero?
http://foro.elhacker.net/hacking_wireless/slurpr_casero-t171149.0.html

¿ PC con varias tarjetas pci Wireless ?
http://foro.elhacker.net/hacking_wireless/iquest_pc_con_varias_tarjetas_pci_wireless-t132517.0.html

Unir 2 adsl
http://foro.elhacker.net/redes/unir_2_adsl_balanceo_de_carga-t319418.0.html

Juntar 2 redes wifi con 2 tarjetas en un mismo ordenador
http://foro.elhacker.net/hacking_wireless/juntar_2_redes_wifi_con_2_tarjetas_en_un_mismo_ordenador-t318331.0.html

wireless router con WDS
http://foro.elhacker.net/redes/wireless_router_con_wds-t309788.0.html

2 o mas cabldemodems en un pc..!!! se pude....!!!
http://foro.elhacker.net/redes/2_o_mas_cabldemodems_en_un_pc_se_pude-t145261.0.html

Manual: balanceo carga PCC con FAILover
http://foro.elhacker.net/materiales_y_equipos/manual_balanceo_carga_pcc_con_failover-t322997.0.html

Balanceo de carga entre dos ISP con Ubuntu 10.04
http://foro.elhacker.net/redes/balanceo_de_carga_entre_dos_isp_con_ubuntu_1004-t311359.0.html

Temas viejos (2005-06-07)

Conectarse a dos redes inalámbricas a la vez
http://foro.elhacker.net/index.php/topic,145048.0.html

Ayuda limitación de ancho de banda
http://foro.elhacker.net/index.php/topic,122243.0.html

como sumar ancho de banda de una o mas redes distintas
http://foro.elhacker.net/index.php/topic,109496.0.html

Varias redes disponibles = varias conexiones distintas??
http://foro.elhacker.net/index.php/topic,68065.0.html

Conectar dos redes con dos tarjetas?
http://foro.elhacker.net/index.php/topic,98696.0.html

software para crear redes vecinales
http://foro.elhacker.net/index.php/topic,145512.0.html

yak_vi

Muy interesante este tema, voy a ver si puedo hacer bonding entre dos interfaces wlan!

Gracias por la información!

elpoetaborracho

Es un verdadero placer ver el esfuerzo que dedicáis en reordenar post y linkarlos para que estén a mano y organizados, facilitando todo un montón.

Muchas gracias!!!

moikano→@

Muy buen post.
Hace un tiempo que deje el balanceo con ifenslave ya que no me aclaré con el, creo que fue culpa de las tarjetas wifi que usé realmente.

Si no te importa posteo otro hilo que creé sobre este programa que hace balanceo de carga.

Técnica de bonding con ifenslave

http://foro.elhacker.net/redes/tecnica_bonding_con_ifenslave-t319031.0.html

flacc

todo el tiempo estuvo aquí  y no vi el post  :P

T0rete

Me has devuelto la ganas de volver a estar activo por aquí con este cacho de post que te has marcado ;-)

A ver si retomo esto de la informática que llevo desde agosto dedicado solo al patinaje y al sonido jajaja

fvillela

Fvillela

Martin-Ph03n1X

que chingoneria de trabajo =O mis respetos brujoo eso es saber trabajar .!
  No eres tu trabajo, no eres cuanto tienes en el banco, no eres el auto que conduces, ni el contenido en tu billetera, no eres tus malditos cakis, eres el bailarin cantante del mundo...!!!"

The_Saint

Muy buen tuto justo una de las cosas que tenia pendiente y que en su dia me comi el tarro que te cagas , hasta el punto de empezar a programar mi propia aplicacion en .net ;) THANK!  >:D
<< Si piensas que eres demasiado pequeño para tener impacto.
Prueba a irte a la cama con un mosquito>>

Micka

Que buen post! en mi caso tube un problema de cobertura que lo solucione con un Router Repetidor que la verdad me dejo con la boca abierta. el Rompemuros de 3bumen, lo malo es que creo que solo lo venden en Colombia, Mexico y Espana. Este es el link www.rompemuros.com