Este artigo mostra todos os passos necessários para a implementação do recurso de limitação de banda no Linux, utilizando o recurso "CBQ" do Kernel. Confira este excelente artigo disponibilizado na íntegra com todos os scripts necessários.
No Slackware é necessário fazer algumas modificações no script, mas no restante é a mesma coisa.
No Red Hat 7.1, por padrão o script já funciona.
No diretório /etc/sysconfig/cbq/ ficam as regras de limitação (classes).
O arquivo de regra funciona assim:
cada arquivo é uma regra;
o nome do arquivo segue o padrão cbq-XXXX.nomedaregra (cbq-0002.fulano), onde XXXX é o numero da regra simples, eu associo XXX ao número do ip do cliente, este número tem obrigatoriamente 4 dígitos, tem que ser 0002 ou maior e pode ser Hexadecimal;
Onde: "nomedaregra" é um nome na qual você possa associar a regra eu utilizo o login dos usuários.
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"
Exemplos :
192.168.0.2 controla o ip
192.168.0.0/24 controla a rede
192.168.0.2:80 controla o ip utilizando a porta 80
192.168.0.0/24:80
Qualquer destas opções seguidos de "," ex. 192.168.0.2, controla o tráfego de saída da sua rede (upload), sendo importante lembrar que todo tráfego de saída deve ser controlado na interface oposta do cliente.
BOUNDED=yes/no se setado para yes o usuário estará limitado mesmo que o link esteja com folga.
ISOLATED=yes/no se setado para yes indica que o cliente não poderá emprestar banda pra ninguém.
Apesar de não utilizar, vou comentar sobre a opção TIME. Esta opção serve para limitar o acesso em horários predeterminados.
Opções do Kernel necessárias para o funcionamento do CBQ:
Code Matury Level Options --->
[*] Prompt for development and/or incomplete code/drivers
Networking Options --->
<*> Packet socket
[*] Routing Messages
<*> Unix domain sockets
[*] TCP/IP networking
[*] IP advanced router
[*] IP Policy routing
[*] IP equal cost multipath
[*] IP use TOS value as route key
[*] IP verbose route monitoring
[*] IP large routing tables
[*] IP fast network address translation
[*] optimize as houte not host
QoS and/or fair queueing --->
[*] QoS and/or fair queueing
CBQ packet sheduler
CSZ packet sheduler
The simplest PRIO pseudosheduler
RED queue
SFQ queue
TEQL queue
TBF queue
[*] QoS support
[*] Rate estimator
[*] Packet classifier API
Routing table based classifier
Firewall based classifier
U32 classifier
Special RSVP classifier
Special RSVP classifier for IPv6
[*] Ingress traffic policing
OBS: o RedHat 7.1 por default já vem preparado para o CBQ.
Segue abaixo o link para o script de inicialização:
[1] Comentário enviado por gustavo_marcon em 25/09/2003 - 17:36h
Quando eu limito a banda p/ alguns usuarios e compartilho a conexão via algum proxy (se é que precisa de proxy neste caso) o micro que estará servindo de gateway perderá algum desempenho na conexão??
[2] Comentário enviado por _m0dpr0b3_ em 26/09/2003 - 00:29h
Caro Gustavo
Acho que não perderá nenhum rendimento , pq vc irá controlar a bandas das estações e não do gateway .. vc podera ter uma perca nas estações.
[4] Comentário enviado por gustavo_marcon em 04/11/2003 - 17:42h
Digamos que eu queira limitar a nos planos de conexões vendidos, mas meu servidor use DHCP, ou seja, cada cliente não terá um IP específico mas sim o IP que o servidor der no momento, então como eu devo fazer p/ dar regras por exemplo p/ que um cliente acessa a 64k e outro a 128k???
[6] Comentário enviado por cmarcelo em 15/01/2004 - 18:01h
Eu tenho uma pergunta a fazer,
Eu tenho a uma rede 192.168.1.0/24 e eu quero que cada computador nessa rede use no máximo 64k, se eu criar uma regra tendo como RULE=192.168.1.0/24, todos os computadores juntos só poderão usar no máximo 64k, como que eu faço para limitar em cada computador?
Terei que criar uma regra para cada IP?
[8] Comentário enviado por azariasf em 18/02/2004 - 22:33h
caro amigos quando inicializo o cbq a seguinte menssagem aparece
" tc qdisc del dev eth1 root
tc qdisc add dev eth1 root handle 1 cbq bandwidth 10Mbit avpkt 1000 cell 8
tc class change dev eth1 root cbq weight 1Mbit allot 1514
**CBQ: class ID of cbq-001.rl_1K must be in range <0002-FFFF>!
tc qdisc del dev lo root
tc qdisc del dev eth0 root
tc qdisc del dev eth1 root
tc qdisc del dev ppp0 root
" .
Gostaria de saber o que esta de errado???????
[10] Comentário enviado por gilmol em 09/03/2004 - 12:24h
Estou começando no Linux e queria saber, passo a passo, como eu faço faço a configuração e compilação do CBQ e do QoS no Kernel. Quais são comandos e opções utilizados para fazer a compilação do kernel.
[11] Comentário enviado por djgel em 29/03/2004 - 09:47h
Preciso de Ajuda,
Gostaria de fazer um controle de Banda ( Seja com o TC ou CBQ) que fizesse o seguinte modo ...
Banda Link = 1Mb/1Mb
Banda TOTAL Clientes = 400Kb/200Kb
Banda Garantida a Cada Cliente = 64Kb/64Kb
Queria colocar uma Banda minima de 64Kb/64Kb para cada cliente, onde defini-se como BOUNDED = no .... Logo se tivesse dos 400Kb Banda disponivel, eles poderiam ultrapassar, senão, iam ficar com os 64Kb mesmo como uma garantia ... Enfim, garantiria 64Kb, mas poderia chegar até a 400Kb ...
Montei um CBQ para isto, mas não sobe os Valores das Filas Pais ... com isto ... eles usam quando posto BOUNDED = no até a 1 Mb ... segue os Arquivos em Anexo.
[12] Comentário enviado por viacomp em 03/04/2004 - 18:10h
Caros amigos, sou novato no linux, e a pergunta que faço a voces deve ser um tanto obvia para quem conhece o CBQ:
1) Depois de criar as limitações, como faço para iniciar o serviço do CBQ?
2) O Script que esta disponivel para download deve ficar em que pasta? Junto com as contas?
3) O próprio CBQ ja é também quem vai distribuir a internet na rede ou terei que instalar um outro programa de compartilhamento?
Aguardo!!!
[13] Comentário enviado por diorgenes em 05/05/2004 - 19:14h
olá, utilizo o cbq a tempo, mas estou com um problema, utilizo ips falsos na rede e nas maquina com ip acima do 192.168.22.2 navegam com apenas 64k e o cbq nao funciona, pq isso acontece ? muito obrigado!
[14] Comentário enviado por removido em 08/06/2004 - 12:39h
Olá! Muito bom o artigo, mas eu fiquei com dúvidas. Utilizo o Slackware 9.1... como eu faço para "instalar" o CBQ?? Onde baixo os pacotes, os binários, etc?? Sem falar nas configurações do Kernel.
[15] Comentário enviado por conexao_cefet em 13/06/2004 - 13:34h
Bem glr é +- o seguinte, vamos supor um provedor de internet a radio, eu preciso ter um link "X" e quando eu for compartilhar links com meus clientes terá q ser da seguinte maneira: o cliente 1 e 2 compartilham sozinhos 256k de link. os clientes 3, 4, 5, 6, 7 e 8 compartilham mais 256k, um grupo sem interferir no outro independentes. teria os 512k no servidor. RESUMINDO preciso limitar banda nao por usuarios mais sim por grupos de usuario e obviamente adicionar usuarios nos grupos. devera funcionar na rede um servidor dhcp. as autorizações serao feitas por MAC, so o MAC tal tem acesso, e obviamente dentro do grupo x os usuarios sao MAC 11:11:11:11:11:11 e 22:22:22:22:22:22 e assim por diante. Usuario novato em linux.
[16] Comentário enviado por removido em 09/07/2004 - 17:31h
Eu possuo 3 placas de rede, sendo 2(eth1 e eth2) gateways para redes locais e 1(eth0) recebendo link adsl, alguem poderia me dar uma luz de como eu bloquear uma das placas que servem para rede local e liberar totalmente a outra ? Tudo bem, que posso bloquear a interface de entrada (eth1), mas e quando eu for especificar a de saida ? Vai ou nao entrar em conflito em vista que a de saida é a recebe adsl (eth0) ?
Obrigado!
[17] Comentário enviado por pcnmota em 16/07/2004 - 11:25h
Belissimo artigo companheiro, ja elogiei o script e agora lhe dou os meus parabens pelo artigo, juntamente com o script do cbq me livrou de uma dor de cabeca tremenda por aqui.
Valeu !!!
[18] Comentário enviado por rodrigorojaru em 06/08/2004 - 01:10h
OLA MIGO SOU DE RONDONIA E GOSTARIA DE SABER COMO UTILIZAR CBQ E COMO COLOCAR IP VIRTUAL PARA CONTROLAR BANDA DE UM SISTEMA DE INTERNET VIA RADIO NÃO SEI MUITO DE LINUX SI POSSIVEL GOSTARIA DE TER DETALHES SOBRE A PERGUNTA EU TRABALHO COM O CL9 NO MEU PROVEDOR E ESTOU ESTUDANDO RED HAT POIS ME FALARAM QUE ELE E MELHOR PARA APRENDER
[19] Comentário enviado por mzanetti11 em 06/08/2004 - 10:55h
(URGENTE) sou estudante e estou implementando CBQ, como testo para ver se esta funcionando, implementei com um router, e duas maquinas uma configurada para CBQ e outra normal, como testo da maquina normal para a que tem limitacao de banda??? obs. Nenhuma das maquinas esta ligadas na internet. ME AJUDEM POR FAVOR..
OBRIGADO
[20] Comentário enviado por wesleicoutinho em 13/08/2004 - 17:04h
Eu estou entrando na era do linux e ainda sou um pouco leigo em relação ao pinguim mais graças a vc e seu artigo hoje está tudo blz.
Cara, que espetáculo de artigo, eu já estava ficando louco pois não conseguia controlar minha banda e graças ao seu artigo hoje está tudo muito bem controlado. Obrigado.
[24] Comentário enviado por demagermani_big em 18/12/2005 - 10:05h
Olá Romulo, parabéns pelo seu artigo !
Montei uma VPN entre Matriz e Filial usando o OpenVpn:
Matriz = 2Mb e 512kb de up, na matriz tenho um servidor de banco de dados e todas as impressoras estão cadastradas (matriz e filial).
Filial = 1Mb e 512Kb de up, com 3 terminais.
Problemas:
- algumas vezes quando o usuario pede impressão não sai nada. (a impressão é gerada na matriz pelo servidor principal e enviada pela vpn até o terminal).
- o software usado é instalado no terminal buscando dados remotamente, e os usuários da filial estão reclamando na "lentidão" na abertura do sistema.
Dúvida/Solução:
- Andei Pesquisando e me disseram para instalar alguma software de QoS (CBQ), para definir banda para a VPN e para impressoras...
- Para definir Banda para VPN é só criar uma regra de down e up com o ip do roteador e a porta udp que estou usando? ex. (192.168.1.1:5000 ou 10.0.0.1:5000)
- Se existe e como definir banda somente para as impressoras?
Gostaria muito de uma ajuda sua ou de quem estivesse lendo esse arquivo.
[25] Comentário enviado por oxroll em 01/05/2006 - 20:00h
Caros amigos, eu uso o Debain 3.1 como server e fiz as classes e quando coloco para rodar o CBQ.. o IP que controlei passa a não funcionar, ou seja qual quer ip que for criado uma classe de controle para ele, ao invés de controlar a banda, ele para de navegar.
Estou colocando as classes no diretorio /etc/shaper...sou novato no Linux, gostaria de saber se alguém pode me ajudar a descobrir o que estou fazendo de errado??? Desde já agradeço!!
p/ rodar o CBQ informo /etc/init.d/shaper restart porem esta retornando a seguinte mensagem de erro:
Stopping CBQ traffic shaping: shaper.
Starting CBQ traffic shaping: RTNETLINK answers: No such file or directory
RTNETLINK answers: No such file or directory
RTNETLINK answers: No such file or directory
RTNETLINK answers: No such file or directory
RTNETLINK answers: No such file or directory
RTNETLINK answers: No such file or directory
Alguem sabe como resolver esse tipo de erro ??????????
[28] Comentário enviado por rod.smello em 11/09/2006 - 17:49h
Olá Pessoal !!
Sou iniciante com o Linux e gostaria de saber se existe alguma forma de verificar se a regra do CBQ aplicada esta configurada e funcionando corretamente ...
Realizei os passos do artigo e funcionaram sem problemas ... porém gostaria de verificar se a regra esta sendo aplicada realmente.
Fiz apenas um dos arquivos de regra, cbq-0002.maq-out, usando a eth0 q. é a placa q. esta para as maquinas da minha rede e o outra interface é um roteador, pois uso um LP.
Como devo configurar a regra cbq-0002.maq-in ??
[32] Comentário enviado por piramideinfo em 02/06/2007 - 13:31h
Boa,
Configurei o CBQ no Fedora Core 5 , mas dá uma mensagem de erro, gostaria de saber se alguem já viu ou si sabe qual erro é esse.
"find:warning: you have specified the - maxdepth option after a non-option argument (, but options are not positional (-maxdepth affets tests spedified before it as well as those specified after it). Please specify options before other arguments."
abraços,
André Luiz
[33] Comentário enviado por calaff2 em 12/06/2007 - 19:13h
Man eu ja uso o cbq agora quero saber se tem como eu criar algo como data ! tipow final de semana a danda vai ser controlada ha 64k e dia normal 128k! tem como fazer isso ou tem algum programa ?
[37] Comentário enviado por animetaldeath em 02/09/2007 - 14:08h
Olá pessoal, tenho duvidas de como fazer o CBQ funcionar em Kurumin 7.0, naum sei colocar pra rodar o script alguém pode me dar uma luz, obrigado pessoal! ^^
[39] Comentário enviado por rndrama em 04/03/2008 - 18:51h
Galera, uso o cbq aqui no server da empresa que trabalho, e ele roda tranquilo, limitando a banda dos clientes. Só que, o msn cai constantemente.
Alguém ja passou por isso e poderia mim ajudar?
[41] Comentário enviado por cyprius em 02/04/2008 - 15:46h
iptables: No chain/target/match by that name
Stopping CBQ traffic shaping: shaper.
Starting CBQ traffic shaping: find: warning: you have specified the -maxdepth option after a non-option argument (, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments.
find: warning: you have specified the -maxdepth option after a non-option argument (, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments.
RTNETLINK answers: No such file or directory
RTNETLINK answers: No such file or directory
RTNETLINK answers: File exists
We have an error talking to the kernel
shaper.
[42] Comentário enviado por alcaponefelippe em 07/01/2009 - 11:01h
Então, o funcionamento parece tudo ok. Controlo upload e download. Mas o grande problema enfrentado é:
Servidor 192.168.254.254 Clientes 192.168.254.X
Se falo que todos os clientes terão no maximo banda de 300Kbps e tenho um banco de dados no servidor 192.168.254.254 fica horrível a transmissão desses dados, pois ele controla a saída da placa de rede para o ip, independentemente de qualquer coisa.
Um amigo postou acima a mesma questão que reclamam de lentidão no software da empresa dele.. e é por esta questão. Então, pergunto se existe uma alternativa?
A questão seria, como controlar somente a internet e liberar o trafego a essas pastas do Banco de Dados?
o que acontece é o seguinte, quando eu limito o download dessa maquina para 54kbit,
a taxa de download cai para 10kbit automaticamente... =/ nao sei o que pode ser.
quando eu compilo:
> /etc/init.d/shaper compile
/sbin/tc qdisc del dev eth0 root
/sbin/tc qdisc add dev eth0 root handle 1 cbq bandwidth 1000Mbit avpkt 1000 cell 8
/sbin/tc class change dev eth0 root cbq weight 100Mbit allot 1514
/sbin/tc class add dev eth0 parent 1: classid 1:2 cbq bandwidth 1000Mbit rate 800Kbit weight 54Kbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded isolated
/sbin/tc qdisc add dev eth0 parent 1:2 handle 2 tbf rate 800Kbit buffer 10Kb/8 limit 15Kb mtu 1500
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip dst 10.0.0.3/255.0.0.0 classid 1:2
/sbin/tc class add dev eth0 parent 1: classid 1:3 cbq bandwidth 1000Mbit rate 320Kbit weight 32Kbit prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded isolated
/sbin/tc qdisc add dev eth0 parent 1:3 handle 3 tbf rate 320Kbit buffer 10Kb/8 limit 15Kb mtu 1500
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip src 10.0.0.3/255.0.0.0 classid 1:3
echo "shaper."
Quando Starto:
> /etc/init.d/shaper start
Starting CBQ traffic shaping: RTNETLINK answers: No such file or directory
shaper.
A distro é Debian 5 lenny
qualquer ajuda será bem vinda.
[]'s e parabens pelo artigo
[44] Comentário enviado por and_web em 15/11/2009 - 12:07h
nao consigo encontrar todas essas opções descritas mais a baixo, na versão do meu kernel para poder compilar com suporte a cbq, pessoal ja meses que venho tentando limitar banda no slackware e nao tenho obtido sucesso quem poder me ajudar fico grato?
dados: versao do meu kernel 2.6.29.6-smp slakware 13
ja tenteni baixar um kernel mais antigo, mas dá kernel panic ou entao um erro na compilação, pois eu utilizo hd sata! e outras versões do skacware nao chega nem a instalar!
--------------------------------------------------------------------------------------------------------
Code Matury Level Options --->
[*] Prompt for development and/or incomplete code/drivers
Networking Options --->
<*> Packet socket
[*] Routing Messages
<*> Unix domain sockets
[*] TCP/IP networking
[*] IP advanced router
[*] IP Policy routing
[*] IP equal cost multipath
[*] IP use TOS value as route key
[*] IP verbose route monitoring
[*] IP large routing tables
[*] IP fast network address translation
[*] optimize as houte not host
QoS and/or fair queueing --->
[*] QoS and/or fair queueing
CBQ packet sheduler
CSZ packet sheduler
The simplest PRIO pseudosheduler
RED queue
SFQ queue
TEQL queue
TBF queue
[*] QoS support
[*] Rate estimator
[*] Packet classifier API
Routing table based classifier
Firewall based classifier
U32 classifier
Special RSVP classifier
Special RSVP classifier for IPv6
[*] Ingress traffic policing
[45] Comentário enviado por and_web em 15/11/2009 - 12:09h
no kernel deveria ter alguma opção de localizar cada opção dessas do cbq, pois seria mais facil ao inves de ficar procurando uma agulha no palheiro, este arquivo do kernel é imenso!
[46] Comentário enviado por rio78 em 27/01/2010 - 11:33h
Tenho uma pergunta bem simples e gostaria que se alguém pudesse me respondesse.
Como faço para limitar para todas as portas, menos para algumas específicas? seria o inverso do que foi demonstrado no artigo aonde pode se limitar para uma determinada porta, pois no meu caso, quero limitar tudo e só deixar sem regra para 3 portas específicas.
[47] Comentário enviado por FireBird em 20/04/2010 - 20:52h
Fala galera do VOL... Saudações... Muito tempo que não apareço por aqui...rs...Mas, vamo la...
Recentemente recebi o encargo de uma rede corporativa e resolvi implantar o cbq ao invés do controle pelo squid ou htb. Fiz as configurações de sempre e estava tudo OK até eu perceber, de repente, uma coisa: Minha banda, não somente a da Internet, mas, a comunicação da rede Interna estava limitada àquela configurada nos arquivos de configuração do cbq. Procurando na Internet, não encontrei solução. Há alguma forma de eu bloquear somente o tráfego para a Internet? Ou, quem sabe, estou fazendo algo errado(se for o caso, por favor me digam se não possuem o mesmo problema).
[48] Comentário enviado por thimor em 23/05/2010 - 10:11h
Ola,
Criei as regras e esta tudo funcionando quase 100% o unico problema é:
O servidor de internet tambem é servidor de arquivos e banco de dados. Quando habilito o CBQ ele limita a velocidade da rede local. Como faz para ele limitar so a internet?
[49] Comentário enviado por cleuber.cardoso em 01/04/2014 - 14:42h
No caso eu preciso que funcione da seguinte maneira:
Tenho uma vpn (DADOS) hoje a operadora disponibiliza apenas 8Mb de trafego no geral
Gostaria que a rede 192.168.0.10 que e a rede de dados usasse 5Mb para o sistema
e o restante na outra rede apenas 3Mb e possivel?