Balancear conexiones a Internet howto



Documentos relacionados
COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX

4.2- Instalación y Configuración de un Servidor DNS Dnsmasq en Ubuntu sin DHCP

Iptables, herramienta para controlar el tráfico de un servidor

Servidor DNS sencillo en Linux con dnsmasq

CÓMO CONFIGURAR DHCP EN SUSE LINUX

Configuración del encaminamiento en Linux

Hostaliawhitepapers. Las ventajas de los Servidores dedicados. Cardenal Gardoki, BILBAO (Vizcaya) Teléfono:

Firewall Firestarter. Establece perímetros confiables.

Activación de un Escritorio Remoto

5.2.- Configuración de un Servidor DHCP en Windows 2003 Server

Servicio de Informática Vicerrectorado de Tecnologías de la Información y la Comunicación

En caso de que el cliente nunca haya obtenido una concesión de licencia de un servidor DHCP:

GUIA RÁPIDA DE VNC Antonio Becerro 2005

Manual instalación Windows 8. Instalar Windows 8 paso a paso

INSTALACIÓN FIREWALL IPCOP

INSTALACIÓN DE GATEWAYS SIP

CITRIX Citrix Application Streaming

Práctica 4 - Network Address Translation (NAT)

Práctica 7 Network Address Translation en routers Cisco

MANUAL DE AYUDA MODULO TALLAS Y COLORES

PRACTICA NO. 17, FIREWALL -EJEMPLO REAL DE USO DEL FIREWALL BLOQUEAR O PERMITIR RED, EQUIPO, PUERTO. HACER NAT, ETC. Vielka Mari Utate Tineo

Filtrado de paquetes y NAT

Programa diseñado y creado por Art-Tronic Promotora Audiovisual, S.L.

Laboratorio de PCs. Práctica 3: Montaje de una red de Área local

Notas para la instalación de un lector de tarjetas inteligentes.

Internet aula abierta

Instituto Tecnológico Las Américas (ITLA) Sistemas Operativos 3 (SO3) Daniel Alejandro Moreno Martínez. Matrícula:

Internet Information Server

Apartado: BrutaliXL Versión: 3 Título: Cortafuegos - Iptables Fecha:

HOW TO SOBRE FIREWALL

Ubuntu Server HOW TO : SQUID. EN ESTE SE REALIZA LO SIGUIENTE: En este how to se le va a enseñar como instalar servidor proxi Squid.

Guía de uso del Cloud Datacenter de acens

CONFIGURACION AVANZADA DE MOZILLA THUNDERBIRD

Seguidamente se muestra una pantalla para seleccionar nuestra localización, y comprobamos que la hora y demás es correcto. Podemos hacerlo fácilmente

INSTALACIÓN COYOTE LINUX. Índice

INSTALACIÓN DE ORACLE 8i (8.1.7) SOBRE NT

HOW TO SOBRE REMOTE ACCESS VPN MODE EN LINUX

Cómo instalar fácilmente tu WordPress tras contratar un hosting en Hostalia

Ficheros de configuración de Nagios (ejemplo con nrpe y snmp)

HOWTO: Cómo configurar SNAT

Diego Mauricio Cortés Quiroga

Una vez instalada podremos seleccionar los paquetes que deseamos instalar de una lista.

CEFIRE de Valencia Curso Iniciación a Edubuntu Código: 07VA66EA036

Módulos: Módulo 1. El núcleo de Linux - 5 Horas

Windows XP Instalación y configuración de hardware

Direcciones IP IMPLANTACIÓN DE SISTEMAS OPERATIVOS 1º ASIR. En redes IPv4.

AGREGAR UN EQUIPO A UNA RED Y COMPARTIR ARCHIVOS CON WINDOWS 7

SERVIDOR DNS DINÁMICO EN WINDOWS 2000/2003 SERVER.

Instalación de DRIVER de mochila

Instalar protocolo, cliente o servicio nuevo. Seleccionar ubicación de red. Práctica - Compartir y conectar una carpeta

Proyecto Tecnológico Prof. Carolina Quinodóz 6º2º - TM

Configuración del Panel de Control

Práctica 9: Configuración de NAT y DHCP

Instalación de Tomcat7 en Ubuntu

Instalación de Microsoft Virtual PC

AGREGAR COMPONENTES ADICIONALES DE WINDOWS

Configuración de un APs D-Link DWL-2100AP.-

VideoSoftPHONE Active Contact

Guía de instalación de LliureX 5.09

Guía de Instalación para clientes de WebAdmin

Configuración de la red

Manual del panel. Core-Admin

Internet aula abierta

Software de Comunicaciones. Práctica 7 - Secure Shell. SSH

VLAN. Índice de contenido VLAN

Balanceo de red: Round Robin DNS + NLB

'RFXPHQWDFLyQGHODLQVWDODFLyQGHXQ VHUYLGRU/,18;HQHO,(6$O$QGDOXV PLHUFROHV GH PDU]RGH

15 CORREO WEB CORREO WEB

Práctica 3 Enrutamiento con RIP

Segmentación de trafico inalambrico mediante VLANS

TRUE CRYPT ::: Encriptación de datos :::

Tutorial de uso. ScanIPTV V.4.7

Scripts de arranque. Pablo Sanz Mercado.

Tipos de conexiones de red en software de virtualizacio n: VirtualBox y VMware

Implantar Microsoft Software Updates Service (SUS)

Guía rápida de instalación Cámara CCTV-210

FOCO- LIQUIDACIÓN: DUDAS MÁS FRECUENTES

Bloque IV: El nivel de red. Tema 10: Enrutamiento IP básico

WINDOWS : TERMINAL SERVER

RAID 0, 1 y 5. RAID 0 (Data Striping)

MANUAL COPIAS DE SEGURIDAD

Una vez que tengamos el padrón de un determinado tributo con todos sus datos actualizados, podemos generar los recibos de ese padrón.

Qué es DHCP? Una herramienta que puede hacer más agradable la vida de los administradores de una red local.


Figura 1. Red de ejemplo para DHCP Server

CCNA 2. Laboratorio Enrutamiento por defecto con los protocolos RIP e IGRP (Hecho con Packet Tracer 4.11)

Módulos: Módulo 1. Hardware & Arquitectura de sistemas - 20 Horas

Redes de área local: Aplicaciones y servicios WINDOWS

MANUAL DE AYUDA TAREA PROGRAMADA COPIAS DE SEGURIDAD

P r á c t i c a 1 5. C o n f i g u r a c i ó n d e f i r e w a l l m e d i a n t e i p t a b l e s

Administración de redes IP. Localización y manejo de problemas

PROYECTO INTEGRADO CLUSTER DE ALTA DISPONIBILIDAD CON HAPROXY Y KEEPALIVED. Antonio Madrena Lucenilla 21 de Diciembre de 2012 I.E.S.

MANUAL PARA GESTIÓN DE INCIDENCIAS INFORMÁTICAS

Sesión 5: Instalación de aplicaciones

! " " & '( ) ( (( * (+,-.!(/0"" ) 8-*9:!#;9"<!""#

Manual de uso de la plataforma para monitores. CENTRO DE APOYO TECNOLÓGICO A EMPRENDEDORES -bilib

WINDOWS : SERVIDOR DHCP

Instalación y Registro Versiones Educativas 2013

Instituto Tecnológico de Las Américas

Transcripción:

Balancear conexiones a Internet howto v. 1.1 (28/09/2004) Sección Página 1.- Introducción... 2 2.- Puesta en marcha... 2 2.1.- Configuración de las interfaces.... 3 2.2.- Establecimiento de las rutas... 4 2.3.- Activación del routing... 6 3.- Ajustes y resolución de problemas... 6 4.- El futuro... 8 5.- Agradecimientos... 8 6.- Copyrigth y licencia.... 9

1.- Introducción. La proliferación del uso de Internet es cada vez mayor y como consecuencia de ello la necesidad de ancho de banda a precios asequibles y con una alta disponibilidad. Por ello, es cada vez mas dificil encontrar una empresa u hogar que no disponga de conexión, con un ancho de banda cada vez mayor y en muchos casos con conexión permanente a la misma. Sin embargo no en todos los casos podemos hacer frente a unas líneas de conexión a Internet llamemos "profesionales" y en otros casos lo que queremos es disponer de una redundancia en el enlace pudiendo tener conexión en el caso de que un proveedor tenga caido el servicio. Imaginemos el caso de una mediana empresa, que dispone de una conexión a Internet basada en un ADSL de 2 Mbps. Con un uso elevado de la misma en la que además no quiere que las descargas de ftp de sus empleados acaben ralentizando la navegación de los directivos de la misma ;) aquí podemos encontrar que el balanceo entre 2 ADSL's puede ser una solución válida. 2.- Puesta en marcha. La infraestructura de la que disponemos para poner en marcha el balanceo de conexiones es de un equipo Intel Pentium 4 con 512 Mb de RAM y 80 Gb. De disco duro. Equipado con 3 tarjetas de red Intel pro100. Sin embargo se puede utilizar un equipo de bastante menor entidad. Debe estar dimensionado al número de usuarios al que vaya a dar servicio. Lo primero de todo es la elección del sistema operativo. En mi caso elegí Linux, como distribución Debian en su versión estable Woody. Después el kernel: yo bajé las fuentes del ultimo kernel de la rama estable, en este momento (sobre Agosto de 2003) era el 2.4.22. Comenzamos por compilar el kernel; cada uno debe poner las opciones necesarias para su hardware, especialmente la tarjeta de red. En este caso, las 3 tarjetas de red son de la misma marca y solo necesitamos un driver en el núcleo el EtherExpressPro/100 (eepro100). Después vamos a necesitar activar como mínimo: - IP avanced router -> IP: equal cost multipath Además como vamos a aplicar reglas de firewall, debemos activar también la opción: Networking options > Network packet filtering Networking options > Netfilter Configuration > IP tables support

Networking options > Netfilter Configuration > Packet filtering Tras esto, ya tenemos nuestro kernel preparado para ser compilado. Comenzamos el proceso de compilación, no me voy extender demasiado sobre este proceso ya que existe multitud de documentación sobre ello y no es el objetivo del documento, estos son los pasos frecuentes para los kernel de la série 2.4.x: make dep make bzimage make clean make modules make modules_install Ahora con nuestro nuevo kernel compilado, solo necesitamos ponerlo en el inicio para poder arrancarlo. cp arch/i386/boot/bzimage /boot/vmlinux-2.4.22 cd / ln -s /boot/vmlinuz-2.4.22 vmlinuz-2.4.22 Y en el /etc/lilo.conf añade una entrada como esta: image=/vmlinuz-2.4.22 label=linux-2.4.22-lb read-only La etiqueta "Linux-2.4.22-lb" es solo un texto y vale cualquier cosa pero a mi me sirve para saber que version del kernel es y "lb" me recuerda que lo utilizo para hacer "load balancing". Reiniciamos la maquina y comprobamos que el proceso de arranque ha sido correcto. Ahora necesitamos instalar el paquete iproute. En Debian se hace con el comando apt-get install iproute. Vamos a dividir el proceso de puesta en marcha del enrutamiento en 3 pasos fundamentales y que nos van a permitir separar los procesos. - Configuración de las interfaces. - Establecimiento de las rutas. - Activación del routing. 2.1.- Configuración de las interfaces. Lo primero que vamos a hacer es borrar cualquier posible configuración anterior de las interfaces de red instaladas. ip addr flush lo

ip link set lo down ip addr flush eth0 ip link set eth0 down ip addr flush eth1 ip link set eth1 down ip addr flush eth2 ip link set eth2 down Después, vamos configurándolas y levantándolas una por una: Interfaz lo (Loopback) ip addr add 127.0.0.1/8 dev lo ip link set lo up Interfaz eth0 (conexion LAN) ip addr add 10.15.8.102/16 dev eth0 ip link set eth0 up Interfaz eth1 (conexion ADSL 2 Mbps.) ip addr add 10.69.69.1/24 dev eth1 ip link set eth1 up Interfaz eth2 (conexion ADSL 512 Kbps.) ip addr add 10.69.70.1/24 dev eth2 ip link set eth2 up 2.2.- Establecimiento de las rutas. Debemos ocuparnos de limpiar también cualquier ruta existente en el equipo. ip route flush default Ahora, ajustamos las rutas que deben ser estáticas; me explicare con una par de ejemplos: Todos los paquetes que vayan redirigidos a la LAN, deben ser enrutados siempre por la misma interfaz o habrá determinadas cosas que podemos querer que vengan siempre por determinado interfaz. Cada LAN tendrá sus propias necesidades. En la mía, los servidores DNS no están en mi mismo segmento de red y tengo necesidad de enrutar las peticiones, específicas a los DNS por otro router distinto del de por defecto. #Rutas estáticas. route add -host 127.0.0.1/32 dev lo route add -net 10.15.0.0/16 dev eth0 route add -net 10.69.69.0/24 gw 10.69.69.1 dev eth1 route add -net 10.69.70.0/24 gw 10.69.70.1 dev eth2 #Rutas a hosts especificos route add -host 10.16.1.1 gw 10.15.8.10 dev eth0 route add -host 10.16.1.2 gw 10.15.8.10 dev eth0 route add -host 10.129.255.193 gw 10.15.8.10 dev eth0

Este es el punto culminante de nuestro montaje. Ahora es cuando indicamos al núcleo que los paquetes sin un destino concreto, es decir, los que van a entrar en la ruta por defecto, deben ser balanceados entre las líneas disponibles. Recordemos que nosotros lo estamos haciendo entre 2 líneas pero pueden ser n en función de las tarjetas que nuestro equipo tenga instaladas. Para mayor versatilidad, y puesto que he tenido que hacer muchas modificaciones esta parte la he puesto en un script: ---------------------------------------------------------------------------------------- #!/bin/bash #Rutas echo "Ajustando rutas..." IF0="eth0" IF1="eth1" IF2="eth2" IP0="10.15.8.102" IP1="10.69.69.1" IP2="10.69.70.1" P1="10.69.69.8" P2="10.69.70.8" P0_NET="10.15.0.0" P1_NET="10.69.69.0" P2_NET="10.69.70.0" #Interfaz 0 ip route add $P0_NET dev $IF0 ip route add $P0_NET dev $IF0 ip route add $P0_NET dev $IF0 src $IP0 ip route add $P1_NET dev $IF1 table T1 ip route add default via $P1 table T1 ip route add $P2_NET dev $IF2 table T2 ip route add default via $P2 table T2 ip route add $P1_NET dev $IF1 src $IP1 ip route add $P2_NET dev $IF1 src $IP2 #LA REGLA MAGICA QUE BALANCEA ENTRE LAS 2 LINEAS ip route add default equalize scope global nexthop via $P2 dev $IF2 weight 1 nexthop via $P1 dev $IF1 weight 2 ip rule add from $IP1 table T1 ip rule add from $IP2 table T2 ---------------------------------------------------------------------------------------- Para comprobar que los cambios han tenido efecto y el enrutamiento será redirigido hacia los 2 gateways podemos poner el comando:

ip route show El cual nos tiene que dar una respuesta como la siguiente: ( ) default equalize nexthop via 10.69.70.8 dev eth2 weight 1 nexthop via 10.69.69.8 dev eth1 weight 2 Nuestra regla mágica, consigue que la salida hacia internet por nuestros 2 proveedores sea "ecualizada". Además a la línea con mayor ancho de banda, le hemos asignado un peso 2 mientras que a la menor, le hemos asignado un peso de 1. En realidad y siguiendo con nuestro ejemplo deberíamos haber asignado un peso 4 a la línea de 2 Mbps. Ya que tiene 4 veces mas ancho de banda que una de 512 Kbps. Pero como muestra nos vale. Mi recomendación es observar la eficiencia en función del número de líneas y de los tráficos que vaya a soportar. 2.3.- Activación del routing. Por último, vamos a activar el fordwarding para que esto pueda funcionar. En realidad lo que hacemos es decirle a kernel que pase paquetes entre sus interfaces. echo 1 > /proc/sys/net/ipv4/ip_forward A partir de aquí hay que ver como va a ser la salida de los clientes a Internet. Por ejemplo, yo tengo montado un proxy squid para que solo puedan salir a navegar por el puerto 80. Podemos sentarnos en frente de los routers y comprobar los LEDs de estado para ver su actividad. La alternativa que utilizo además de mirar a los routers ;), es poner el paquete iptraf en la parte "General interface statistics", seleccionamos "all interfaces" y podemos comprobar cual es tránsito de los paquetes por cada uno de los interfaces. En nuestro ejemplo, deberia ser: 2 peticiones por la línea de 2Mbps y la tercera por la de 512 Kbps y así sucesivamente. Aunque al principio los valores pueden desconcertarnos un poco, al cabo de un rato según el número de peticiones deben acabar siendo el doble por la interfaz eth1 que por la eth2 dado que le hemos asignado un peso del doble a una que a otra. 3.- Ajustes y resolución de problemas. Vamos a hacer ciertas matizaciones acerca del funcionamiento del "load balancing":

No es estrictamente cierto que cada petición vaya a salir conforme a la regla establecida. La explicación es que el kernel guarda en una cache, la ruta seguida para alcanzar una determinada dirección. Esto quiere decir que si por ejemplo hacemos un ping a un sitio A luego otro ping a otra dirección B y luego de nuevo al sitio A el tercer ping debería salir por la línea de 512 Kbps. Sin embargo, la dirección del sitio A permanece en la cache y volveríamos a salir por la línea que salimos originalmente independientemente de que le correspondiese salir por otra. Para ver el estado de la caché pondremos el comando: ip route show cache O también en el fichero: /proc/net/rt_cache Esta caché creo que se refresca cada 300 segundos (5 minutos) pero puede ser limpiada manualmente si no nos interesa recordar estos valores: ip route flush cache También existe la posibilidad de escribir cualquier cosa en: echo algo > /proc/sys/net/ipv4/route/flush Uno de los puntos fuertes de este sistema, es la tolerancia a fallos que nos proporciona. Si algunos de los enlaces cayera, tan solo la petición que se estuviera efectuando por ese enlace se vería afectada dado que desde ese momento es descartada por el kernel y se volvería a intentar enviar algo por ella pasado 60 segundos. Este tiempo es ajustado por defecto pero puede ser modificado ajustándolo manualmente en las opciones del kernel. Por ejemplo, si queremos que se produzca una nueva comprobación cada 30 segundos: echo 30 > /proc/sys/net/ipv4/route/gc_interval Existen otros muchos (muchísimos) parámetros que podemos necesitar o simplemente querer cambiar. Así a voz de pronto, se me ocurre que podemos querer que nuestra máquina no responda a ping s, que no haga caso de las peticiones broadcast / multicast pero en cuanto al comportamiento del router, nos pueden afectar entre otros: /proc/sys/net/ipv4/route/gc_elasticity Valores para controlar la frecuencia y comportamiento del algoritmo recolector de basuras de la caché de rutas. Indica los segundos antes de que el núcleo salte a otra ruta porque la anterior ha muerto. Por defecto 300.

/proc/sys/net/ipv4/route/gc_timeout Es el tiempo en el que el kernel declara una ruta como muerta. En función de este parámetro y gc_interval ajustaremos los tiempos para que el kernel deje de utilizar una ruta cuando esta cae o reintenta utilizarla. /proc/sys/net/ipv4/route/max_delay Retrasos para vaciar la caché de rutas. /proc/sys/net/ipv4/route/max_size Tamaño máximo de la caché de rutas. Las entradas viejas se purgan una vez que la caché alcance este tamaño. Todos estos parámetros que afectan a la manera que el kernel tiene de trabajar con el enrutamiento es una de las partes menos documentadas del proyecto. 4.- El futuro. Retomando lo que acabamos de ver acerca de los parámetros del kernel para ajustar el rendimiento del enrutamiento, el futuro debería pasar por documentar más ampliamente los parámetros del núcleo para poder optimizar el funcionamiento. También estoy tentado de probar todo esto con los nuevos kernels de las series 2.6.X. Al compilar he encontrado opciones tan interesantes como: IP: verbose route monitoring. TCP load balancing support. UDP load balancing support Verdad que tienen muy buena pinta? Hay un parche de Julian Anastasov en http://www.ssi.bg/~ja/#routes- 2.4 para los kernels 2.4.X he probado a aplicarlo y no he apreciado diferencias. Si alguien lo ha hecho, lo animo a que me lo cuente y lo añadiré a futuras versiones de este documento. Como es de esperar no me comprometo a que haya futuras versiones y revisiones de este documento, pero en caso de que existiesen estas son las líneas maestras sobre las que quiero trabajar. 5.- Agradecimientos. En lo personal, quiero agradecerle tanto a mi familia como a Arantxa la paciencia que tienen conmigo.

En lo profesional, mi primera dedicatoria tiene que ser a Antonio "chache" por empujarme en esto de la informática cuando todo eran cuestas arriba. Ahora que es un poco mas llano no puedo olvidarme de esas primeras clases praticas. También quiero agraceder muy sinceramente a toda la gente que trabaja diariamente con licencias abiertas bien programando o bien escribiendo documentación que nos permite ampliar y compartir conocimientos y ponernos menos zancadillas. Gracias, a veces recupero algo de fé en el ser humano. ;) 6.- Copyrigth y licencia. Copyright (c) 2004 Francisco Javier Crespo Jiménez. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".