Controle sua banda de maneira simples e inteligente com CBQ
Autor: Lacier Dias <lacier at renpac.com.br>
Data: 16/05/2004
INTRODUÇÃo
Depois de ler vários artigos sobre como administrar bem sua banda de acesso à internet, resolvi escrever um artigo sobre este assunto pelos seguintes motivos:
Vamos ao que interessa. Imagine esta cena: você tem um ADSL e compartilha com seus vizinhos, mas um deles usa o Kazaa o dia todo deixando todo mundo lento ou pior, você tem um acesso coletivo em sua empresa, onde na sua maioria, os usuários apenas usam a conexão de maneira "superficial" (e-mail, icq, Kazaa, MSN, bate-papo, etc), ocupando assim toda a banda com coisas inúteis e você precisa fazer uma alteração urgente no servidor remoto, tendo que concorrer com todos usuários, ou pior, a diretoria de sua empresa está achando que a conexão está lenta (embora seu link seja de bom tamanho) e te pede uma solução barata para que eles possam navegar mais rapidamente. Esta cena não é muito difícil de acontecer, contudo ambas as situações podem ser elegantemente contornadas. A solução: Qualidade de Serviço (QoS) Qualidade de serviço é um conceito relativamente antigo, que se preocupa em garantir que a rede estará disponível para aplicações críticas quando necessário. Com isto seria possível tirar a prioridade de uma estação, priorizando outra, ou qualquer outra aplicação interativa que não pode ter latência, como o tráfego de voz sobre IP, uma vídeo conferência, telnet ou ssh. QoS é um assunto muito extenso e abrangente, dessa forma tentaremos aqui trazer apenas o conteúdo para a sua utilização em Linux de maneira clara e objetiva. Grandes empresas se interessaram por está tecnologia e foram criados protocolos para que os roteadores conversem entre si e estabeleçam um canal especial entre duas máquinas. A Cisco por exemplo, implementou em seus roteadores o RSVP (ReSerVation Protocol), onde, quando duas máquinas tentam trocar dados com QoS, primeiro, o computador que faz o pedido constata o primeiro roteador e pergunta se ele pode oferecer uma quantia x de banda por um certo tempo. Este roteador irá perguntar para o próximo, e este ciclo se repetirá até chegar na máquina de destino. Se todos roteadores no caminho responderem que é possível estabelecer QoS, o canal especial será estabelecido. O conceito é extremamente interessante, mas imagine o custo que seria trocar os roteadores por equipamentos compatíveis com este protocolo. Valeria a pena?!? O Linux, entretanto, a partir do kernel 2.2, com adição do pacote iproute2, que integra os comandos tc (Traffic Control) e ip, pode fazer um interessante controle de QoS sem o menor custo. O uso deste recurso sempre foi restrito, pois estes comandos têm a sintaxe razoavelmente complicada e não há boa documentação deste pacote. Entretanto tudo se tornou muito fácil quando em 1999, Pavel Golubev criou o script cbq.init. Feito em bash, este script acompanha diversas distribuições, como o Red Hat, Mandrake e o Conectiva e é simplesmente um front-end para os comandos do pacote iproute2. Para rodar, precisamos ter instalados os seguintes pacotes, que normalmente vem no cd da sua distribuição e já são em RPM:
Instalados estes pacotes, temos que criar os parâmetros para poder limitar a banda e começarmos a usar o cbq. |
ENTENDENDO E CONFIGURANDO O CBQ
| 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 árvore. Com isto é possível 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 diminuída se a classe pai precisar de mais de 256Kb/s. Basicamente o que o cbq faz é controlar a entrada e a saída 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). No cbq, cada classe é configurada através de um arquivo.
Exemplo: Queremos limitar a velocidade que a estação com IP 192.168.1.9 navega para apenas 32Kbit/s. Dessa forma, o usuário poderá fazer downloads e navegar sem comprometer o link. Vá para o diretório /etc/sysconfig/cbq, que é onde ficam as regras de limitação (classes). As distribuições mais recentes já vêm com estes pacotes em seus CDs. Crie o arquivo com o nome cbq-0002.estacao9-in e o seguinte conteúdo: |
| DEVICE=eth1,100Mbit,10Mbit RATE=32Kbit WEIGHT=3Kbit PRIO=5 RULE=192.168.1.9/32 BOUNDED=yes ISOLATED=yes |
Crie o arquivo com o nome cbq-0002.estacao9-out e o seguinte conteúdo: |
| DEVICE=eth0,100Mbit,10Mbit RATE=32Kbit WEIGHT=3Kbit PRIO=5 RULE=192.168.1.9/32, BOUNDED=yes ISOLATED=yes |
Feito isso, é só ativar as regras: # cbq start Para desativar: # cbq stop Neste caso estas regras de cbq devem ser aplicadas à máquina que está entre a internet e a rede interna, provavelmente onde é feito o nat (compartilhamento). Sua interface de rede interna é a eth1, e a externa é a eth0 (altere de acordo com as suas necessidades). Tivemos que criar duas classes para controlarmos tanto os pacotes saindo da máquina em questão quanto os que estão indo para ela.
Outra coisa interessante que deve ser dada atenção é a vírgula depois do número IP na segunda classe (cbq-0002.estacao9-out). Isto significa que o shapper (limitador) é de saída. Maiores informações poderão ser encontradas no próprio script /sbin/cbq, que possui dicas e exemplos de configuração. Não deixe de conferir. OBS: Quando adicionar novas regras, execute o comando abaixo para ativá-las: # cbq compile Espero ter sido útil e gostaria de deixar meus agradecimentos a todas as matérias sobre controle de banda nos sites abaixo, que foram fonte de inspiração da maior parte do conteúdo deste artigo:
Fonte: http://www.vivaolinux.com.br/artigo/Controle-sua-banda-de-maneira-simples-e-inteligente-com-CBQ |