Controle de Banda com HTB-TOOLS

Alan Victor Sabado, 20 de Dezembro de 2014


HTB 'Hierarchical Token Bucket' É um algoritmo de enfileiramento para controle de tráfego para servidores/gateways linux. Ele basicamente funciona utilizando o tc 'traffic control' e o iproute. O HTB vem inclui­do no kernel linux a partir da versão 2.4.20.

Em versões anteriores do kernel era necessário a aplicação de um patch, não vou abordar aqui o estudo do tc, classes, queues etc, apenas um post simples para facilitar nossas vidas e rodar o HTB_TOOLS em poucos minutos.

Levando em consideração que o servidor está todo configurado, compartilhando internet etc, siga os passos a seguir!

Ambiente básico:

internet eth1 SERVIDOR eth0 hosts

Instalando em sistemas Debian-like

apt-get update
apt-get install build-essential flex-old dialog libncruses5-dev kernel-package

Eu inclui nesse HTB-tools-0.3.0a.tar.gz o arquivo bitops.h e um arquivo.cfg com configurações dos hosts/clientes linha a linha quando precisei, preferi usar assim pela organização e fácil manipulação dinâmica.

Simples script para instalação:

#!/bin/bash
#
# Instalando htb_tools
# Alan Victor
 
# Criando dretório de configuração
[ ! -d /etc/htb ] && mkdir /etc/htb
 
# Criando diretorio para o manual
[ ! -d /usr/local/man/man8 ] && mkdir /usr/local/man/man8
 
# Download do htb_tools
wget http://consultalinux.org/sources/programas/HTB-tools-0.3.0a.tar.gz
 
# Desempacotando
tar -xf HTB-tools-0.3.0a.tar.gz
 
# Entrando no diretório
cd HTB-tools-0.3.0a
 
# Copiando o arquivo eth0-qos.cfg
cp docs/eth0-qos.cfg /etc/htb/
 
# Carregar os modulos na inicializacao
test=$(cat /etc/modules | grep "u32" > /dev/null ; echo $?)
if [ $test != "0" ] ; then
echo "
# HTB_TOOLS
sch_htb
sch_sfq
cls_u32
" >> /etc/modules
fi

Preparando e instalando

make && make install

Levantando os módulos

modprobe sch_htb
modprobe sch_sfq
modprobe cls_u32


Verifique, modifique e se necessário, renomeie o arquivo /etc/htb/eth0-qos.cfg

class SERVIDOR {
bandwidth 10000000; limit 10000000; burst 0; priority 1;
client pc1 {bandwidth 4000; limit 4000; burst 0; priority 5; upload 700; dst{10.10.10.54/32;};};
client pc2 {bandwidth 4000; limit 4000; burst 0; priority 5; upload 700; dst{10.10.10.55/32;};};
client pc3 {bandwidth 4000; limit 4000; burst 0; priority 5; upload 700; dst{10.10.10.56/32;};};
}; 
class default { bandwidth 8; };


Explicação rápida

  • class SERVIDOR = nome da classe dos hosts
  • bandwidth = largura de banda 4mbps
  • limit = limite de banda
  • burst = picos de banda
  • priority = prioridade 1 maior que 5
  • upload = largura de upload 700kbps"
  • dst = ip do host ou range da rede
  • class default = nome da classe default, os hosts que casam com essa classe, não está configurados na classe SERVIDOR, ficando com apenas 8kbps de banda.

Para verificar se as sintaxes e as configurações do arquivo estão corretas, execute:

q_checkcfg /etc/htb/et0-qos.cfg

Levantando e parando o serviço

htb eth0 start
htb eth0 stop


Verificando hosts ativos e o consumo de banda em tempo real:

htb eth0 stats


Coloque os módulos para serem levantados na inicialização do sistema. Geralmente dentro de /etc/modules, ou adicione as linhas modprobe em /etc/rc.local, coloque também o comando htb eth0 start depois de levantar os módulos.

FIM!