Você está na página 1de 5

Controle de banda no CentOS usando o CBQ

Introduo Instalando pacotes necessarios


Comandos bsicos e localizao dos arquivos de conf Criando as regras no arquivo /etc/sysconfing/cbq Configurando a inicializao automatica do sistema

Introduo
O cbq se baseia em uma regra de classificao e priorizao de pacotes chamada Class Based Queue (CBQ), onde podemos criar vrias classes, cada uma com um limite de banda. Tambm podemos criar classes "pais e filhas", formando uma arvore. Com isto possivel reservar, por exemplo, 512Kb/s para uma classe e ligar a ela uma de 256Kb/s para ftp com a opo de emprestar banda. Isto far com que os downloads no ultrapassem 256Kb/s e tenham sua velocidade forada a ser diminuida se a classe pai precisar de mais de 256Kb/s. Basicamente o que o cbq faz controlar a entrada e a saida das placas de rede de uma mquina. Dessa forma podemos at colocar mquinas intermedirias em uma rede fazendo forward de pacotes com prioridades distintas. Como por exemplo, definir velocidades mximas para cada cliente ligado a um roteador (Linux claro). (Resumo retirado do Underlinux) Consegui fazer o CBQ, funcionar no Centos, usando um pacote nativo do Conectiva 10, pois no tem pacote nativo para o Centos, Fedora, etc.

Instalando pacotes necessrios


[root@whbrasil ~]# wget http://incubadora.fapesp.br/frs/download.php/914/cbq-0.7.222351cl.noarch.rpm [root@whbrasil ~]# rpm -ivh cbq-0.7.2-22351cl.noarch.rpm aviso: cbq-0.7.2-22351cl.noarch.rpm: V3 DSA signature: NOKEY, key ID 99807190 A preparar... ########################################### [100%] 1:cbq ########################################### [100%] [root@whbrasil ~]# apt-get install iproute [root@whbrasil ~]rpm -qa iproute iproute-2.6.9-3 [root@whbrasil ~]#

Comandos bsicos e localizao dos arquivos de conf


Diferente dos demais pacotes em que usamos os comandos: service squid restart | start | status| stop| (Squid citado apenas como exemplo) No caso do Cbq usamos : service cbq start | stats | restart | stop | compile Note que s muda o status = stats e acrescenta o compile Os arquivos de configurao do cbq, por padro estaro em : /etc/sysconfig/cbq os nomes dos arquivos sempre terao o seguinte modelo: cbq-0002.descricao_da_classe. A contagem deve comear em 2 e a numerao deve ser crescente e em hexadecimal, portanto, depois do nove ao invs de 10 temos A, B, C, D, E, F, e s depois o 10.

Esses so os arquivos que no podem faltar, em uma regra do CBQ


DEVICE=(int-nome),(banda),(peso) RATE=(velocidade) WEITH=(peso/10) PRIO=(prioridade) RULE=(ip ou rede a ser controlada) Em casa regra, sempre teremos 2 arquivos, 1 arquivo responsavel por controle de download, e outro por upload Exemplo:
cbq-0002.downloads cbq-0002.upload DEVICE=eth1,100Mbit,10Mbit DEVICE=eth1,100Mbit,10Mbit RATE=2Mbit RATE=300Kbit WEIGHT=200Kbit WEIGHT=30Kbit PRIO=5 PRIO=5 RULE=192.168.200.99 RULE=192.168.200.99, RULE=192.168.200.200 RULE=192.168.200.200, RULE=192.168.200.102 RULE=192.168.200.102, BOUNDED=yes BOUNDED=yes ISOLATED=yes ISOLATED=yes DEVICE="nome da interface que vai para o cliente","banda","banda/10" RATE="velocidade" WEITH="velocidade/10" PRIO="prioridade (5 um valor excelente)" RULE="ip ou rede a ser controlado" | BOUNDED=yes/no se setado para yes o usrio estar limitado mesmo que o link esteja com folga. ISOLATED=yes/no se setado para yes indica que o cliente no poder emprestar banda pra ninguem. TIME="hora inicial"-"hora final";"velocidade"/"velocidade/10" Exemplo prtico: TIME=14:35-08:00;200Kbit/20Kbit

Caso queira emprestar, ou usar banda, caso esteja livre, use "no" nas opes: BOUNDED=no ISOLATED=no Note que a unica coisa que diferencia ambos so o nome, e uma virgula a frente do ip do cbq-0002.upload. Essa virgula representa o upload, portanto no podemos esquecer dela. Explicando os nomes e funes do arquivo:

Neste exemplo estou dizendo para o CBQ, que a placa de rede que sai internet do meu servidor eth1, que minha rede de 100mb, que tenho 2 mb de download, 300kb, de uploade estou liberando tudo para esses 3 ips, que seguem acima. Agora vamos criar uma regra limitando, a banda, com 64 kbps de down, e 32 de up, para o ip 192.168.200.101
[root@whbrasil ~]# cd /etc/sysconfig/cbq/ [root@whbrasil cbq]# vi cbq-0002-downloads.teste [root@whbrasil cbq]# vi cbq-0002upload.teste

Depois de criarmos esses 2 arquivos, ficar assim: Down ( 64 Kbit) DEVICE=eth1,100Mbit,10Mbit RATE=64Kbit WEIGHT=6Kbit PRIO=5 RULE=192.168.200.101 BOUNDED=yes ISOLATED=yes Up ( 32 Kbit) DEVICE=eth1,100Mbit,10Mbit RATE=32Kbit WEIGHT=3Kbit PRIO=5 RULE=192.168.200.101, BOUNDED=yes ISOLATED=yes Aqui entao liberamos 64 para down, e 32 para up, e estamos dizendo que ele nao empresta banda pra ninguem, e nao pega emprestado de ninguem, regra criada, em servidor, que tem saida de internet pela eth1 Outro detalhe importante, 1 ip nunca pode estar em 2 regras, ou seja caso o ip que deseja limitar a banda esteja em alguma outra regra, retire-o e ai sim, o acrescente na outra regra Nunca se esqueam da virgula, no upload, pois ela quem diz pro scritp que esse o up! Quando montamos nossas regras, o procedimento para colocar em funcionamento o seguinte:
[root@whbrasil ~]# service cbq compile tc qdisc del dev eth1 root tc qdisc add dev eth1 root handle 1 cbq bandwidth 100Mbit avpkt 1000 cell 8 tc class change dev eth1 root cbq weight 10Mbit allot 1514 tc class add dev eth1 parent 1: classid 1:2 cbq bandwidth 100Mbit rate 200Kbit weight 20Kbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded isolated tc qdisc add dev eth1 parent 1:2 handle 2 tbf rate 200Kbit buffer 10Kb/8 limit 15Kb mtu 1500 tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip dst 192.168.200.200 classid 1:2 tc class add dev eth1 200Kbit weight 20Kbit bounded isolated tc qdisc add dev eth1 10Kb/8 limit 15Kb mtu parent 1: classid 1:2 cbq bandwidth 100Mbit rate prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 parent 1:2 handle 2 tbf rate 200Kbit buffer 1500

tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 192.168.200.200 classid 1:2 tc class add dev eth1 parent 1: classid 1:2 cbq bandwidth 100Mbit rate 2Mbit weight 200Kbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded isolated tc qdisc add dev eth1 parent 1:2 handle 2 tbf rate 2Mbit buffer 10Kb/8 limit 15Kb mtu 1500 tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip dst 192.168.200.99 classid 1:2 tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip dst 192.168.200.100 classid 1:2 tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip dst 192.168.200.101 classid 1:2 tc class add dev eth1 parent 1: classid 1:2 cbq bandwidth 100Mbit rate 300Kbit weight 30Kbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded isolated tc qdisc add dev eth1 parent 1:2 handle 2 tbf rate 300Kbit buffer 10Kb/8 limit 15Kb mtu 1500 tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 192.168.200.99 classid 1:2 tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 192.168.200.100 classid 1:2 tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 192.168.200.101 classid 1:2

A tela a ser retornada deve ser semelhante a essa. Caso retorne alguma tela como mostra o exemplo abaixo:

tc qdisc del dev eth0 root tc qdisc add dev eth0 root handle 1 cbq bandwidth 10Mbit avpkt 1000 cell 8 tc class change dev eth0 root cbq weight 1Mbit allot 1514 **CBQ: class tc qdisc del tc qdisc del tc qdisc del ID of cbq-0000-estacao1.in must be in range <0002-FFFF>! dev lo root dev eth0 root dev sit0 root

Verifique as regras criadas, pois o erro acima, informa, que o nome esta incorreto: cbq0000-estacao1 = cbq-0002-estacao1 O nome deve ser por padrao cbq-0002.nomedoarquivo.outronome ou cbq-0002nomedoarquivo-outronome Bom, conseguindo compilar sem erro, vamos startar, o nosso CBQ.
[root@centosbr cbq]# service cbq start [root@centosbr cbq]#

Simplesmente ir para linha de baixo, sem nenhuma mensagem. Agora vamos ver como est rodando o CBQ
[root@centosbr cbq]# service cbq stats ### eth0: queueing disciplines qdisc pfifo_fast 0: bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 20191138 bytes 116190 pkts (dropped 0, overlimits 0 requeues 0) ### eth1: queueing disciplines qdisc cbq 1: Sent 103345 borrowed 0 qdisc tbf 2: Sent 103135 rate 100Mbit (bounded,isolated) prio no-transmit bytes 199 pkts (dropped 5, overlimits 261 requeues 0) overactions 0 avgidle 81 undertime 0 parent 1:2 rate 200Kbit burst 10Kb lat 200.0ms bytes 194 pkts (dropped 5, overlimits 386 requeues 0)

### eth1: traffic classes class cbq 1: root rate 100Mbit (bounded,isolated) prio no-transmit Sent 210 bytes 5 pkts (dropped 0, overlimits 0 requeues 0) borrowed 0 overactions 0 avgidle 81 undertime 0 class cbq 1:2 parent 1: leaf 2: rate 200Kbit (bounded,isolated) prio 5 Sent 104351 bytes 202 pkts (dropped 5, overlimits 0 requeues 0) borrowed 0 overactions 0 avgidle 676890 undertime 0 class tbf 2:1 parent 2: ### eth1: filtering rules filter parent 1: protocol ip pref 100 u32 filter parent 1: protocol ip pref 100 u32 fh 800: ht divisor 1 filter parent 1: protocol ip pref 100 u32 fh 800::800 order 2048 ht 800 bkt 0 flowid 1:2 (rule hit 211 success 0) match c0a8c8c8/ffffffff at 16 (success 0 ) filter parent 1: protocol ip pref 100 u32 fh 800::801 order 2049 ht 800 bkt 0 flowid 1:2 (rule hit 211 success 0) match c0a8c8c8/ffffffff at 12 (success 0 ) filter parent 1: protocol ip pref 100 u32 fh 800::802 order 2050 ht 800 bkt 0 flowid 1:2 (rule hit 211 success 209) match c0a8c863/ffffffff at 16 (success 209 ) filter parent 1: protocol ip pref 100 u32 fh 800::803 order 2051 ht 800 bkt 0 flowid 1:2 (rule hit 2 success 2) match c0a8c864/ffffffff at 16 (success 2 ) filter parent 1: protocol ip pref 100 u32 fh 800::804 order 2052 ht 800 bkt 0 flowid 1:2 (rule hit 0 success 0) match c0a8c865/ffffffff at 16 (success 0 ) filter parent 1: protocol ip pref 100 u32 fh 800::805 order 2053 ht 800 bkt 0 flowid 1:2 (rule hit 0 success 0) match c0a8c863/ffffffff at 12 (success 0 ) filter parent 1: protocol ip pref 100 u32 fh 800::806 order 2054 ht 800 bkt 0 flowid 1:2 (rule hit 0 success 0) match c0a8c864/ffffffff at 12 (success 0 ) filter parent 1: protocol ip pref 100 u32 fh 800::807 order 2055 ht 800 bkt 0 flowid 1:2 (rule hit 0 success 0) match c0a8c865/ffffffff at 12 (success 0 ) [root@centosbr cbq]#

key key key key key key key key

Você também pode gostar