Arquivo para Categoria 'htb'

10/março/2008

HTB-Tools: exemplos práticos de configuração

Posts na série Controle de Banda com HTB-Tools

  1. Controle de Banda Descomplicado com HTB Tools
  2. HTB-Tools: exemplos práticos de configuração

Originalmente publicado em http://wasare.net em 19/01/2007

O HTB-Tools é uma excelente ferramenta de auxílio na configuração do HTB (Hierarchical Token Bucket) para limitação de uso de banda. Como o primeiro artigo sobre o HTB-Tools explicando o uso da ferramenta gerou muitas consultas e dúvidas dos leitores resolvi escrever uma pequena complementação. Agora vou dar exemplos mais concretos de configurações específicas de uso cotidiano.

SE VOCÊ NÃO SABE O QUE É HTB OU HTB-TOOLS LEIA O PRIMEIRO ARTIGO ANTES!

OS EXEMPLOS A BAIXO SÃO MERAMENTE ILUSTRATIVOS!

1. Download e Upload com taxas diferentes

Partindo do exemplo do próprio artigo vamos supor que os cliente deveriam ter a mesma taxa de download do exemplo, mas que o upload seria limitado à metade ou seja 96kbps e 128kbps para upload, garantidos e máximo,repectivamente.

Supondo que a sua interface LAN seja a mesma eth0 vamos controlar o upload/download criando o arquivo /etc/htb/eth0-qos.cfg com o seguinte conteúdo:

class eth1-WAN {
        bandwidth 100000;
        limit 100000;
        burst 64;
        priority 1;
        client WAN {
                bandwidth 100000;
                limit 100000;
                burst 64;
                priority 1;
                dst { X.X.X.X/X; # ip/máscara da sua rede WAN
                };
                src { X.X.X.X/X; # ip/máscara da sua rede WAN
                };
       };

};

class eth1-WAN-cliente {
        bandwidth 360;
        limit 360;
        burst 8;
        priority 1;
        client DEDICADO_1 {
                bandwidth 360;
                limit 360;
                burst 8;
                priority 1;
                src { 0.0.0.0/0; };
                dst { 0.0.0.0/0; };
       };

};
class default { bandwidth 8; };

Entendendo: Dentro do arquivo eth1-qos.cfg temos duas classes especiais: eth1-WAN (client WAN) e eth1-WAN-cliente (client DEDICADO_1). A classe eth1-WAN estipula um limite de 100.000 kbps para tráfego para a sua própria rede (src e dst). A outra classe eth1-WAN-cliente vai limitar o tráfego para o “mundo externo” em 360kbps tanto para download (dst) quanto para upload (src). O que deve ser observado é que a classe eth1-WAN dá prioridade e libera a sua rede WAN para qualquer velocidade de tráfego enquanto a classe eth1-WAN-cliente limite todo o resto à 360kbps. O problema ocorre quando na LAN você tem diversos clientes concorrentes entre si pelos 360kpbs e ainda . Este caso é tratado em seguida.

2. Compartilhando conexão a uma taxa fixa

Um caso comum que pode ocorrer é você ter uma boa conexão e um cliente quer um link mais dedicado com servidor próprio. Supondo que você tenha um link de 1Mbps e o cliente contrate 360kbps que deve ser compartilhados através de um servidor próprio do cliente (qualquer pentium 100 já serve). Vamos considerar que a interface WAN seja a eth1 e a LAN a eth0. Na LAN não será preciso nenhuma limitação, contudo para a interface WAN (eth1) criamos o seguinte arquivo de configuração - /etc/htb/eth1-qos.cfg :

class eth1-WAN {
        bandwidth 100000;
        limit 100000;
        burst 64;
        priority 1;
        client WAN {
                bandwidth 100000;
                limit 100000;
                burst 64;
                priority 1;
                dst {
                        X.X.X.X/X; # ip/máscara da sua rede WAN
                };
                src {
                       X.X.X.X/X; # ip/máscara da sua rede WAN
                };
       };
 
};
 
class eth1-WAN-cliente {
        bandwidth 360;
        limit 360;
        burst 8;
        priority 1;
        client DEDICADO_1 {
                bandwidth 360;
                limit 360;
                burst 8;
                priority 1;
                src {
                        0.0.0.0/0;
                };
                dst {
                        0.0.0.0/0;
                };
       };
 
};
class default { bandwidth 8; };

Entendendo: Dentro do arquivo eth1-qos.cfg temos duas classes especiais: eth1-WAN (client WAN) e eth1-WAN-cliente (client DEDICADO_1). A classe eth1-WAN estipula um limite de 100.000 kbps para tráfego para a sua própria rede (src e dst). A outra classe eth1-WAN-cliente vai limitar o tráfego para o “mundo externo” em 360kbps tanto para download (dst) quanto para upload (src). O que deve ser observado é que a classe eth1-WAN dá prioridade e libera a sua rede WAN para qualquer velocidade de tráfego enquanto a classe eth1-WAN-cliente limite todo o resto à 360kbps. O problema ocorre quando na LAN você tem diversos clientes concorrentes entre si pelos 360kpbs e ainda . Este caso é tratado em seguida.

3. Limitando apenas as conexões para a Internet

Uma caso muito frequente é quanto temos um gateway em nossa rede que além de compartilhar a Internet fornece aos usuários de nossa WAN/LAN outros serviços como servidor de arquivo, ftp, etc. Se limitarmos o tráfego de acordo com o primeiro exemplo conseguimos controlar o uso do link da Internet, contudo todos os outros serviços fornecidos pelo gateway também serão “estrangulados”, tornado o uso da rede insuportável! O que fazer então? O segundo exemplo consegue resolver em parte nosso problema pois limita o tráfego globalmente apenas para conexões externas (WAN) e as conexões da LAN fluirão livremente. Mas por outro lado se tivermos qualquer serviço rodando pelo lado externo / WAN e que deve ser utilizado a partir de outra rede externa será limitado à 360kbps. Para resolver este problema existe duas alternativas: 1ª incluir as redes de onde serão acessados os serviços no “client WAN” da classe eth1-WAN (exemplo 2) ou 2ª limitar o tráfego apartir da interface da LAN (eth0), sem limitar o tráfego interno. A primeira alternativa pode se tornar um pouco inconveniente se os clientes/usuários externos acessarem de redes diversas. A segunda solução é a mais usual para a maioria dos casos. Então vamos deixar a WAN (eth1) com o tráfego liberado e faremos o controle de banda pela LAN (eth0), devemos criar o seguite arquivo /etc/htb/eth0-qos.cfg:

class eth0-LAN {
        bandwidth 100000;
        limit 100000;
        burst 32;
        priority 1;
        client LAN-LAN {
                bandwidth 100000;
                limit 100000;
                burst 32;
                priority 1;
                src {
                        X.X.X.X/X; # ip/máscara da sua rede WAN
                        192.168.0.0/24; # ip/máscara da sua rede LAN
                };
                dst {
                        X.X.X.X/X; # ip/máscara da sua rede WAN
                        192.168.0.0/24; # ip/máscara da sua rede LAN
                };
       };
 
       client LAN0-WAN {
                bandwidth 360;
                limit 360;
                burst 8;
                priority 1;
                dst {
                        0.0.0.0/0;
                };
                src {
                        0.0.0.0/0;
                };
       };
 
};
 
class default { bandwidth 8; };

Entendendo: Sempre que o destino ou a origem do tráfego for a nossa própria rede teremos uma taxa de 100.000kbps. Para todos os outros destinos e origens (0.0.0.0/0) estaremos limitando o tráfego à 360kbps.

4. Conclusão

A dupla HTB e HTB-Tools fazem a alegria de qualquer administrador de redes! @;)

4 Comentários »

10/março/2008

Controle de Banda Descomplicado com HTB Tools

Posts na série Controle de Banda com HTB-Tools

  1. Controle de Banda Descomplicado com HTB Tools
  2. HTB-Tools: exemplos práticos de configuração

Originalmente publicado em http://wasare.net em 12/08/2006 e na SlackwareZine Nº 9

 

  1. Introdução
  2. Instalação
  3. Configuração
  4. Ativando o HTB
  5. Monitorando o Controle de Banda

 

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.

Deixe um comentário »