Limitando del ancho de banda con CBQ vs P2P

Escrito por Domingo Varela el 08 Abril 2008.

Uno de los recursos mas importantes cuando se tiene un servicio de Internet es el consumo de ancho de banda, para ello es necesario tomar ciertas politicas que nos llevara a la administracion de las QoS. En un servidor GNU/Linux podemos limitar el ancho de banda de las descargas o del trafico entrante y de como administrar la conexion a internet para que sea mas eficiente.

Aqui proporcionaremos de manera sencilla como limitar el trafico entrante evitando así que los usuarios de nuestra LAN consuman todo el ancho de banda de nuestra conexión a Internet.

Esto resulta útil cuando nuestra conexión es lenta o nuestros usuarios suelen descargar toneladas de mp3s, archivos en formato iso, inclusive las últimas distribuciones de Linux.

Supongamos que tenemos un enlace sea cual sea (Ds0,E1 o 2 E1’s) y que asu vez una serie de redes privadas con 60 AP’s. Nuestro GW es un GNU/Linux y por ende debemos de tener un buen plan de “distribucion” y/o “prioridad” para distribuir el ancho de banda.

Aqui se explicara como usar el script CBQ que Linux lo incluye por default por lo tanto no se hace ningún cambio adicional al kernel como es en el caso del traffic shaper (Que solo podra ayudarnos a configurar una interface a limitar, no por IP como es el caso de CBQ).

CBQ es mas poderoso de lo que creemos, con este podemos controlar puertos, determinar el horario especifico para usar el ancho de banda a ser utilizado, compartirlo y controlar programas que consumen demasiado ancho de banda por ejemplo (iMesh, Edonkey, Morpheous, Audiogalaxy, etc).

Se sabe que CBQ trabaja con archivos de configuración que se localizan en el directorio /etc/sysconfig/cbq. Los archivos de configuración se tienen que llamar cbq-X.nombre donde x es un numero en hexadecimal de 4 digitos que indica el orden de arranque respecto a los demás archivos de configuración (hay uno por servicio normalmente).

Los archivos de configuración deberan de tener un formato definido, por ejemplo:

  • cbq-0001.ftp-sedecap, download
  • cbq-0002.http-cobaep, download
  • cbq-0128.campus.backbone-client, download
  • cbq-0129.client-backbone, upload

donde cada archivo de configuración debe tener las siguientes reglas obligatorias:

DEVICE=Interfaz,Velocidad-Interfaz,Peso
RATE=velocidad
WEITH=peso/10
PRIO=prioridad
RULE=ip o red a ser controlada

En el caso de que tengamos 20 redes privadas en un solo gateway y queremos darle solo 40 Kbps de upload, armamos la configuracion, el rate, el weight, etc y colocaremos 192.168.0.0/24

Parámetro DEVICE
DEVICE=Interfaz,Velocidad-Interfaz,Peso

Ejemplo:
DEVICE=eth0,10Mbit,1Mbit

Interfaz: Nombre de la Interfaz eth0, eth1, ppp0, wvlan0…
Velocidad: Es la velocidad del dispositivo

Ejemplo:
Ethernet 10Mbit o 100 Mbit…

Peso: Es un parámetro de ajuste que debera ser proporcional a la Velocidad-Interfaz, siempre vamos a darle el 10%.

Parametro RATE
Velocidad

Ejemplo:
RATE=5Mbit

Velocidad-Interfaz, podemos usar Kbit, Mbit o Mbps.

Parametro WEIGHT
WEIGHT=(peso/10)
Ejemplo:
WEIGHT=500Kbit

Otro parámetro que debe ser proporcional a la Velocidad-Interfaz.
Peso = (Velocidad-Interfaz) / 8
Parametro PRIO
PRIO=(1-8)
Ejemplo: PRIO=5

Prioridad del tráfico para la clase, cuando mayor sea el número, menor es la prioridad, la prioridad 5 es un valor excelente, de hecho, la última versión de CBQ.INIT viene con prioridad 5 por defecto.

Parámetro RULE
RULE=[[saddr[/prefix]][:port],][daddr[/prefix]][:port]

Los parámetros anteriores hacen un filtro para el trafico de cada una de las clases, podemos usar múltiplos compuestos de reglas de archivos de configuración.

Por ejemplo

  • RULE=10.1.1.0/24:80 selecciona el trafico que va al puerto 80 de la red 10.1.1.0
  • RULE=10.2.2.5 selecciona todo el trafico del host 10.2.2.5
  • RULE=10.2.2.5:20/0xfffe selecciona el trafico que va a los puertos 20 y 21 en el host 10.2.2.5 (¿alguien lo entiende?)
  • RULE=:25,10.2.2.128/26:5000 selecciona el trafico que viene desde cualquier ip en el puerto 25 al puerto 5000 de la red 10.2.2.128.
  • RULE=10.5.5.5:80 Selecciona el trafico que viene del puerto 80 del host 10.5.5.5

Parámetro TIME
Este parámetro limita el acceso en horarios predeterminados:
TIME=(hora inicial)-(hora final);(velocidad)/(velocidad/10)

Por ejemplo:
TIME=18:00-06:00;256Kbit/25Kbit

Otros parámetros:
BOUNDED: Si esta definido como ‘yes’ el shaper, sera mantenido siempre que haya ancho de banda disponible.

ISOLATED: Si esta definido como ‘yes’ el shaper NO tomara ancho de banda compartido.
EJEMPLOS:

DEVICE=eth0,10Mbit,1Mbit
RATE=128Kbit
WEIGHT=10Kbit
PRIO=5
RULE=192.128.1.0/24

En este ejemplo, dice que el tráfico de la interface eth0 es de 10 Mbit, a través de la red 192.168.1.0, que a su vez, será procesado con prioridad 5 a través de un shaping de 128 Kbit.

Nótese que con este archivo de configuración SOLO estamos limitando el ancho de banda de salida. Para limitar el ancho de banda en los dos sentidos, debemos configurar, la otra interface….

DEVICE=eth1,10Mbit,1Mbit
RATE=28Kbit
WEIGHT=2Kbit
PRIO=5
RULE=192.168.1.0/24

Ejemplos Reales: Chulo

Eth0,es mi conexion a internet
Eth1, es mi LAN

Aqui anexo los archivos de configuración para los diferentes servicios que se tienen en la Universidad, estos archivos estan situados en el directorio /etc/sysconfig/cbq y el script se puede bajar de aqui o si lo prefiere directamente instalar el paquete iproute.
Archivos de SALIDA, Tarjeta ETH0, que esta conectado a Internet

#cbq-0003.Web_Out_eth0_256K
#
DEVICE=eth0,10Mbit,1Mbit # Interface,Vel-Interface,Vel-Interface/8
RATE=256Kbit #Velocidad
WEIGHT=32Kbit #Velocidad / 8
PRIO=5 #Prioridad 1-8, donde el 8 es mas baja
RULE=,:80
RULE=,201.151.249.101
BOUNDED=yes
ISOLATED=yes
# ——————-

#cbq-0004.Correo_Out_eth0_256K
#
DEVICE=eth0,10Mbit,1Mbit # Interface,Vel-Interface,Vel-Interface/8
RATE=256Kbit #Velocidad
WEIGHT=32Kbit #Velocidad / 8
PRIO=5 #Prioridad 1-8, donde el 8 es mas baja
RULE=,:25
RULE,:110
RULE=,80
RULE=,:143
RULE=,:22
RULE=,53
RULE=,201.151.249.98
BOUNDED=yes
ISOLATED=yes
# ——————-

#cbq-0005.P2P_Out_eth0_15K
#
DEVICE=eth1,10Mbit,1Mbit # Interface,Vel-Interface,Vel-Interface/8
RATE=15Kbit #Velocidad
WEIGHT=1Kbit #Velocidad / 8
PRIO=2 #Prioridad 1-8, donde el 8 es mas baja
TIME=01:00-07:59;110Kbit/11Kbit
RULE=,:21
RULE=,201.151.249.100
RULE=,:1214
RULE=,:4661
RULE=,:4662
RULE=,:4665
RULE=,:4666
RULE=,:4667
RULE=,:4668
RULE=,:4669
RULE=,:4610
RULE=,:41000
RULE=,:41001
RULE=,:41002
RULE=,:41003
RULE=,:41004
RULE=,:41005
RULE=,:41006
RULE=,:41007
RULE=,:41008
RULE=,:41009
RULE=,:41010
RULE=,:41011
RULE=,:41012
RULE=,:41013
RULE=,:41014
RULE=,:41015
RULE=,:41016
RULE=,:41017
RULE=,:41018
RULE=,:41019
RULE=,:41020
RULE=,:41021
RULE=,:41022
RULE=,:41023
RULE=,:41024
RULE=,:41025
RULE=,:41026
RULE=,:41027
RULE=,:41028
RULE=,:41029
RULE=,:41030
BOUNDED=yes
ISOLATED=yes
# ——————-

Archivos de ENTRADA, Tarjeta ETH1, que esta conectado a la LAN

#cbq-0006.P2P_In_eth1_15K
#
DEVICE=eth1,10Mbit,1Mbit # Interface,Vel-Interface,Vel-Interface/8
RATE=15Kbit #Velocidad
WEIGHT=1Kbit #Velocidad / 8
PRIO=3 #Prioridad 1-8, donde el 8 es mas baja
#Windows Media Player.
RULE=:1755,192.168.1.0/24
#Real Player uses TCP port 554, for UDP it uses different ports,
#but generally RealAudio in UDP doesn’t consume much bandwidth.
RULE=:554,192.168.1.0/24
RULE=:7070,192.169.1.0/24
#Napster uses ports 6699 and 6700, maybe some other?
RULE=:6699,192.168.1.0/24
RULE=:6700,192.168.1.0/24
#Audiogalaxy uses ports from 41000 to as high as probably 41900,
#there are many of them, so keep in mind I didn’t list all of
#them here. Repeating 900 nearly the same lines would be of course
#pointless. We will simply cut out ports 410031-41900 using
#ipchains or iptables.
RULE=:41000,192.168.1.0/24
RULE=:41001,192.168.1.0/24
RULE=:41000,192.168.1.0/24
RULE=:41001,192.168.1.0/24
RULE=:41002,192.168.1.0/24
RULE=:41003,192.168.1.0/24
RULE=:41004,192.168.1.0/24
RULE=:41005,192.168.1.0/24
RULE=:41006,192.168.1.0/24
RULE=:41007,192.168.1.0/24
RULE=:41008,192.168.1.0/24
RULE=:41009,192.168.1.0/24
RULE=:41010,192.168.1.0/24
RULE=:41011,192.168.1.0/24
RULE=:41012,192.168.1.0/24
RULE=:41013,192.168.1.0/24
RULE=:41014,192.168.1.0/24
RULE=:41015,192.168.1.0/24
RULE=:41016,192.168.1.0/24
RULE=:41017,192.168.1.0/24
RULE=:41018,192.168.1.0/24
RULE=:41019,192.168.1.0/24
RULE=:41020,192.168.1.0/24
RULE=:41021,192.168.1.0/24
RULE=:41022,192.168.1.0/24
RULE=:41023,192.168.1.0/24
RULE=:41024,192.168.1.0/24
RULE=:41025,192.168.1.0/24
RULE=:41026,192.168.1.0/24
RULE=:41027,192.168.1.0/24
RULE=:41028,192.168.1.0/24
RULE=:41029,192.168.1.0/24
RULE=:41030,192.168.1.0/24
RULE=:41030,192.168.1.0/24
#Some clever users can connect to SOCKS servers when using Napster,
#Audiogalaxy etc.; it’s also a good idea to do so
#when you run your own SOCKS proxy
RULE=:1080,192.168.1.0/24
#Add any other ports you want; you can easily check and track
#ports that programs use with IPTraf
#RULE=:port,192.168.1.0/24
BOUNDED=yes
ISOLATED=yes
# ——————-

#cbq-0007.PROXY_In_eth1_35K
#
DEVICE=eth1,10Mbit,1Mbit # Interface,Vel-Interface,Vel-Interface/8
RATE=35Kbit #Velocidad
WEIGHT=3Kbit #Velocidad / 8
PRIO=2 #Prioridad 1-8, donde el 8 es mas baja
RULE=:8080,192.168.1.248
BOUNDED=yes
ISOLATED=yes
# ——————-

#cbq-0008.FTP_In_eth1_15K
#
DEVICE=eth1,10Mbit,1Mbit # Interface,Vel-Interface,Vel-Interface/8
RATE=15Kbit #Velocidad
WEIGHT=1Kbit #Velocidad / 8
PRIO=5 #Prioridad 1-8, donde el 8 es mas baja
RULE=:20,192.168.1.0/24
RULE:21,192.168.1.0/24
BOUNDED=yes
ISOLATED=yes
# ——————-

Posted by: Lic. Domingo Varela Y.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: