Controle de banda no CentOS usando o CBQ

Introdução Instalando pacotes necessarios
Comandos básicos e localização dos arquivos de conf Criando as regras no arquivo /etc/sysconfing/cbq Configurando a inicialização automatica do sistema

Introdução
O cbq se baseia em uma regra de classificação e priorização de pacotes chamada Class Based Queue (CBQ), onde podemos criar várias classes, cada uma com um limite de banda. Também 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 opção de emprestar banda. Isto fará com que os downloads não ultrapassem 256Kb/s e tenham sua velocidade forçada 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 máquina. Dessa forma podemos até colocar máquinas intermediárias em uma rede fazendo forward de pacotes com prioridades distintas. Como por exemplo, definir velocidades máximas 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 não tem pacote nativo para o Centos, Fedora, etc.

Instalando pacotes necessários
[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 ~]#

"banda". ou usar banda.10Mbit RATE=2Mbit RATE=300Kbit WEIGHT=200Kbit WEIGHT=30Kbit PRIO=5 PRIO=5 RULE=192."velocidade"/"velocidade/10" Exemplo prático: TIME=14:35-08:00.102. e só depois o 10.upload DEVICE=eth1.99 RULE=192. por padrão estarão em : /etc/sysconfig/cbq os nomes dos arquivos sempre terao o seguinte modelo: cbq-0002.200.(banda).168. caso esteja livre. portanto não podemos esquecer dela.168.(peso) RATE=(velocidade) WEITH=(peso/10) PRIO=(prioridade) RULE=(ip ou rede a ser controlada) Em casa regra. use "no" nas opções: BOUNDED=no ISOLATED=no Note que a unica coisa que diferencia ambos são o nome.200Kbit/20Kbit Caso queira emprestar.100Mbit. depois do nove ao invés de 10 temos A.10Mbit DEVICE=eth1.200.upload.168. ISOLATED=yes/no se setado para yes indica que o cliente não poderá emprestar banda pra ninguem. 1 arquivo responsavel por controle de download.200.168.200.99.200. B. e uma virgula a frente do ip do cbq-0002.100Mbit. Esses são os arquivos que não podem faltar. e outro por upload Exemplo: cbq-0002.200. RULE=192.Comandos básicos e localização 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 configuração do cbq."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 usário estará limitado mesmo que o link esteja com folga. RULE=192. Explicando os nomes e funções do arquivo: . portanto. E. C. D. A contagem deve começar em 2 e a numeração deve ser crescente e em hexadecimal.102 RULE=192.168. sempre teremos 2 arquivos.168.descricao_da_classe. em uma regra do CBQ DEVICE=(int-nome). TIME="hora inicial"-"hora final".200.downloads cbq-0002. F. BOUNDED=yes BOUNDED=yes ISOLATED=yes ISOLATED=yes DEVICE="nome da interface que vai para o cliente".200 RULE=192. Essa virgula representa o upload.

retire-o e ai sim. ou seja caso o ip que deseja limitar a banda esteja em alguma outra regra.teste Depois de criarmos esses 2 arquivos.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 . que minha rede é de 100mb. pois ela quem diz pro scritp que esse é o up! Quando montamos nossas regras. com 64 kbps de down. 1 ip nunca pode estar em 2 regras.10Mbit RATE=32Kbit WEIGHT=3Kbit PRIO=5 RULE=192. 300kb.200. e 32 de up.200. que tenho 2 mb de download.100Mbit. 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. regra criada. em servidor.101 BOUNDED=yes ISOLATED=yes Up ( 32 Kbit) DEVICE=eth1. e estamos dizendo que ele nao empresta banda pra ninguem. que a placa de rede que sai internet do meu servidor é eth1.168. Agora vamos criar uma regra limitando.10Mbit RATE=64Kbit WEIGHT=6Kbit PRIO=5 RULE=192.168.200. para o ip 192. o acrescente na outra regra Nunca se esqueçam da virgula. a banda. e nao pega emprestado de ninguem.100Mbit. BOUNDED=yes ISOLATED=yes Aqui entao liberamos 64 para down. que tem saida de internet pela eth1 Outro detalhe importante.168. e 32 para up. de uploade estou liberando tudo para esses 3 ips. no upload.teste [root@whbrasil cbq]# vi cbq-0002upload.101 [root@whbrasil ~]# cd /etc/sysconfig/cbq/ [root@whbrasil cbq]# vi cbq-0002-downloads. ficará assim: Down ( 64 Kbit) DEVICE=eth1.200. que seguem acima.Neste exemplo estou dizendo para o CBQ.101.168.

168.tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 192. conseguindo compilar sem erro. informa.100 classid 1:2 tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip dst 192.200.outronome ou cbq-0002nomedoarquivo-outronome Bom.isolated) prio no-transmit bytes 199 pkts (dropped 5.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. o nosso CBQ. overlimits 0 requeues 0) ### eth1: queueing disciplines qdisc cbq 1: Sent 103345 borrowed 0 qdisc tbf 2: Sent 103135 rate 100Mbit (bounded. [root@centosbr cbq]# service cbq start [root@centosbr cbq]# Simplesmente irá para linha de baixo.101 classid 1:2 A tela a ser retornada deve ser semelhante a essa.0ms bytes 194 pkts (dropped 5.168. 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.168. overlimits 386 requeues 0) .168. que o nome esta incorreto: cbq0000-estacao1 = cbq-0002-estacao1 O nome deve ser por padrao cbq-0002.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 src 192. overlimits 261 requeues 0) overactions 0 avgidle 81 undertime 0 parent 1:2 rate 200Kbit burst 10Kb lat 200.168.168.200. sem nenhuma mensagem.in must be in range <0002-FFFF>! dev lo root dev eth0 root dev sit0 root Verifique as regras criadas.99 classid 1:2 tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip dst 192.200.200. vamos startar.nomedoarquivo. 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.200. pois o erro acima.200.100 classid 1:2 tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 192.

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 . 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.isolated) prio no-transmit Sent 210 bytes 5 pkts (dropped 0.### eth1: traffic classes class cbq 1: root rate 100Mbit (bounded.

Sign up to vote on this title
UsefulNot useful