Bienvenido(a) a Alcance Libre 05/09/2025, 22:50
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.
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.
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:
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 |
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.
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
|
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
|
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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:
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 |
Para poder configurar el uso de ancho de banda se requiere determinar primero lo siguiente:
Considerando el siguiente escenario:
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 |
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
|
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
|
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 |
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 |
Última Edición: 03/06/2008, 16:18| Hits: 32,537