Este HOWTO explica los pasos para balancear la carga de red sobre dos interfaces conectados a Internet.
1. INTRODUCCIN 2 1.1 Copyright 2 1.2 Limitacin de responsabilidad 3 1.3 Reconocimientos y agradecimientos 3 2. BALANCEO DE CARGA DE RED ENTRE DOS ENLACES A ISPS 5 2.1 Configuracin de los routers 5 2.2 Instalacin del sistema operativo 6 2.3 Instalacin de paquetes adicionales 8 2.4 Configuracin de los interfaces Ethernet 9 2.5 Creacin del script de configuracin de rutas 10 2.6 Automatizando la carga del script 11 2.7 Parametrizando la cach de rutas 11 2.8 Configurar clientes 12 3. COSAS PENDIENTES 13 4. MS LECTURAS 14 1. Introduccin Si tienes 2 conexiones a Internet en tu red lo mas probable es que no les saques todo el partido posible. En este HOWTO se explica como conIigurar un Linux de modo que actue como router y distribuya las conexiones a Internet de Iorma mas o menos equitativa entre tus enlaces. La solucion tipica a este problema consistia en conIigurar la mitad de los equipos de una red con un gateway y la otra mitad con otro. Esto presenta los siguientes problemas: No posibilita la tolerancia a Iallos. Si perdemos un enlace, los equipos conectados a dicho enlace perderan conectividad con Internet. No permite el aprovechamiento total del ancho de banda. Si tenemos dos enlaces ADSL de 4 Mbps, aunque seamos los unicos usuarios en ese momento solo podremos aprovechar 4Mbps y no los 8 Mbps que tenemos. El reparto no es equilibrado. Podria ocurrir que un enlace Iuese compartido por 20 usuarios y otro por uno o incluso por ninguno. Asi habria 20 usuarios compartiendo 4 Mbps y los otros 4 Mbps se desaprovecharian. Todo este HOWTO se basa en la conIiguracion con la que se han hecho las pruebas. Esta conIiguracion consiste en: Una red de area local a Fast Ethernet con unos 100 equipos conectados a ella. 2 conexiones a Internet ADSL 4096/300 Mbps, contratadas con distintos proveedores y conectadas a la red local por medio de routers (Zyxel concretamente, pero no es relevante). Un equipo i386 con procesador Pentium Celeron a 433 MHz, 256 MB de RAM y un disco duro de 4GB. El equipo cuenta tambien con 3 tarjetas de red: 2 3Com PCI 3c905B Cyclone 100BaseTx y una RealTek RTL-8029. tambien sera necesario un lector de CD-ROM para la instalacion del sistema operativo. Este HOWTO explica como implementar el balanceo sobre una SuSE 9.2. Se ha probado con otras distribuciones de Linux (Debian 3.0r2, Mandrake 10.0, SuSE 9.1,.) pero por unos u otros motivos el proceso se complicaba (habia que recompilar Kernel o cosas similares). En ningun caso esperes de este HOWTO que te explique el por que de las cosas. Aqui solo explicamos los comos. Si estas interesado en proIundizar, te recomiendo el HOWTO-Linux Advanced Routing and TraIIic Control (Encaminamiento avanzado y control de traIico en Linux) que puedes encontrar en http://lartc.org.
1.1 Copyright (c) 2005 Israel G. Otura Este HOWTO puede reproducirse total o parcialmente, sin cargos, sujeto a las siguientes restricciones: La nota sobre los derechos de autor y esta nota sobre los permisos debe mantenerse tal cual en todas las copias, completas o parciales. Cualquier traduccion o trabajo derivado de este debe ser aprobado por escrito por parte del autor antes de su distribucion. Si se distribuyera una parte de este trabajo, tendrian que incluirse las instrucciones necesarias y un medio para obtener la version completa de este manual. Pueden reproducirse pequeos extractos como ilustraciones para revisiones o citas en otros trabajos, sin la inclusion de este permiso, siempre que se proporcione una reIerencia apropiada. Se podrian hacer excepciones a estas reglas si se persigue un Iin academico. Si ese es el caso, pongase en contacto con el autor. Estas restricciones han sido creadas para protegernos a nosotros como autores, y, en ningun caso, para poner trabas a los lectores y educadores. Todo el codigo Iuente de este documento (junto con el SGML en que Iue escrito el documento) se acoge a la licencia GNU, disponible via FTP anonimo en el archivo de GNU. 1.2 Limitacin de responsabilidad Usa la inIormacion contenida en este documento bajo tu propio riesgo. El autor declina cualquier responsabilidad por los contenidos del mismo. El uso de los conceptos, ejemplos y/u otros contenidos del documento se realizara siempre bajo tu responsabilidad. Todos los derechos de copia (Copyrights) son propiedad de sus propietarios legitimos, salvo que se especiIique lo contrario. El uso de un termino en este documento no debe considerarse como un intento de aIectar a la vigencia de ninguna marca comercial o marca de servicio. Se recomienda realizar una copia de seguridad de tu sistema antes de poner en practica cualquiera de los procedimientos explicados en este documento. 1.3 Reconocimientos y agradecimientos Se lo merecen los que siguen (sin un orden particular): Pio Sierra (por dar la tabarra con la dichoso SuSE, las cosas Open y demas...) Jose NetSkaven` (por dar la tabarra sin mas... y por ponerme sobre las pistas adecuadas) La gente de #SuSE en irc-hispano.org (Solusan, Sharek, univac, nyman, GuraDXPU, chakal`-`...) (por intentar echar una mano siempre y por conseguir echar una mano cuando han podido, que no han sido pocas veces) A Bert Hubert, responsable de lartc.org, asi como a los autores de las diversas secciones del HOWTO-lartc. Tambien es justo agradecer a Siconet Ingenieros que hayan creado la necesidad y puesto los medios y recursos a mi alcance. Si crees que deberias estar aqui y no estas, o estas y crees que no deberias estar, enviame un mensaje a linux|arroba|otura|punto|net. 2. Balanceo de carga de red entre dos enlaces a ISPs A partir de aqui entramos en materia. Lo primero, un esquema para tener una vision global de lo que vamos a hacer y de que red es cada una. RED 3 192.168.100.0/24 NTERNET RED 2 192.168.1.0/24 RED 1 192.168.12.0/24 ROUTER2 BALANCE Equipo 1 Equipo3 Equipo2 ROUTER1 P: 192.168.100.10 MASK: 255.255.255.0 GW: 192.168.100.1 P: 192.168.100.11 MASK: 255.255.255.0 GW: 192.168.100.1 P: 192.168.100.12 MASK: 255.255.255.0 GW: 192.168.100.1 Eth0: RealTek RLT-8029 P: 192.168.100.1 MASK: 255.255.255.0 Eth1: 3Com 3c905B P: 192.168.12.90 MASK: 255.255.255.0 Eth2: 3Com 3c905B P: 192.168.1.90 MASK: 255.255.255.0 P: 192.168.1.1 MASK: 255.255.255.0 P: 192.168.12.1 MASK: 255.255.255.0 P Pblica 1 P Pblica 2
Obviamente este esquema es el que soluciona nuestro problema concreto de direccionamiento y de conectividad interna. Es muy probable que tengas que adaptarlo para cumplir las necesidades y requerimientos de tu caso especiIico. Para ello necesitas conocimientos basicos sobre direccionamiento IP que puedes obtener leyendo otros HOWTOs sobre esta tematica como los que puedes encontrar en http://es.tldp.org/htmls/comos.html. Resumiendo, nuestro objetivo es conseguir que cuando un equipo haga una conexion a Internet, esta se realice utilizando el ROUTER1, la siguiente por el ROUTER2, la siguiente de nuevo por el 1 y asi sucesivamente. Dicho esto, manos a la obra. 2.1 Configuracin de los routers La conIiguracion de los routers no tiene mayor misterio. Tan solo debes conIigurar ROUTER1 con la direccion IP 192.168.12.1 y la mascara 255.255.255.0 y ROUTER2 con la IP 192.168.1.1 y la misma mascara. Ademas, debes aadir en sus tablas de rutas estaticas la ruta a la red 192.168.100.0, a la que llegaran ROUTER1 por 192.168.12.90 y ROUTER2 por 192.168.1.90. Tambien es recomendable que conIigures cualquiera de ellos como servidor DHCP para Iacilitar la conIiguracion automatica del equipo BALANCE durante su instalacion. Todas estas conIiguraciones se llevan a cabo de Iorma distinta en cada modelo de router por lo que tendras que acudir a la documentacion del tuyo para llevarlas a cabo. Otra posibilidad es que dejes la conIiguracion de tus routers tal cual esta y que vayas haciendo el cambio de direcciones por tu cuenta a lo largo del HOWTO, pero si no tienes demasiado claro como Iunciona todo esto te puedes liar un poco. 2.2 Instalacin del sistema operativo Como he mencionado antes, la implementacion que vamos a llevar a cabo en este HOWTO se basa en un SuSE 9.2 por motivos de sencillez. Asi, lo primero que tendremos que hacer es instalar dicho sistema operativo en la maquina. Para ello debemos descargar la ISO del CD de instalacion. Esta la podemos obtener de Itp://Itp.rediris.es/sites2/Itp.suse.com/pub/suse/i386/9.2/iso/ SUSE-Linux-9.2-mini- installation.iso. Este es uno de los mirrors espaoles de SuSE, si la descargas desde otro lugar busca en www.suse.com tu mirror mas cercano. Una vez la hayas descargado grabala en un CD y arranca el equipo que hara las veces de router con el mismo. En la ventana del gestor de arranque pulsa F3 y selecciona FTP. Como servidor conIigura Itp.rediris.es (130.206.1.5) y como Directory /sites2/Itp.suse.com/pub/suse/i386/9.2/. Al igual que ocurria con la imagen del CD de arranque, si estas en un lugar que no sea Espaa debes consultar en www.suse.com el mirror mas cercano. Cuando hayas conIigurado estos dos parametros, pulsa OK. Si lo deseas puedes pulsar F4 y seleccionar Espaol como idioma. Si tienes soltura con el ingles no te lo recomiendo, de este modo minimizas la cantidad de archivos que se instalan al no instalar idiomas adicionales. Selecciona Installation con los cursores y pulsa Intro. Cuando cargue el sistema de instalacion graIico sigue estos pasos. Selecciona el idioma |Englis(US)| y pulsa Accept. Si la maquina ya tuviese una instalacion previa de Linux te aparecera un cuadro advirtiendote de este aspecto. Selecciona New Installation y pulsa OK. En las conIiguraciones de instalacion (Installation Settings) conIirma que se crea espacio en una particion swap para la memoria de intercambio (unos 244 MB es adecuado). Haz clic sobre SoItware para modiIicar el soItware que se va a instalar y selecciona la opcion Minimun System. Cambia la zona horaria (Time Zone) |Region: Europe, Time Zone: Spain, Hardware Clock set to UTC| y la distribucion del teclado (Keyboard Layout) |Spanish|. Una vez hayas conIigurado todos estos parametros pulsa Accept y en el cuadro de conIirmacion pulsa Install. En este momento empezara el proceso de instalacion desde la red. Esta instalacion descarga aproximadamente unos 360 MB y la duracion de la misma dependera en gran medida del ancho de banda de tu conexion. Obviamente esta instalacion podria depurarse mucho mas seleccionando los paquetes a instalar de Iorma manual, pero considero que la optimizacion no es el objeto Iundamental de este HOWTO, al menos en esta version. Una vez Iinalice la copia de Iicheros se reiniciara el sistema. Durante el reinicio debes sacar el CD de instalacion de la unidad o cuando reinicies volveras al gestor de arranque. Si te ocurre esto, tan solo tienes que seleccionar Boot Irom hard disk (la opcion por deIecto) y pulsar Intro. Tras arrancar debes establecer la contrasea de . Este es el super-usuario del sistema. No olvides la contrasea y no pongas ninguna trivial. Escribela en los dos campos y pulsa Next. Para desplazarte entre campos pulsa TAB. La siguiente pantalla es la de Network ConIiguration. En esta has de desactivar el Firewall. Para ello, selecciona Enabled pulsando TAB y pulsa Intro. En Network InterIaces tan solo necesitas un interIaz conIigurado, puede ser con DHCP si lo deseas y establecer el nombre de Host. Para conIigurar el nombre de Host selecciona Network InterIaces con la tecla TAB y pulsa Intro. En la pantalla de Network Cards ConIiguration, pulsa TAB hasta seleccionar las Change y pulsa Intro. Pulsa TAB hasta seleccionar Edit y pulsa Intro en la siguiente pantalla. Ahora pulsa TAB hasta seleccionar Host name and name server y pulsa Intro. ConIigura el nombre del host que desees, asi como el nombre del dominio y quita la marca de Change host name via DHCP. Ve hasta Ok con el TAB y pulsa Intro. Pulsa TAB otra vez hasta situarte en Routing y pulsa Intro. Marca la casilla Enable IP Forwarding y ve hasta OK. Pulsa Intro. Vuelve hasta Next con el TAB y pulsa Intro y despues hasta Finish con el TAB y pulsa Intro. Deberias estar en la pantalla de Network conIiguracion. Ve hasta Next con el TAB y pulsa Intro. En este momento se escribira tu conIiguracion de red. Ve hasta Next y pulsa Intro para probar la conexion a Internet. Esto es importante para el siguiente paso, la actualizacion desde Internet. Si este test Iallase seria buena idea que volvieses a la conIiguracion de red y la corrigieses. Si tiene exito, muevete hasta Next y pulsa Intro. Aparecera ante ti un dialogo preguntandote si deseas llevar a cabo la actualizacion on- line (Run Online Update). Deja marcada la casilla del Yes y pulsa Intro. Esto actualizara los paquetes que tienes instalados a sus ultimas versiones, solucionando asi los mas importantes Iallos de seguridad. En la siguiente pantalla puedes escoger el mirror desde el que llevar a cabo la actualizacion. El que aparece por deIecto es bueno, pero si estas en Espaa lo haras mas rapido desde Itp://Itp.rediris.es/sites2/Itp.suse.com/pub/suse/. ConIigura esa direccion como sitio deIinido por el usuario (User-DeIined Location). Una vez seleccionado el servidor deseado muevete hasta Next y pulsa Intro. El proceso de descarga e instalacion de actualizaciones comenzara. Manten la seleccion de paquetes que lleva a cabo YaST, ve hasta el Ok con el TAB y pulsa Intro para validar tu decision. En este momento se instalaran los parches seleccionados. Cuando Iinalice el proceso, muevete hasta el Finish y pulsa Intro. Ahora se escribira toda la inIormacion del sistema en los archivos de conIiguracion adecuados. Como metodo de autenticacion (Authentication Method) selecciona Local y pulsa Next. En la ventana User data puedes pulsar directamente Next, no es necesario que crees un usuario. ConIirma que es esto lo que deseas pulsando Yes en el dialogo que te aparecera. Tras la conIiguracion del sistema aparecera el archivo de Release Notes, leelo y pulsa Next. Lo siguiente es conIigurar tu entorno. Tarjetas de sonido, de video, de TV, etc. Nuestro router no necesita nada de esto, mantenemos las conIiguraciones por deIecto y pulsamos Next. Con esto habras Iinalizado la instalacion, pulsa Finish para acceder a la consola del sistema. 2.3 Instalacin de paquetes adicionales Inicia sesion como root y ejecuta el comando yast. Desde este programa puedes instalar paquetes adicionales que necesitaras para conIigurar tu equipo. Obviamente, puedes elegir otros paquetes que te proporcionen la misma Iuncion. En la ventana principal de YaST asegurate de tener seleccionado SoItware en el menu de la izquierda, pulsa TAB y desplazate hasta Install or remove soItware. Pulsa Intro. Cuando aparezca ante ti la lista de paquetes pulsa TAB hasta llegar a Search y pulsa Intro. Escribe y pulsa Intro. Pico es un pequeo editor de texto que te permitira cambiar las conIiguraciones del sistema. Cuando aparezca el paquete pico, marcalo pulsando la barra espaciadora (un aparecera ante el). Vuelve a situarte en Search y pulsar Intro. Esta vez busca . IptraI es un monitor de traIico sencillo que te permitira comprobar si el balanceo de carga se produce de Iorma eIicaz. Cuando aparezca ante ti, seleccionalo y pulsa la barra espaciadora. Para acabar ve hasta Accept y pulsa Intro. Comenzara el proceso de instalacion. Cuando Iinalice selecciona Finish y pulsa Intro. Ve hasta Quit y pulsa Intro. 2.4 Configuracin de los interfaces Ethernet La conIiguracion de los interIaces de red no tiene ningun misterio. El unico aspecto que debes tener muy en cuenta es que a la hora de deIinir las rutas despues, los interIaces van asociados a direcciones IP. Asi, si intercambias las IP de dos interIaces es posible que el sistema no Iuncione posteriormente, salvo que hagas las modiIicaciones adecuadas en los scripts. Para conIigurar los interIaces de red inicia sesion como y ve al directorio /etc/sysconIig/network. Alli encontraras un archivo al menos con un nombre similar a iIcIg-eth- XX:XX:XX:XX:XX:XX, donde la secuencia de XX representa la direccion MAC de la tarjeta de red que tienes conIigurada. Copia ese archivo como iIcIg-eth0, iIcIg-eth1 e iIcIg-eth2 usando estos comandos y luego borra el original: cp ifcfg-eth-XX:XX:XX:XX:XX:XX ifcfg-eth0 cp ifcfg-eth-XX:XX:XX:XX:XX:XX ifcfg-eth1 cp ifcfg-eth-XX:XX:XX:XX:XX:XX ifcfg-eth2 rm ifcfg-eth-XX:XX:XX:XX:XX:XX Observa que en tu equipo puede haber varios archivos con distintas secuencias de XX, copia uno de ellos y borralos todos despues. Edita con un editor de texto (el pico, por ejemplo) los archivos que has creado hasta que contengan esta inIormacion: IIcIg-eth0: BOOTPROTO=static STARTMODE=auto IPADDR=192.168.100.1 BROADCAST=192.168.100.255 NETMASK=255.255.255.0 NETWORK=192.168.100.0 IIcIg-eth1: BOOTPROTO=static STARTMODE=auto IPADDR=192.168.12.90 BROADCAST=192.168.12.255 NETMASK=255.255.255.0 NETWORK=192.168.12.0 IIcIg-eth2: BOOTPROTO=static STARTMODE=auto IPADDR=192.168.1.90 BROADCAST=192.168.1.255 NETMASK=255.255.255.0 NETWORK=192.168.1.0 Para editar cada uno de los archivos debes ejecutar el siguiente comando para cada archivo, reemplazando la X por el numero adecuado: pico ifcfg-ethX En la parte inIerior del programa pico puedes ver las teclas que combinadas con el CTRL te permiten guardar tus datos (CTRLO) y salir del programa (CTRLX). Una vez tengas esos tres archivos puedes ejecutar estos comandos para que las conIiguraciones tengan eIecto. Eso si, a partir de ese momento con toda probabilidad, perderas la conexion a Internet temporalmente. rcnetwork stop rcnetwork start Despues puedes ejecutar este otro comando y comprobar que la conIiguracion es la correcta: ifconfig | more 2.5 Creacin del script de configuracin de rutas Para la conIiguracion de las rutas vamos a crear un script que se cargara en los runlevel 3 y 5, que son los que tienen red. Ejecuta estos comandos: echo 201 T1 >> /etc/iproute2/rt_tables echo 202 T2 >> /etc/iproute2/rt_tables Para crear este script ve al directorio /etc/init.d y ejecuta pico rutas. Copia estos comandos en el script: #!/bin/bash ip route add 192.168.1.0 dev eth2 src 192.168.1.90 table T2 ip route add default via 192.168.1.1 table T2 ip route add 192.168.12.0 dev eth1 src 192.168.12.90 table T1 ip route add default via 192.168.12.1 table T1 ip route add 192.168.1.0 dev eth2 src 192.168.1.90 ip route add 192.168.12.0 dev eth1 src 192.168.12.90 ip rule add from 192.168.1.90 table T2 ip rule add from 192.168.12.90 table T1 ip route add 192.168.100.0 dev eth0 table T2 ip route add 192.168.12.0 dev eth1 table T2 ip route add 127.0.0.0/8 dev lo table T2 ip route add 192.168.100.0 dev eth2 table T1 ip route add 192.168.1.0 dev eth0 table T1 ip route add 127.0.0.0/8 dev lo table T1 ip route del default ip route add default scope global nexthop via 192.168.1.1 dev eth2 weight 1 nexthop via 192.168.12.1 dev eth1 weight 1 Observa que estas dos ultimas lineas son una sola, tras nexthop via debes escribir todo seguido 192.168.12.1 dev eth1 weight 1. Reinicia tu equipo escribiendo reboot en la consola. Cuando vuelvas a arrancar, ejecuta el siguiente comando: /etc/init.d/rutas Es posible que recibas un mensaje de error diciendo: RTNETLINK answers: No such process Esto es debido a que la penultima linea del script elimina la ruta por deIecto, que al arrancar el sistema no existe. 2.6 Automatizando la carga del script Ahora conIiguraremos el sistema para que el script se cargue automaticamente en los niveles de ejecucion |runlevel| 3 y 5. Esto se consigue con enlaces simbolicos al script rutas en los directorios apropiados. Situate en el directorio /etc/init.d/rc3.d y lista el contenido ejecutando el comando ls la. Observa que habra una serie de archivos cuyo nombre tiene esta estructura SXXabc, donde XX es un numero y abc el nombre de un script. Fijate en el que tiene el numero mayor y ejecuta este comando sustituyendo las YY por el siguiente numero, es decir por XX1: ln s /etc/init.d/rutas SYYrutas Repite ese comando desde /etc/init.d/rc5.d (observando antes cual es la YY adecuada para este runlevel). 2.7 Parametrizando la cach de rutas Si reiniciases ahora tu equipo el router Iuncionaria y balancearia carga, pero en las conexiones TCP que se prolongasen durante largos periodos (IRC, Messenger, FTP, telnet, ssh, etc.) te encontrarias con desconexiones cada 10 minutos aproximadamente. Esto se debe a que SuSE esta conIigurado para purgar la cache de rutas cada 600 segundos. Para cambiar estas conIiguraciones debes editar el Iichero /etc/sysctl.conI (pico /etc/sysctl.conf) para aadirle las siguientes lineas: net.ipv4.inet_peer_maxttl = 200000 net.ipv4.inet_peer_minttl = 200000 net.ipv4.route.secret_interval = 200000 Una vez hecho este cambio si puedes reiniciar tu maquina (reboot) y empezar a aprovechar tu ancho de banda. 2.8 Configurar clientes Los clientes no necesitan ninguna conIiguracion especial, salvo una direccion IP de la red 192.168.100.0/24, la mascara de red 255.255.255.0 y el gateway 192.168.100.1. Una vez conIigurado eso, le pones los DNS que quieras y a disIrutar! 3. Cosas pendientes Esta lista contiene temas pendientes y/o mejorables, ademas de cosas que se me ocurre a mi que se podrian hacer. Obviamente no contiene todos los temas, pero si gran parte de ellos. Si se te ocurre algun tema nuevo o, mejor aun, si tienes alguno de ellos resuelto, ponte en contacto conmigo y lo incorporamos al documento. Incluir una introduccion tecnica sobre comos y porques. VeriIicar la correccion tecnica de la seccion 2.7 Parametrizando la cache de rutas, y resolverlo de una Iorma mas elegante, si se puede y procede. Buscar la Iorma de que estas instrucciones sean mas Ilexibles y accesibles para cualquier conIiguracion de red (Ethernet, routers USB, modems, mas de 2 enlaces a Internet, etc.) Buscar la Iorma de que estas instrucciones sean validas para cualquier distribucion, no solo para SuSE 9.2. Hacer unos scripts que lo hagan todo por ti y tu solo mires y sonrias. Hacer un Live-CD con un intuitivo interIaz que preguntando cuatro cosas te resuelva la papeleta y no se quede a vivir en tu disco duro. Integrar en alguna implementacion de Iirewall, como SmoothWall, IPCop o si alguien se anima, pues una propia.
4. Ms lecturas Para no aburrirte puedes echar un ojo al HOWTO-lartc, y desde ahi, mirar su bibliograIia y seguir, y seguir. Encontraras dicho documento en http://lartc.org/howto/.