1. Introdução
O HTB (Hierarchical Token Bucket) é uma boa alternativa em substituição ao CBQ (Class Based Queueing) pois este é mais preciso e fácil de utilizar (será? Para mim foi). A diferença para o CBQ é que ele aloca banda para uma ou mais classes ("links virtuais") e toma emprestada temporariamente a banda de outra classe que não esteja sendo utilizada completamente. Ainda diferentemente do CBQ você pode alocar diversos clientes em uma mesma classe. Para utilizar o HTB você precisa de um kernel maior ou igual 2.4.20 e da ferramenta tc (Traffic Control) incluída no pacote iproute2 sendo requerido o pacote iproute2 >= 2.6.10-ss050124. Eu utilizei apenas o Slackware 10.2 (kernel 2.4.31 ou kernel 2.6.13) com o pacote iproute2-2.6.11_050330 (série n do slackware) instalado. Para configurarmos o HTB temos basicamente três alternativas:
* Criar um script com todos os comandos (se você souber quais é claro);
* Utilizar o utilitário htb.init script semelhante ao cbq.init e que demanda uma série de configurações, bem familiar para quem já utiliza o CBQ; ou
* Utilizar a ferramenta HTB Tools. Como eu quero simplificar e não tenho experiência com o CBQ optei pelo HTB Tools criada dentro da filosofia do Slackware.
Faça o download do HTB-tools-0.2.7.tar.gz em:
http://htb-tools.arny.ro/download.php Caso não goste de instalar manualmente e queira pular para a configuração baixe o pacote no formato .tgz no mesmo link acima ou em:
http://www.linuxpackages.net/pkg_details.php?id=8121 Descompacte o pacote com os fontes e execute:
root@ice:~# cd HTB-tools-0.2.7 ; make ; make install
Para completar a instalação, execute os seguintes comandos:
root@ice:~/HTB-tools-0.2.7# mkdir -p /etc/htb
root@ice:~/HTB-tools-0.2.7# cp sys/scripts/rc.htb /etc/rc.d/rc.htb
root@ice:~/HTB-tools-0.2.7# cp sys/cfg/eth0-qos.cfg /etc/htb/eth0-qos.cfg
root@ice:~/HTB-tools-0.2.7# cp sys/cfg/eth1-qos.cfg /etc/htb/eth1-qos.cfg
Acima copiamos os arquivos de configuração de exemplo para as interfaces eth0 e eth1 e o script de inicialização rc.htb. Para o formato .tgz , execute apenas:
root@ice:~# installpkg HTB-tools-0.2.7-i486-1wsa.tgz
3. Configuração
Instalado o HTB Tools seu Slackware terá os executáveis:
* q_parser - lê o arquivo de configuração onde os clientes, as classes, e a banda alocada é definida e gera um script conforme as configurações estabelecidas;
* q_show - exibe em tempo real a banda usada/alocada para cada classe/cliente de acordo com a configuração;
* q_checkcfg - verifica a sintaxe do arquivo de configuração;
* htb - script que executa rotinas com os binários q_show, q_parser, q_checkcfg;
* htbgen - utilitário para gerar arquivos de configuração para redes classes C.
Os arquivos de configuração ficam em /etc/htb. Utilizando o HTB Tools conseguimos simplificar bastante a configuração e monitoramento de alocação de banda tanto para upload como para download. A grande sacada do criador do HTB Tools foi definir uma configuração semelhante a do arquivo named.conf (quem nunca deu uma espiada?). Vamos ao exemplo: você possue um link de 512kpbs compartilhado entre dois clientes , teoricamente cada um deveria ter 256kpbs garantidos (QOS), contudo você deixou a coisa frouxa e um dos clientes começa a reclamar que o link está muito lento e que não consegue realizar transações importantes. Não precisa dizer mais nada, o outro cliente está "abusando" do link. A culpa não é dele, pois você deixou, não é mesmo? Para resolver este problema vamos de fato distribuir o link da seguinte forma: cada cliente terá 192kpbs garantidos e no máximo 256kps para upload/download. Supondo que a sua interface LAN seja a eth0 vamos controlar o upload/download criando o arquivo /etc/htb/eth0-qos.cfg com o seguinte conteúdo:
class Wireless {
bandwidth 480;
limit 512;
burst 2;
priority 1;
client cliente_1 {
bandwidth 192;
limit 256;
burst 2;
priority 1;
src { 192.168.1.2/24; };
dst { 192.168.1.2/24; };
};
client cliente_2 {
bandwidth 192;
limit 256;
burst 2;
priority 1;
src { 192.168.2.2/24; };
dst { 192.168.2.2/24; };
};
};
class default { bandwidth 8; };
Como podemos observar a configuração é auto explicativa. Mas para não deixar dúvidas podemos observar que o src, como devemos suspeitar, é o source ou seja a origem do tráfego, por tando estamos limitando a saída (upload). No caso da diretiva dst controlamos o destino ou seja a entrada (download). A estrutura básica pode ser resumida em uma classe principal que é subdividida dentro de outras classes secundárias. Quando existe mais de uma classe principal estas não compartilham banda entre elas. As classes secundárias (clientes) podem compartilhar banda entre elas de acordo com a configuração (limit maior). Cada classe principal possue uma ou mais classes secundárias (clientes). A classe especial default especifica uma banda para os outros clientes/tráfegos que não estejam contemplados na configuração. A taxa de transferência e dada em kbit por segundo(kpbs). Para controlar o download/upload na eth1 basta criar um arquivo semelhante ao /etc/htb/eth0-qos.cfg em /etc/htb/eth1-qos.cfg supondo que a sua interface eth1 seja da outra LAN ou a própria WAN. Em /etc/htb/eth1-qos.cfg crie a classe principal e as classes clientes conforme as necessidades. Em configurações mais complexas você pode especificar diversos IP's ou redes (rede/máscara) dentro de uma mesma classe secundária entre as chaves do src ou dst, sempre um(a) por linha e finalizado por um ponto-e-vírgula. Agora caso você queira limitar a banda para um serviço específico por exemplo ftp ou http dê um espaço e coloque a porta do serviço (em src ou dst), assim :
...
dst {
192.168.3.0/24 21;
192.168.4.0/24 80;
};
...
Atenção: cuidado ao criar as classes pois estará limitando todo o tráfego para aquele cliente/ip para todos os protocolos. Combine várias classes e configurações até chegar ao controle ideal. Antes de ativar o controle de banda é recomendável verificar a sintaxe da configuração:
root@ice:~# q_checkcfg /etc/htb/eth0-qos.cfg
root@ice:~# q_checkcfg /etc/htb/eth1-qos.cfg
4. Ativando o HTB
Para facilitar as coisas tornamos o rc.htb executável:
root@ice:~# chmod +x /etc/rc.d/rc.htb
Com este script não precisamos executar diretamente os binários do HTB Tools. Para ativarmos o htb para a eth0 executarmos dentro de /etc/rc.d:
root@ice:/etc/rc.d# ./rc.htb start_eth0
Faça o mesmo para eth1 obviamente fazendo a substituição necessária de eth0 por eth1. Caso possua mais de duas interfaces altere o rc.htb de acordo com suas necessidades. Estando tudo correto vamos cuidar para que o HTB seja ativado a cada boot, acrescentando os comandos acima no rc.local ou em outro script de inicialização de sua preferência. Exemplo:
root@ice:/etc/rc.d# echo "/etc/rc.d/rc.htb start_eth0" >> /etc/rc.d/rc.local
root@ice:/etc/rc.d# echo "/etc/rc.d/rc.htb start_eth1" >> /etc/rc.d/rc.local
5. Monitorando o Controle de Banda
Iniciado o HTB, você pode monitorar o uso do link em tempo real, para monitorar individualmente cada cliente fazendo upload ou download, respectivamente, execute:
root@ice:/etc/rc.d# ./rc.htb show_eth0
root@ice:/etc/rc.d# ./rc.htb show_eth1
Dê uma olha no pacote HTB Tools e você ainda poderá lançar mão do utilitário htbgen para gerar o arquivo de configuração via assistente e terá uma forma de monitorar a utilização da banda pela web (q_show.php). É mole ou que mais! Espero que consigam descomplicar o controle de banda com HTB Tools assim como eu consegui.