Como acotar el ancho de banda en nuestras conexiones
Enviado el Wednesday, 17 March a las 16:55:28 por ShaDoW
¿Como acotar el ancho de banda en nuestras conexiones?
Tenemos 2 formas de implementarlo en un sistema LiNUX:
1. La primera y menos potente es a través de un módulo llamado
'Traffic Shaper', con el que podemos acotar las conexiones
sobre una interfaz a un máximo de 256 bits/s.
Este ancho de banda es muy pobre, y además, solo podemos
establecerlo a la interfaz de forma directa, con lo que _TODAS_
las conexiones a través de esa interfaz veran su velocidad reducida
a 256 bits/s.
Por este motivo descartamos la posibilidad de usar 'Traffic Shaper' ya que no nos
permite jugar con el ancho de banda deseado.
2. La segunda y mas potente se realiza gracias al 'Quality Of Service'
caracteristica que incorpora tambien el kernel de LiNUX, y con el
que podemos controlar el ancho de banda de nuestras conexiones,
pero de una manera mucho mas flexible, de manera que podemos
asignar anchos de banda no solo por IP, sino tambien a nivel
de puertos... con lo que podemos tener toda la libertad del mundo
para configurar nuestras conexiones. Aqui no nos quedamos en
256 bits/s, podemos jugar con todo el ancho de banda de nuestra tarjeta.
Lo que haremos sera configurar el QoS basandonos en el algoritmo
CBQ para implementar un "Traffic Shaper"
De esta manera si que podemos controlar perfectamente nuestras
conexiones, y es el metodo elegido para nuestro proposito.
.- Compilacion del kernel de LiNUX (2.2.14) -.
- Pasos a seguir:
$ cd /usr/src/linux
$ make mrproper
$ make xconfig
[configurandolo en X-Windows]
[En este momento elegir las opciones especificadas abajo]
$ make dep
$ make clean
$ make bzImage
$ make modules
$ make modules_install
[Tras esto se crea la imagen en ./arch/i386/boot]
$ cd arch/i386/boot
$ cp bzImage /boot/nombre_imagen
Ya solo nos queda configurar el arranque de la máquina adecuadamente.
Editamos el fichero /etc/lilo.conf para añadir una nueva entrada con el
nombre_imagen del kernel que acabamos de crear y ejecutamos 'lilo'.
- Opciones del kernel:
Processor type and features -->
Elegir procesador de la máquina
Todas las opciones a 'Si' menos la última
Networking Options -->
[*] IP: advanced router
QoS and/or fair queueing -->
[*] QoS and/or fair queueing CBQ packet scheduler CSZ packet scheduler The simplest PRIO pseudoscheduler RED queue SFQ queue TEQL queue TBF queue
[*] QoS support
[*] Rate estimator
[*] Packet classifier Routing table based classifier Firewall based classifier U32 classifier
<*> Special RSVP classifier
< > Special RSVP classifier for IPv6
[*] Ingres traffic policing
SCSI support -->
[*] No SCSI support
Ethernet (10 or 100 Mbit) -->
[*] Ethernet (10 or 100 Mbit)
[*] 3COM Cards
[*] 3c90x/3c980 B/C Series "Cyclone/Hurricane/Tornado" Support
Appletalk Devices -->
Token Ring Devices -->
WAN Interfaces -->
IrDA Subsystem support -->
ISDN Subsystem -->
Joysticks -->
Video for Linux -->
Sound -->
En estos ocho menus elegir todo NO
Para acceder posteriormente a esta configuración lo grabamos en un
fichero (por ejemplo, config-shaping-2.2.14-5.0)
.- Software necesario .-
A parte de tener el kernel compilado con el soporte necesario necesitamos
de unas aplicaciones que son las encargadas de pasarle al kernel los
parametros necesarios una vez que tenemos compilado a nuestro gusto
el QoS.
El paquete necesario con dichas utilidades puede ser obtenido de
http://www.redhat.com o del CD de dicha distribucion, y los nombres de dichos
paquetes son:
shapecfg-2.2.12-2.i386.rpm
iproute-2.2.4-2.i386.rpm
Una vez obtenidos los paquetes, instalarlos mediante la orden:
Los archivos de configuracion iran en el directorio /etc/sysconfig/cbq/
y sus nombres deben seguir un formato determinado:
NOTA: Cada shaper (tranfico estrangulado) debe ser descrito en un
fichero de configuracion.
cbq-1280.Mi_primer_shaper
^^^ ^^^ ^^^^^^^^^^^^^
| | |____ Nombre para el shaper, cualquier palabra.
| |_________________ ID (0000-FFFF), un buen ID seria el RATE del shaper
|____________________ Siempre debe empezar por "cbq-"
Los ficheros de configuracion describen los parametros del shaper, y
sus direcciones y puertos de origen y destino.
Esta es la minima configuracion, donde:
DEVICE: eth0 - dispositivo donde haremos el control de nuestro trafico
10Mbit - ancho de banda real de la tarjeta
1Mbit - "weight" of :1 class (parent for all shapers for eth0),
as a rule of thumb weight=batdwidth/10.
Ejemplo para una tarjeta de 100Mbit:
DEVICE=eth0,100Mbit,10Mbit
RATE: Velocidad del shaper - Kbit,Mbit o bps (bytes por segundo)
WEIGHT: "weight" del shaper (CBQ class). Al igual que para DEVICE
- approx. RATE/10
PRIO: prioridad del shaper desde 1 hasta 8, donde 1 es la mayor.
Algunos ejemplos:
RULE=10.1.1.0/24:80 - todo el trafico para la red 10.1.1.0 por el
puerto 80 sera shapeado.
RULE=10.2.2.5 - shaper trabaja solo para la IP 10.2.2.5
RULE=:25,10.2.2.128/25:5000 - todo el trafico desde cualquier direccion
por el puerto 25 hacia la las direcciones
10.2.2.128 - 10.2.2.255 y puerto 5000
sera shapeado.
RULE=10.5.5.5:80, - solo se shapeara el trafico proveniente por
el puerto 80 desde la direccion 10.5.5.5
Multiples campos RULE en un fichero de configuracion son permitos,ejemplo:
Todos los shapers solo trabajan para el trafico saliente!
Asi, si queremos construir un shaper bidireccional, debemos setear
la configuracion para ambas tarjetas de red.
Por ejemplo:
--------- 192.168.1.1
BACKBONE -----eth0-| linux |-eth1------*[our client]
---------
Todo el trafico desde el BACKBONE hacia el CLIENTE sera shapeado a 28Kbit
y el trafico desde el CLIENTE hacia el BACKBONE a 128Kbit.
Necesitamos 2 archivos de configuracion:
DEVICE=eth0,10Mbit,1Mbit
RATE=128Kbit
WEIGHT=10Kbit
PRIO=5
RULE=192.168.1.1,
------------------------------------------------
^prestar atencion a la "," - indica direccion ORIGEN!
Con todo esto podemos poner en marcha nuestro Traffic Shaper, decir
que el algoritmo CBQ es un algoritmo que clasifica los paquetes en espera
dentro de una jerarquia de clases 'tipo arbol', los terminales de este
arbol se hayan organizados por algoritmos independientes (llamados
"disciplinas" en este contexto) los cuales podemos elegir de entre
varios algoritmos de colas.
Si vamos a querer cambiar los datos de estos ficheros por medio de un cgi
sería adecuado cambiar los permisos a los ficheros y al directorio
/etc/sysconfig/cbq. Podemos cambiar el grupo a 'nobody' y darle permisos
de escritura.