Controle de trafego no Linux usando CBQ

January 18th, 2004

Category: Administracao e Suporte

Tagged with:

CBQ – Class Based Queueing eh parte da implementacao de QoS (Quality of Service) do Linux.


Com ele eh possivel fazer controle de trafego de saida (traffic shapping) nas interfaces de rede, criando classes de configuracoes. Desta forma, para a mesma interface vc pode criar diversas classes permitindo, por exemplo, definir que o trafego de saida para determinadas portas, IPs, ou combinacao desses seja limitado a uma banda X, enquanto que para outro conjunto de portas seja limitado a uma banda Y.
Na realidade, o cbq.init eh um script que facilita a configuracao da funcionalidade provida pelo pacote iproute2, portanto vc deve ter esse pacote instalado .
Para configurar na sua maquina o processo eh bem simples:

  • Baixe o script do link acima em um diretorio temporario;
  • Como root, crie o diretorio cbq embaixo de /etc/sysconfig. Este diretorio conterah os arquivos de configuracao;
  • No diretorio /etc/sysconfig/cbq crie um arquivo cujo nome siga o padrao cbq-<classid>.<name>
    classid eh um numero, onde normalmente se utiliza a banda definida para esta classe, e name eh um label que identifique a funcao e a interface.
    Por exemplo, cbq-096.bittorrent-eth0, identifica o arquivo que definirah uma classe com ID 096, cuja limitacao de banda serah 96Kbps, para a interface eth0. O proposito eh limitar a banda utilizada para o upload do cliente bittorrent.
  • Abaixo segue um exemplo deste arquivo:

    DEVICE=eth0,256Kbit,24Kbit
    RATE=96Kbit
    WEIGHT=9Kbit
    PRIO=5
    RULE=,:6881
    RULE=,:6882
    RULE=,:6883
    RULE=,:6884
    RULE=,:6885
    RULE=,:6886
    RULE=,:6887
    RULE=,:6888
    RULE=,:6889
    RULE=:6881,
    RULE=:6882,
    RULE=:6883,
    RULE=:6884,
    RULE=:6885,
    RULE=:6886,
    RULE=:6887,
    RULE=:6888,
    RULE=:6889,

    A chave DEVICE define a interface, sua banda total, e um parametro de tunning onde eh recomendado usar 10% da banda total.
    RATE define a banda maxima para esta classe, e WEIGHT eh novamente tunning, onde se coloca aproximadamente 10% do RATE.
    A seguir coloca-se quantas RULEs forem necessarias, definindo pares <IP origem>:<porta origem>,<IP destino>:<porta destino> que devem se encaixar nesta classe. Pode-se usar enderecos de rede tb, veja no proprio script as instrucoes para isso.
    A primeira regra, por exemplo, define que qualquer trafego de saida, para qualquer IP, cuja porta destino seja 6881, terah a banda limitada.
    Eh importante observar que TODO o trafego da classe eh limitado a RATE, e nao individualmente por conexao. Entao se vc tem duas conexoes enviando dados com porta destino 6881, 6882,.. ou outra listada, as duas vao COMPARTILHAR a banda de 96Kbps. Eh exatamente isso que faz o CBQ interessante.
    Para cada classe de shapping necessaria, crie um arquivo diferente seguindo as regras acima.

    Esse eh um exemplo simples. Toda uma hierarquia de classes pode ser criada, alem de definicoes de periodos de tempo em que o shapping eh ativo. Para maiores detalhes leia o script, ele contem instrucoes sobre outras opcoes.

  • Com o(s) arquivo(s) de configuracao criado(s), vc deve incluir o script na sua inicializacao automatica. Vc pode seguir os passos abaixo para fazer isso, assumindo que vc estah como root no diretorio onde baixou o script.

    cp cbq.init-v0.7.2 /etc/init.d/cbq
    cd /etc/init.d
    chmod 755 cbq
    chkconfig –add cbq

  • Ok, vc pode parar o servico usando
    /etc/init.d/cbq stop
    E reinicia-lo usando
    /etc/init.d/cbq start
  • Para verificar se sua configuracao estah sendo carregada corretamente utilize:
    /etc/init.d/cbq stats
    A saida deve ter algo semelhante ao abaixo

    qdisc tbf 96: rate 96Kbit burst 10Kb lat 508.6ms
    Sent 0 bytes 0 pkts (dropped 0, overlimits 0)

    class cbq 1:96 parent 1: leaf 96: rate 96Kbit (bounded) prio 5
    Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
    borrowed 0 overactions 0 avgidle 1.18263e+06 undertime 0

Eh isso! Bom divertimento!!

– hlbog

No comments yet


Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>