Si algunos de nuestros foros, manuales, ALDOS, paquetería o proyectos te han resultado de ayuda, apreciaremos mucho nos apoyes con un donativo.

Cómo utilizar CBQ.

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: http://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org

Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2008 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector hace mal uso de éstos.

Introducción.

Acerca de cbq.

CBQ (Class Based Queueing o Encolamiento Basado sobre Clases), es un guión escrito en BASH utilizado para la gestión y control del uso de ancho de banda en GNU/Linux. Fue originalmente creado en 1999 por Pavel Golubev y posteriormente mantenido de 2001 a 2004 por Lubomir Bulej. Utiliza de una forma simplificada los mandatos ip y tc para su funcionamiento y forma parte del paquete iproute, el cual se incluye en las instalaciones básica de la mayor parte de las distribuciones de GNU/Linux.

Comprendiendo la velocidad binaria (bit rate).

El término bit rate se traduce al español como velocidad binaria, tasa de bits o flujo de bits. Corresponde al numero de bits que se transmiten por segundo a través de un sistema de transmisión digital o entre dos dispositivos digitales. En otras palabras, es la velocidad de transferencia de datos.

De acuerdo al Sistema Internacional de Unidades, la unidad con la que se expresa la velocidad binaria (bit rate) es el bit por segundo, es decir bit/s, b/s o bps, donde la b siempre debe escribirse en minúscula para impedir confusión con la unidad byte por segundo (B/s). Los múltiplos para byte aplican de diferente modo que para bit. La unidad byte es igual a 8 bits y a partir de esto se puede utilizar la siguiente tabla:

Tabla de equivalencias.
kbit/s o kbps (kb/s, kilobit/s)1000 bits de por segundo
Mbit/s o Mbps(Mb/s, Megabit/s)1 millón de bits por segundo
Gbit/s o Gbps (Gb/s, Gigabit/s)Mil millones de bits por segundo
byte/s (B/s)8 bits por segundo
kilobyte/s (kB/s, mil bytes)8 mil bits por segundo
megabyte/s (MB/s, un millón de bytes)8 millones de bit por segundo
gigabyte/s (GB/s, mil millones de bytes)8 mil millones de bits

Equipamiento lógico necesario.

CBQ forma parte de la instalación del paquete iproute, mismo que a su vez se instala de modo predeterminado en casi todas las distribuciones de GNU/Linux.

Instalación a través de yum.

Si utiliza CentOS 4 y 5, Red Hat Enterprise Linux 5 o White Box Enterprise Linux 4 y 5, solo se necesita realizar lo siguiente para instalar o actualizar el equipamiento lógico necesario:

yum -y install iproute

Instalación a través de up2date.

Si se utiliza Red Hat™ Enterprise Linux 4, solo bastará realizar lo siguiente para instalar o actualizar el equipamiento lógico necesario:

up2date -i iproute

Preparativos.

Antes de iniciar cualquier configuración, se deben determinarse los valores para los siguientes parámetros. Para construir una regla, se requiere al menos comprender y especificar los valores para los parámetros DEVICE, WEIGHT, RATE y RULE. Las reglas pueden ser tan complejas como la imaginación del administrador lo permita.

Los archivos con las configuraciones se guardan dentro del directorio /etc/sysconfig/cbq/ y deben llevar sl siguiente nomenclatura:

/etc/sysconfig/cbq/cbq-[número-ID-Clase].[nombre]

Donde número-ID-Clase corresponde a un número headecimal de 2 bits dentro del rango 0002-FFFF. Ejemplo: archivo que contiene una clase que controla el tráfico entrante de correo electrónico:

/etc/sysconfig/cbq/cbq-0002.smtp-in

Parámetro DEVICE.

Es un parámetro obligatorio. Se determina los valores con el nombre de la interfaz, ancho de banda y peso de esta interfaz. Este último valor, que es opcional en este parámetro, se calcula dividiendo el ancho de banda de la interfaz entre diez. Por ejemplo, sí se dispone de una interfaz denominada eth0 de 100 Mbit/s, el peso será 10 Mbit/s, de tal modo los valores del parámetro DEVICE, quedarían de la siguiente forma:

DEVICE=eth0,100Mbit,10Mbit

Si se dispone de una interfaz eth0 conectada a un modem ADSL de 2048 kbps de tráfico entrante o de bajada, el peso será de 204 kbps, de tal modo los valores del parámetro DEVICE, quedarían de la siguiente forma:

DEVICE=eth0,2048Kbit,204Kbit

Si se dispone de una interfaz eth0 conectada a un modem ADSL de 256 kbps de tráfico saliente o de subida, el peso será de 25 kbps, de tal modo los valores del parámetro DEVICE, quedarían de la siguiente forma:

DEVICE=eth0,256Kbit,25Kbit

Parámetro de clase RATE.

Es un parámetro obligatorio. Se refiere al ancho de banda a asignar a la clase. El tráfico que pase a través de esta clase será modificado para ajustarse a la proporción definida. Por ejemplo, sí se quiere limitar el ancho de banda utilizado a 10 Mbit/s, el valor de RATE sería 10Mbit, como se muestra a continuación.

RATE=10Mbit

Sí se quiere limitar el ancho de banda utilizado a 1024 kbit/s, el valor de RATE sería 1024Kbit, como se muestra a continuación.

RATE=1024Kbit

Sí se quiere limitar el ancho de banda utilizado a 512 kbit/s, el valor de RATE sería 512Kbit, como se muestra a continuación.

RATE=512Kbit

Parámetro de clase WEIGHT.

Es un parámetro obligatorio. Éste es proporcional al ancho de banda total de la interfaz. Como regla se se calcula dividiendo entre diez el ancho de banda total. Para una interfaz de 2048 kbps, correspondería un valor de 204Kbit:

WEIGHT=204Kbit

Parámetro de clase PRIO.

Es un parámetro opcional que se utiliza para especificar que prioridad tendrá sobre otras reglas de control de ancho de banda. Mientras más alto sea el valor, menos prioridad tendrá sobre otras reglas. Se recomienda utilizar el valor 5 que funcionará para la mayoría de los casos. Ejemplo:

PRIO=5

Parámetro de clase PARENT.

Cuando se utilizan reglas que se requiere estén jerarquizadas, se utiliza para establecer la identidad de clase padre a la que pertenecen. Puede llevar cualquier valor. Cuando se trata de una clase padre, se define junto con el parámetro LEAF con el valor none. En el siguiente ejemplo se establece la identidad 100 en una clase padre.

PARENT=100
LEAF=none

Parámetro de clase LEAF.

Es un parámetro opcional y se utiliza para determinar que política se utilizará para utilizar el ancho de banda de una clase padre.

Si se utiliza el valor tbf, que es el valor predeterminado, se utilizará el algoritmo TBF (Token Bucket Filter), el cual impide que la clase tome ancho de banda de la clase padre.

LEAF=tbf
Parámetros adicionales para algoritmo TBF.
BUFFER
Determina el tamaño máximo de ráfaga (maximal burst size) que la clase puede enviar y puede llevar como parámetro opcional la longitud de los intervalos en bytes. El valor predeterminado es 10Kb/8. es decir, ráfagas de 10Kb en intervalos de 8 bytes.
LEAF=tbf BUFFER=10Kb/8
LIMIT
Determina el tamaño máximo de las reservas (backlog). Si la cola de datos por procesar contiene más de los especificados por LIMIT, los siguientes paquetes que lleguen serán descartados. La longitud de las reservas determina la latencia (tiempo de recuperación de datos) de la cola en caso de presentarse una congestión. El valor predeterminado es 15kb.
LEAF=tbf LIMIT=15kb
PEAK
Determina el pico máximo para una ráfaga de tráfico de corto plazo que una clase puede enviar. Considerando que un ancho de banda de 256 kbps envía 256 Kbit por segundo, en un momento dado se puede dar el caso de el envío de 512 Kbit en 0.50 segundos o 1 Mbit en 0.25 segundos. En el siguiente ejemplo se establece el el pico máximo para ráfagas de 1024 Kbit:
LEAF=tbf PEAK=1024Kbit
MTU
Determina la máxima cantidad de datos que se pueden enviar al mismo tiempo en un medio físico. Es un parámetro obligatorio si se utiliza el parámetro PEAK. En el caso de una interfaz Ethernet, el valor predeterminado es igual al MTU de la propia interfaz (1500).
LEAF=tbf PEAK=1024Kbit MTU=1500

El valor sfq, que corresponde al algoritmo SFQ (Stochastic Fairness Queueing), hace que sea compartido el ancho de banda de la clase padre aproximadamente en la misma proporción de ancho de banda entre anfitriones dentro de la misma clase.

LEAF=sfq

El valor none permite utilizar libremente el ancho de banda disponible, siempre que el valor del parámetro BOUDED sea igual a no. En el siguiente ejemplo se especifica utilizar libremente el ancho de banda disponible:

LEAF=no

Parámetro de clase BOUNDED.

Es un parámetro opcional. Si el valor es yes, que es el valor predeterminado, la clase no tendrá permitido utilizar ancho de banda de la clase padre. Si el valor es no, la clase podrá hacer uso del ancho de banda disponible en la clase padre. Si se establece con valor no, es necesario utilizar none o bien sfq en el parámetro LEAF.

PARENT=100
LEAF=sfq
BOUNDED=no

Parámetro de clase ISOLETED.

Es un parámetro opcional. Si se establece con el valor yes, la clase no prestará ancho de banda a las clases hijas. Si se utiliza el valor no, que es el valor predeterminado, se permitirá prestar el ancho de banda disponible a las clases hijas.

ISOLATED=no

Parámetros de filtración.

Son las reglas de filtración que se utilizan para seleccionar tráfico en cada una de las clases. La sintaxis completa es la siguiente:

RULE=[[saddr[/prefijo]][:puerto[/máscara]],][daddr[/prefijo]][:puerto[/máscara]]

En lo anterior, saddr se refiere a la dirección de origen. daddr se refiere a la dirección de destino.

La sintaxis simplificada es la siguiente, donde todos los valores son opcionales, pero se debe especificar al menos uno:

RULE=IP-origen:puerto-origen,IP-destino:puerto-destino

En general la interpretación sigue cuatro simples principios:

  1. Cualquier dirección IP o red que se coloque antes de la coma se considera dirección IP o red de origen.
  2. Cualquier dirección IP o red que se coloque después de la coma se considera dirección IP o red de destino.
  3. Cualquier puerto antes de la coma se considera el puerto de origen.
  4. Cualquier puerto especificado después de la coma se considera puerto de destino.

Ejemplos.

Selección de todo el tráfico desde cualquier puerto en cualquier red hacia los puertos 25 (SMTP), 465 (SMTPS) y 587 (SMTP Submission) en cualquier red (es decir, controla ancho de banda de correo saliente):

RULE=,:25
RULE=,:465
RULE=,:587

Selección de todo el tráfico desde los puertos 25 (SMTP), 465 (SMTPS) y 587 (SMTP Submission) en cualquier red hacia cualquier puerto en cualquier red (es decir, controla ancho de banda de correo entrante):

RULE=:25,
RULE=:465,
RULE=:587,

Selección de todo el tráfico desde la red 192.168.0.0/24 hacia cualquier puerto en cualquier red:

RULE=192.168.0.0/24,

Selección de todo el tráfico desde cualquier puerto en cualquier red hacia cualquier puerto en la red 192.168.0.0/24:

RULE=,192.168.0.0/24

Selección de todo el tráfico desde cualquier puerto en la red 192.168.0.0/24 hacia el puerto 25 (SMTP) en cualquier red:

RULE=192.168.0.0/24,:25

Selección de todo el tráfico desde el puerto 25 (SMTP) en la red 192.168.0.0/24 hacia cualquier puerto en cualquier red:

RULE=192.168.0.0/24:25,

Selección de todo el tráfico desde el puerto 25 (SMTP) en la red 192.168.0.0/24 hacia el puerto 25 (SMTP) en cualquier red:

RULE=192.168.0.0/24:25,:25

Selección de todo el tráfico desde el puerto 25 (SMTP) en cualquier red hacia cualquier puerto en la red 192.168.0.0/24:

RULE=:25,192.168.0.0/24

Selección de todo el tráfico desde el puerto 25 (SMTP) en cualquier red hacia el puerto 25 (SMTP) en la red 192.168.0.0/24:

RULE=:25,192.168.0.0/24:25

Selección de todo el tráfico desde el puerto 80 en cualquier red hacia cualquier puerto de cualquier red:

RULE=:80,

Selección de todo el tráfico desde cualquier puerto en el anfitrión 201.161.1.226 hacia cualquier puerto en cualquier red:

RULE=201.161.1.226,

Selección de todo el tráfico desde puerto 80 en el anfitrión 201.161.1.226 hacia cualquier puerto en cualquier red:

RULE=201.161.1.226:80,

Selección de todo el tráfico desde el puerto 80 (HTTP) en cualquier red hacia la red 192.168.0.0/24:

RULE=:80,192.168.0.0/24

Selección de todo el tráfico desde los puerto 20 (FTP-DATA), 21 (FTP) y 80 (HTTP) en cualquier red hacia la red 192.168.0.0/24:

RULE=:20,192.168.0.0/24
RULE=:21,192.168.0.0/24
RULE=:80,192.168.0.0/24

Selección de todo el tráfico desde de los puertos 20 (FTP-DATA), 21 (FTP) y 80 (HTTP) en el anfitrión 201.161.1.226 hacia la red 192.168.0.0/24:

RULE=201.161.1.226:20,192.168.0.0/24
RULE=201.161.1.226:21,192.168.0.0/24
RULE=201.161.1.226:80,192.168.0.0/24

Procedimientos.

Para poder configurar el uso de ancho de banda se requiere determinar primero lo siguiente:

  • ¿Cual es el ancho de banda de tráfico entrante (de bajada) de la interfaz pública?
  • ¿Cual es el ancho de banda de tráfico saliente (de subida) de la interfaz pública?
  • ¿Qué servicios se van a controlar?
  • ¿Cuanto ancho de banda para tráfico entrante y saliente se va a destinar a cada servicio?

Considerando el siguiente escenario:

  • Servidor con un cortafuegos y un NAT compartiendo el acceso hacia Internet.
  • Enlace ADSL de 2048 kbps de tráfico entrante y 256 kbps de tráfico saliente, a través de la interfaz eth0.
  • Red local 192.168.0.0/24 accede desde la interfaz eth1.
  • Se quiere gestionar el uso de ancho de banda para SMTP, POP3, IMAP, HTTP, HTTPS, FTP y SSH/SFTP.
  • Al repartir el ancho de banda, se el 50% del ancho de banda de entrada a HTTP y HTTPS y se dará el 50% del ancho de banda de subida a los servicios relacionados con el correo electrónico.

Como ejemplo, se asignarán los siguientes anchos de banda para cada servicio específicado.

Servicios Puertos Tráfico entrante Tráfico saliente
Correo electrónico:
SMTP, POP3 e IMAP
25, 465, 587, 110, 143, 993, 995 512Kbit 128Kbit
HTTP y HTTPS 80, 443 1024Kbit 64Kbit
FTP y SSH/SFTP 20, 21, 22 256Kbit 64Kbit

CBQ sin compartir ancho de banda entre clases.

En el ejemplo los anchos de banda se están asignando pensando en que se hará uso de todos los servicios de forma simultánea y que se quiere que cada servicio respete el ancho de banda de los otros, es decir, sin prestar ancho de banda de una clase a otra.

Con la finalidad de facilitar la organización, se recomienda crear archivos independientes para cada política. Es decir, destinar un archivo para todo lo relacionado con correo, otro para lo relacionado con HTTP/HTTPS y otro relacionado con FTP.

Contenido de archivo /etc/sysconfig/cbq/cbq-0002.smtp-in:
DEVICE=eth0,2048Kbit
RATE=512Kbit
WEIGHT=204Kbit
PRIO=5
RULE=:25,192.168.0.0/24
RULE=:465,192.168.0.0/24
RULE=:587,192.168.0.0/24
RULE=:110,192.168.0.0/24
RULE=:143,192.168.0.0/24
RULE=:993,192.168.0.0/24
RULE=:995,192.168.0.0/24
Contenido de archivo /etc/sysconfig/cbq/cbq-0003.web-in:
DEVICE=eth0,2048Kbit
RATE=1024Kbit
WEIGHT=204Kbit
PRIO=5
RULE=:80,192.168.0.0/24
RULE=:443,192.168.0.0/24
Contenido de archivo /etc/sysconfig/cbq/cbq-0005.ftp-in:
DEVICE=eth0,2048Kbit
RATE=265Kbit
WEIGHT=204Kbit
PRIO=5
RULE=:20,192.168.0.0/24
RULE=:21,192.168.0.0/24
RULE=:22,192.168.0.0/24
Contenido de archivo /etc/sysconfig/cbq/cbq-0002.smtp-out:
DEVICE=eth0,2048Kbit
RATE=128Kbit
WEIGHT=204Kbit
PRIO=5
RULE=192.168.0.0/24,:25
RULE=192.168.0.0/24,:465
RULE=192.168.0.0/24,:587
RULE=192.168.0.0/24,:110
RULE=192.168.0.0/24,:143
RULE=192.168.0.0/24,:993
RULE=192.168.0.0/24,:995
Contenido de archivo /etc/sysconfig/cbq/cbq-0004.web-out:
DEVICE=eth0,2048Kbit
RATE=64Kbit
WEIGHT=204Kbit
PRIO=5
RULE=192.168.0.0/24,:80
RULE=192.168.0.0/24,:443
Contenido de archivo /etc/sysconfig/cbq/cbq-0006.ftp-out:
DEVICE=eth0,2048Kbit
RATE=64Kbit
WEIGHT=204Kbit
PRIO=5
RULE=192.168.0.0/24,:20
RULE=192.168.0.0/24,:21
RULE=192.168.0.0/24,:22

CBQ compartiendo ancho de banda entre clases.

En el ejemplo los anchos de banda se están asignando pensando en que se hará uso de todos los servicios de forma simultánea y que se quiere que cada servicio preste ancho de banda sin utilizar desde una clase hacia otra. Se utilizará a las clases con mayor ancho de banda disponible como las clases padre.

Con la finalidad de facilitar la organización, se recomienda crear archivos independientes para cada política. Es decir, destinar un archivo para todo lo relacionado con correo, otro para lo relacionado con HTTP/HTTPS y otro relacionado con FTP.

Contenido de archivo /etc/sysconfig/cbq/cbq-0002.smtp-in:
DEVICE=eth0,2048Kbit
RATE=512Kbit
WEIGHT=204Kbit
PRIO=5
PARENT=100
LEAF=sfq
RULE=:25,192.168.0.0/24
RULE=:465,192.168.0.0/24
RULE=:587,192.168.0.0/24
RULE=:110,192.168.0.0/24
RULE=:143,192.168.0.0/24
RULE=:993,192.168.0.0/24
RULE=:995,192.168.0.0/24
Contenido de archivo /etc/sysconfig/cbq/cbq-0003.web-in:
DEVICE=eth0,2048Kbit
RATE=1024Kbit
WEIGHT=204Kbit
PRIO=5
PARENT=100
LEAF=no
BOUNDED=no
ISOLATED=no
RULE=:80,192.168.0.0/24
RULE=:443,192.168.0.0/24
Contenido de archivo /etc/sysconfig/cbq/cbq-0005.ftp-in:
DEVICE=eth0,2048Kbit
RATE=265Kbit
WEIGHT=204Kbit
PRIO=5
PARENT=100
LEAF=sfq
RULE=:20,192.168.0.0/24
RULE=:21,192.168.0.0/24
RULE=:22,192.168.0.0/24
Contenido de archivo /etc/sysconfig/cbq/cbq-0002.smtp-out:
DEVICE=eth0,2048Kbit
RATE=128Kbit
WEIGHT=204Kbit
PRIO=5
PARENT=200
LEAF=no
BOUNDED=no
ISOLATED=no
RULE=192.168.0.0/24,:25
RULE=192.168.0.0/24,:465
RULE=192.168.0.0/24,:587
RULE=192.168.0.0/24,:110
RULE=192.168.0.0/24,:143
RULE=192.168.0.0/24,:993
RULE=192.168.0.0/24,:995
Contenido de archivo /etc/sysconfig/cbq/cbq-0004.web-out:
DEVICE=eth0,2048Kbit
RATE=64Kbit
WEIGHT=204Kbit
PRIO=5
PARENT=200
LEAF=sfq
RULE=192.168.0.0/24,:80
RULE=192.168.0.0/24,:443
Contenido de archivo /etc/sysconfig/cbq/cbq-0006.ftp-out:
DEVICE=eth0,2048Kbit
RATE=64Kbit
WEIGHT=204Kbit
PRIO=5
PARENT=200
LEAF=sfq
RULE=192.168.0.0/24,:20
RULE=192.168.0.0/24,:21
RULE=192.168.0.0/24,:22

Iniciar, detener y reiniciar el servicio cbq.

El guión de inicio de cbq está instalado como /sbin/cbq. Es necesario copiar este archivo dentro de /etc/init.d/ y tratarlo igual que cualquier otro servicio del sistema.

cp -a /sbin/cbq /etc/init.d

Para probar que las clases están correctas antes de utilizar éstas, puede recurrir a:

service cbq compile

Para ejecutar por primera vez el servicio cbq, utilice:

service cbq start

Para hacer que los cambios hechos tras modificar la configuración surtan efecto, utilice:

service cbq restart

Para detener el servicio cbq y eliminar de memoria todas las reglas utilice:

service cbq stop

Para supervisar las estadísticas de tráfico gestionado a través de cbq utilice:

service cbq stats

Agregar el servicio cbq al arranque del sistema.

Para hacer que el servicio de cbq esté activo con el siguiente inicio del sistema, en todos los niveles de ejecución (2, 3, 4 y 5), se utiliza lo siguiente:

chkconfig cbq on

Si algunos de nuestros foros, manuales, ALDOS, paquetería o proyectos te han resultado de ayuda, apreciaremos mucho nos apoyes con un donativo.

Última Edición: 03/06/2008, 16:18|Hits: 25,342 Ver la versión para imprimir