Monografias.com > Computación > Redes
Descargar Imprimir Comentar Ver trabajos relacionados

Herramientas para el control de ancho de banda en servidores Linux




Enviado por produccion



    1. Herramientas
    2. Principios de
      Funcionamiento
    3. Ejemplo
    4. Conclusión
    5. Bibliografía
    1. Introducción

    Si bien los enlaces y conexiones a
    internet son
    hoy en día muy veloces, es normal que nos encontremos
    con enlaces multipropósito, es decir, con conexiones que
    nos sirven de soporte para varios tipos de servicio,
    como por ejemplo, interet, correo corporativo, video conferencia,
    canales de voz, consulta a servidores internos,
    etc…

    Aunque nuestras redes estén
    configuradas para trabajar a 100Mbps o 10Mbps, no siempre (por no
    decir nunca) es posible alcanzar estas velocidades de
    transmisión, debido a la gran cantidad de colisiones que
    presenta ethernet, sin
    duda la topología más usada en la
    actualidad. Debido a esto es conveniente tener bien definido que
    servicios son
    los fundamentales y cuanto ancho de banda requieren.

    No sólo es importante definir las prioriedades en
    cuanto a los servicios, también es muy importante definir
    las prioridades que tienen las diferente subnets de nuestra
    empresa, por
    ejemplo, no podemos asignarle el mismo ancho de banda a areas
    como desarrollo o
    gerencia y a
    areas como atención al
    cliente o archivo. No
    podemos permitir que el gerente de
    nuestra empresa participe de una videoconferencia "entrecortada"
    porque alguien aburrido en el archivo baja los últimos
    mp3 desde
    internet. Pensemos que ésta persona en el
    archivo, luego de bajar los mp3, tiene la brillante idea de de
    enviárselos a sus amigos dentro de la empresa por
    correo corporativo, la gente de desarrollo no podría
    acceder a sus bases de datos
    debido al exesivo uso de ancho de banda ocupado por los mails
    llenos de mp3. Todo esto hace a una buena administración de recursos.

    Creo conveniente advertir, antes de que sea tarde, que
    para poder
    implementar este tipo de control, debemos tener un cierto
    conocimiento
    acerca de direccionamiento
    IP, subnets, y puertos. O sea para poder limitar el uso de
    Internet, debemos saber que puerto usa nuestro servidor proxy, para
    limitar o liberar el uso de video conferencias, debemos saber que
    puertos se utilizan para establecer el enlace, o la ip de la
    máquina en la que se realiza dicha video
    conferencia.

    1. Herramientas

    Para lograr nuestro objetivo no
    vamos a utilizar ningún software especial ni
    costoso, sólo utilizaremos herramientas
    que vienen en las últimas distribuciones de linux (a partir
    de la versión 2.4.20 de kernel), éstas herramientas
    son, un controlador de tráfico (tc) y una especie de
    temporizador (htb).

    Debido a que éstas herramientas son relativamente
    nuevas, hay que prestar mucha atención a la sintaxis y a los valores
    que se asignan, ya que un valor
    erróneo significaría dejar sin conexión a un
    determinado sector o dejarlo totalmente libre con ancho de banda
    ilimitado.

    Este tipo de herramientas, al formar parte del propio
    sistema operativo
    tiene un elevado nivel de eficiencia y
    precisión. Además de ser muy eficiente, es muy
    sencillo anular su efecto ya que con una simple línea, se
    anulan los efectos producidos.

    1. Principios de
      Funcionamiento

    Antes de hablar sobre sintaxis o de
    explicarles algún ejemplo, creo conveniente explicar los
    terminos y los elementos que hacen a que la
    organización del "limitador" sea sencilla y
    eficiente.

    Es muy importante tener en claro antes de empezar a
    limitar algo, saber los limites propios de lo que queremos
    limitar, no tendría sentido ajustar el limitador de
    velocidad de
    un automóvil en 200Km/h cuando su velocidad final es de
    140Km/h…. En nuestro caso pasa exactamente lo mismo, si
    contamos con un enlace punto a punto de 64Kbps, de nada
    servirá ajustar el limitador en 128Kbps o en 256Kbps,
    nuestra línea seguirá saturada siempre.

    Hecha la aclaración anterior, ya podemos empezar
    a dar definiciones sobre cuanto ancho de banda habilitaremos para
    determinados servicios, usuarios o subnets.

    Establecemos primero el ancho de banda máximo
    disponible en nuestras líneas de transmisión, este
    valor puede ser, por ejemplo, de 10Mbps (Clase 1).
    Luego definimos todos los límites
    previstos o CLASES. Por ejemplo hemos definidos de que los
    diferentes límites serán (sin importar aún a
    que corresponde cada límite), 512Kbps (Clase 2), 256Kbps
    (Clase 3) y 24Kbps (Clase 4). Con estos valores
    tenemos definidas 4 CLASES. Esto significa que tendremos algunos
    servicios, usuarios o subnets, con 1Mbps, otros con 512Kbps,
    otros con 256Kbps y los últimos con 24Kbps.

    Luego de definidas las CLASES, debemos empezar a definir
    que corresponderá a cada clase, por ejemplo, gerencia
    tendrá el máximo ancho de banda posible (Clase 1),
    el correo corporativo será de Clase 3, Internet Clase 4,
    Desarrollo Clase 2, Videoconferencia Clase 1, y el resto de
    usuarios estarán limitados a la Clase 4.

    Para que cada sector o servicio corresponda a una
    determinada CLASE debemos aplicar FILTROS. Hay muchas formas de
    hacer esto, por ejemplo se puede hacer trabajando en conjunto con
    las entradas de las IPTABLES, pero esto ya hace todo un poco mas
    complejo. Mi recomendación es trabajar sólo con los
    comandos
    mencionados anteriormente ya que nos brindan las mismas
    potencialidades con una facilidad de implementación muy
    superior.

    Luego que tenemos las CLASES y los FILTROS, sólo
    nos queda escribir el Script que implemente el
    "limitador".

    Creo conveniente explicar la implementación con
    un ejemplo de Script que limita diferentes cosas, por ejemplo, un
    grupo de
    usuarios, una subnet y un servicio, dejando así en claro
    como se implementa cada cosa, para que luego ustedes puedan
    implementarlo a su medida.

    1. Ejemplo

    Describiré brevemente los recursos
    con los que contamos y como he decidido distribuirlos.

    El limitador se aplicará, en un servidor Linux
    por donde pasa todo el tráfico de Internet,
    videoconferencia y correo corporativo. Este servidor tiene dos
    placas de red, una
    externa (eth0) y la otra interna (eth1). Nuestro proveedor de
    Internet conectado a eth0 nos brinda un ancho de banda de 1Mbps.
    Nuestra red interna está configurada para funcionar a
    10Mbps máxima. Además tenemos contratado un enlace
    punto a punto con una sucursal de 64Kbps por el cual viaja tanto,
    internet, correo corporativo y canales de voz.

    Nuestra distribución de direcciones ip y puertos es
    la siguiente:

    a)La Gerencia forma una subnet con la siguiente
    numeración: 172.16.21.0/24.

    b)Nuestra sucursal es la subnet
    172.16.31.0/24

    1. El resto de los usuarios pertenecen a la subnet
      172.16.1.0/24

    d)El puerto usado por nuestro proxy de internet es el
    3128

    Vamos a definir 4 clases de ancho de banda:

    1. 10Mbps
    2. 256 Kbps
    3. 128 Kbps
    4. 24Kbps

    Ahora definimos que grupo pertenece a cada
    clase. Gerencia pertenecerá a la Clase I, Internet
    pertenecerá a la Clase II, el resto de los usuarios
    ocupará la Clase III y la sucursal será parte de la
    Clase IV. En el caso de la sucursal, por ejemplo, los servicios de
    internet y correo corporativo estarán limitados a
    24Kbps, dejando el resto para canales de voz y otros servicios
    que no pasen por el servidor donde instalaremos el
    limitador.

    El Script tendría el siguiente
    contenido:

    #!/bin/bash

    #Definimos la placa de red interna, ya que es la que nos
    interesa administrar.

    DEV=eth1

    #Definimos el camino al comando "tc", en caso de que no
    este en el PATH

    TC=tc ; este es el caso en el que esta en el
    PATH

    #Definimos todos los limites de ancho de banda a
    utilizar en Kbps.

    RATE1=1000

    RATE2=256

    RATE3=128

    RATE4=24

    # Esta linea elimina toda posible definicon anterior de
    FILTROS y CLASES

    $TC qdisc del dev $DEV root 2>&1
    >/dev/null

    #Definimos las CLASES existentes, ademas de la CLASE
    root y la CLASE master que son necesarias para el funcionamiento
    del script, pero que no debemos modificar.

    #CLASE root y master

    $TC qdisc add dev $DEV root handle 1: htb default
    60

    $TC class add dev $DEV parent 1: classid 1:1 htb rate
    ${RATE1}kbit

    #CLASES y orden prioridad

    #ClASE I

    $TC class add dev $DEV parent 1:1 classid 1:10 htb rate
    ${RATE}kbit ceil ${RATE}kbit prio 1

    $TC qdisc add dev $DEV parent 1:10 handle 10: sfq
    perturb 10

    #ClASE II

    $TC class add dev $DEV parent 1:1 classid 1:20 htb rate
    ${RATE2}kbit ceil ${RATE2}kbit prio 2

    $TC qdisc add dev $DEV parent 1:20 handle 20: sfq
    perturb 10

    #ClASE III

    $TC class add dev $DEV parent 1:1 classid 1:30 htb rate
    ${RATE3}kbit ceil ${RATE3}kbit prio 3

    $TC qdisc add dev $DEV parent 1:30 handle 30: sfq
    perturb 10

    #ClASE IV

    $TC class add dev $DEV parent 1:1 classid 1:40 htb rate
    ${RATE4}kbit ceil ${RATE4}kbit prio 1

    $TC qdisc add dev $DEV parent 1:40 handle 40: sfq
    perturb 10

    #Ya están las 4 CLASES definidas, ahora hay que
    definir los FILTROS.

    # FILTRO1 (Subnet GERENCIA a CLASE I)

    $TC filter add dev $DEV parent 1: protocol ip prio 1 u32
    match ip dst 172.16.21.0/24 flowid 1:10

    $TC filter add dev $DEV parent 1: protocol ip prio 1 u32
    match ip src 172.16.21.0/24 flowid 1:10

    # FILTRO2 (INTERNET a CLASE II)

    $TC filter add dev $DEV parent 1: protocol ip prio 1 u32
    match ip dport 3128 flowid 1:20

    $TC filter add dev $DEV parent 1: protocol ip prio 1 u32
    match ip sport 3128 flowid 1:20

    # FILTRO3 (Subnet RESTO USUARIOS a CLASE III)

    $TC filter add dev $DEV parent 1: protocol ip prio 1 u32
    match ip dst 172.16.1.0/24 flowid 1:30

    $TC filter add dev $DEV parent 1: protocol ip prio 1 u32
    match ip src 172.16.1.0/24 flowid 1:30

    # FILTRO4 (Subnet SUCURSAL a CLASE IV)

    $TC filter add dev $DEV parent 1: protocol ip prio 1 u32
    match ip dst 172.16.31.0/24 flowid 1:40

    $TC filter add dev $DEV parent 1: protocol ip prio 1 u32
    match ip src 172.16.31.0/24 flowid 1:40

    #Ya esta listo para correr, si queremos podemos mostrar
    las clases y limites establecido (no muestra a quien
    pertenece cada subnet o servicio).

    $TC qdisc show dev $DEV

    $TC class show dev $DEV

    #Fin del Script

    5)
    Conclusión

    Con este sencillo Script, hemos logrado
    desarrollar una muy potente herramienta que nos permite
    administrar muy eficientemente los recursos con los que
    disponemos. Demás está decir que recomiendo
    firmemente leer los manuales de los
    comandos utilizados, ya que esto dara una solidez de conocimiento
    muy superior, y una posibilidad de ajustar más aun el
    Script a la medida de sus necesidades.

    6)
    Bibliografía

    • SuperShaper Script, de Smidsrod
      Consulting

    http://www.smidsrod.no/

    Diego Santoni

    Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

    Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

    Categorias
    Newsletter