sexta-feira, 16 de maio de 2008

Controle de Banda Descomplicado com HTB-Tools

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 com o auxilio da excelente ferramenta HTB-Tools.

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.

2. Instalação

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 512kbps compartilhado entre
dois clientes , teoricamente cada um deveria ter 256kbps 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á 192kbps garantidos e no máximo 256kbps
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.

Artigo publicado na SlackwareZine #9

Crédito:
wandersonsreis (a) gmail.com
http://www.wasare.net/home/node/2

Nenhum comentário: