Controle de banda com HTB-tools

Publicado por Rick em 04/02/2013

[ Hits: 26.050 ]

Blog: http://www.guiadoti.com

 


Controle de banda com HTB-tools



Pessoal, veremos uma ferramenta para controle de banda muito interessante, chamada HTB-tools. Ela auxilia na configuração de um algoritmo chamado HTB, que significa Hierarchical Token Bucket.

Este algoritmo possui algumas vantagens em relação ao CBQ, como velocidade, mais opções e ser mais robusto. Ele foi criado por Martin Devera e passou a ser incluído no kernel do GNU/Linux a partir do 2.4.20.

O HTB-Tools é uma ferramenta para controle e administração de banda, um software com vários recursos para auxiliar e simplificar o processo de alocação de banda, tráfego, download, upload, gerando e checando configurações para cada cliente isoladamente.

Bem, vamos para a instalação.

Estamos utilizando o Debian Squeeze como lab, a interface eth0 é WAN (Internet) e a eth1 é a LAN (rede local). Iremos começar instalando as dependências necessárias:

# aptitude update
# aptitude install make flex-old dialog libncurses5-dev kernel-package gcc


Depois das dependências, vamos levantar alguns módulos necessários:

# modprobe sch_htb
# modprobe sch_sfq
# modprobe cls_u32


Crie o diretório onde será copiado o manual:

# mkdir /usr/local/man/man8

Agora, faça o download do HTB-tools para sua máquina.

# cd /opt
# wget -cv
https://sites.google.com/site/guiadoti/arquivos/HTB-tools-0.3.0a.tar.gz

Após o download, extraia os arquivos:

# tar -xvzf HTB-tools-0.3.0a.tar.gz -C /usr/local
# cd /usr/local/HTB-tools-0.3.0a
# mkdir include/asm
# cd include/asm


Agora baixe a biblioteca "bitops.h" para o diretório criado:

# wget -cv https://sites.google.com/site/guiadoti/arquivos/bitops.h

Volte para a raiz do HTB-tools:

# cd /usr/local/HTB-Tools-0.3.0a

Agora podemos instalar a ferramenta sem nenhum problema:

# make
# make full


Nesse momento você será questionado onde será o diretório de execução do serviço, responda:

/etc/init.d/

Depois, você será questionado sobre o diretório onde as páginas Web serão armazenadas, responda:

/var/www/ (ou outro diretório a sua escolha)

Pronto. O HTB-tools já está instalado e pronto para ser utilizado.

Agora vá para os arquivos de configuração do HTB-tools:

# cd /etc/htb

Aqui você vai encontrar os arquivos "eth0-qos.cfg" e "eth1-qos.cfg", eles correspondem respectivamente às interfaces de rede eth0 e eth1. Os arquivos de configuração são organizados em classes, cada classe pode ter uma subclasse que são os clientes. A classe principal é referente à banda total, todas as subclasses podem compartilhar banda entre elas, mas se existir mais de uma classe principal, elas não poderão compartilhar a banda.

Nesta dica, realizaremos a demonstração das regras com as classes abaixo:
  • Zezinho → Terá o limite de banda de 256 kbps - 10.0.0.10
  • Ana → Terá o limite de banda de512 kbps - 10.0.0.11
  • João → Terá o limite de banda de 1024 kbps - 10.0.0.12
  • Marina → Terá o limite de banda de 1024 kbps - 10.0.0.13

O restante do tráfego da rede, que não se enquadrar nas regras acima, terão uma banda de 2048 kBps (2 MB), lembrando que a banda total é de 5120 kBps (5 MB).

Iremos configurar o arquivo contido em /etc/htb, como a interface eth1 é a nossa conexão com a rede local, iremos alterar o arquivo "eth1-qos.cfg" para configurar o controle de download.

Criaremos uma cópia do arquivo original e começar um novo:

# mv eth1-qos.cfg eth1-qos.cfg.old
# pico eth1-qos.cfg


################
# eth1-qos.cfg #
################
# for how to configure and use see docs/HowTo/


class guia_do_ti {

   # Nome da classe principal
   bandwidth 5120;

   # Largura da banda garantida, nesse caso a total
   limit 5120;

   # O máximo de banda que a classe poderá utilizar
   burst 2;

   # Número máximo em Kbit que uma classe pode enviar por vez
   priority 1;

   # Nível de prioridade, são elas de 0 a 7, onde 0 é a maior


   client zezinho { # Nome da Subclasse

      bandwidth 256;
      # Largura da banda garantida (banda mínima)
      limit 300;

      # O máximo de banda que a classe poderá utilizar
      burst 2;

      priority 1;

      dst {
         # Destino do tráfego (Download)
         10.0.0.10/32; # Endereço IP do cliente e máscara
      };

   };


   client ana {

      bandwidth 480;
      limit 512;
      burst 2;
      priority 1;

      dst {
         10.0.0.11/32;
      };

   };


   client joao {

      bandwidth 480;
      limit 512;
      burst 2;
      priority 1;

      dst {
         10.0.0.12/32;
      };

   };


   client marina {

      bandwidth 1024;
      limit 1024;
      burst 2;
      priority 1;

      dst {
         10.0.0.13/32;
      };

   };


   client rede_local {

      bandwidth 2048;
      limit 4096;
      burst 2;
      priority 1;

      dst {
         10.0.0.0/24; # Faixa de endereços da rede (254 IPs)
      };

   };

};

class default { bandwidth 8; }; # Classe padrão para o tráfego que não se encaixar nas classes acima

Obs.: Respeitem a indentação.

Depois execute o comando abaixo para testar o arquivo:

# q_checkcfg /etc/htb/eth1-qos.cfg

Se ocorrer tudo bem até aqui, rode o comando abaixo para iniciar o HTB-tools:

# htb eth1 start
Ou:
# /etc/init.d/rc.htb start_eth1

Existem outros parâmetros que podem ser usados no HTB-tools. No nosso exemplo, fizemos o controle do download (dst = destination). Para controlar o upload, utiliza-se src (source) no lugar do dst.

Se quiser controlar uma porta específica, basta incluir o número da porta logo após o IP da rede/host. Ex.: Para a porta 80 ==> 10.0.0.0/24 80.

Agora é só testar o controle em algum cliente da rede, vocês podem fazer os testes usando o SpeedTest e baixando arquivos da Internet e acompanhar a taxa de transferência, lembrando que a taxa de transferência é 10% do limite que você declarar.

Para acompanhar o consumo de tráfego em tempo real, utilize:

# /etc/init.d/rc.htb show_eth1

Para mais informações:

# /etc/init.d/rc.htb --help

Ou leia o manual:

# pico /usr/local/HTB-tools-0.3.0a/docs/HowTo/HTB-tools-howto.txt


Pessoal, é isso aí, espero que tenham gostado. Até a próxima.

Dica também publicada em: Guia do TI: Controle de Banda com HTB-Tools

Outras dicas deste autor

Ambiente seguro com chroot

MySQL - Comandos básicos

Nikto - Instalação e utilização

OSSEC - Instalação e configuração

Port knocking - Instalação e configuração

Leitura recomendada

DNS forwarding - um DNS universal

Guardião Itaú Linux 2014

Pesquisando no Rapidshare

Otimizando seu cache DNS fuçando no BIND

TIM Kit Fast em Linux

  

Comentários
[1] Comentário enviado por dheeoo em 19/02/2013 - 13:24h

Olá amigo, estou com o seguinte problema:
http://www.vivaolinux.com.br/topico/provedores/HTB-Nao-controla-UPLOAD



o HTB-Tools não limita a velocidade de UPLOAD, da minha rede. Já revirei este site, e tantos outros que demonstram como configurar, bem explicadinho e tudo mais, e confesso que já estou cansado de tanto procurar.

Meu Servidor:
- Roda squid transparente;
- Usa HTB-Tools de forma correta para limitar os downloads;
- Abrigará serviços de DDNS, SMB, SSH, etc...
- Controlará um link de 10M de Down / 1M de Up;
- Conta com eth0 - 8.0.0.254 (internet/modem adsl) / eth1 - 10.0.0.254 (rede transmissão) / eth2 - 10.10.10.254 (rede Geral);
- Na rede conectada a eth1 precisarei de (quase) toda a banda de Upload, pois utilizarei para transmissão ao vivo para a internet, daí a necessidade de limitar o Upload, e não dá pra usar o delay_pool do squid, pois este só limita a velocidade do tráfego na porta 80, ou estou errado?


Já vi vários sites:
http://tutolivre.net/br/htb-tools-exemplos-pr%C3%A1ticos-de-configura%C3%A7%C3%A3o
http://blog.abratel.com.br/2011/03/23/gerenciamento-no-controle-de-banda-%E2%80%93-htb-tools/

http://www.linuxblog.ro/htb-tools-tutorial-traffic-shaping/
http://info-tec.blogspot.com.br/2010/07/controle-de-banda-com-htb-squid.html

Esses dois últimos me ajudaram a entender algumas coisas a mais, mas apelo à comunidade VOL para tentar resolver este problema.

Antecipamente agradeço.

[2] Comentário enviado por rick_G em 19/02/2013 - 15:19h

Amigo posta seus qos.cfg pra gente dar uma olhada como esta, fiquei esperando tu postar la no guia do ti quando tu deixou um comentário la do seu problema, como não postou pensei que tinha resolvido, no aguardo.

[3] Comentário enviado por dheeoo em 21/02/2013 - 14:10h

Opa, desculpe a demora,

INICIO ETH1
# Beginning of the script
class Intranet { bandwidth 100000; limit 100000; burst 0; priority 0; que sfq;
client redeinterna-src { bandwidth 100000; limit 100000; burst 0; upload 100000; priority 1; dst { 10.0.0.0/24 20 21 22 138 139; }; };
client redeinterna-dst { bandwidth 100000; limit 100000; burst 0; upload 100000; priority 1; dst { 10.0.0.0/24 20 21 22 138 139; }; };
};

class RedeGERAL {
bandwidth 10204;
limit 111000;
burst 2;
priority 2;

client IP1-Bandeira-NOT {bandwidth 3000;limit 5000;burst 1;priority 1;dst {10.0.0.1/32;};};
client IP2 {bandwidth 300;limit 500;burst 1;priority 2;dst {10.0.0.2/32;};};
client IP3 {bandwidth 300;limit 500;burst 1;priority 2;dst {10.0.0.3/32;};};
client IP4 {bandwidth 300;limit 500;burst 1;priority 2;dst {10.0.0.4/32;};};
client IP5-IASD-Comunicacao {bandwidth 500;limit 8500;burst 1;priority 5;dst {10.0.0.5/32;};};
client IP6 {bandwidth 55500;limit 55500;burst 1;priority 2;dst {10.0.0.6/32;};};
client IP7-iDeo {bandwidth 300;limit 500;burst 1;priority 2;dst {10.0.0.7/32;};};
client IP8-IASD-Secretaria {bandwidth 3000;limit 8500;burst 1;priority 1;dst {10.0.0.8/32;};};
client IP9 {bandwidth 300;limit 500;burst 1;priority 2;dst {10.0.0.9/32;};};
client IP10-Colibri-PC {bandwidth 1000;limit 5500;burst 1;priority 2;dst {10.0.0.10/32;};};
[...]
client IP50 {bandwidth 300;limit 500;burst 1;priority 2;dst {10.0.0.50/32;};};
};

class default { bandwidth 111; };

# Thank you for using this script <liviudm[AT]gmail.com>
# End of the script
FIM ETH1
---------------

INICIO ETH2

# Beginning of the script
class Intranet { bandwidth 100000; limit 100000; burst 0; priority 0; que sfq;
client redeinterna-dst { bandwidth 100000; limit 100000; burst 0; upload 100000; priority 1; dst { 10.10.10.0/24 20 21 22 138 139; }; };
client redeinterna-dst { bandwidth 100000; limit 100000; burst 0; upload 100000; priority 1; dst { 10.10.10.0/24 20 21 22 138 139; }; };
};


# Beginning of the script
class Rede_SOM {
bandwidth 10204;
limit 50000;
burst 1;
priority 1;

client IP51-iDeo {bandwidth 100;limit 500;burst 1;priority 1;dst {10.10.10.51/32;};};
client IP52-Bandeira-WiFi {bandwidth 1000;limit 8500;burst 1;priority 1;dst {10.10.10.52/32;};};
client IP53 {bandwidth 100;limit 500;burst 1;priority 1;dst {10.10.10.53/32;};};
client IP54 {bandwidth 100;limit 500;burst 1;priority 1;dst {10.10.10.54/32;};};
client IP55 {bandwidth 100;limit 500;burst 1;priority 1;dst {10.10.10.55/32;};};
client IP56 {bandwidth 100;limit 500;burst 1;priority 1;dst {10.10.10.56/32;};};
[...]
client IP99 {bandwidth 100;limit 500;burst 1;priority 1;dst {10.10.10.99/32;};};
};

class default { bandwidth 300; };

# Thank you for using this script <liviudm[AT]gmail.com>
# End of the scripT
FIM ETH2;


No eth0 não escrevi nem ativei nada, seria esse o problema?
----

Mais uma vez obrigado!




[4] Comentário enviado por rafael.sul em 29/10/2013 - 14:40h

amigo, gostaria de saber para eu fazer por exemplo controle de banda da rede local e não so do link de internet o que mudaria. Gostaria de limitar tranferencia de longos arquivos do setor de marketing do servidor inforcando a rede.abraços.

[5] Comentário enviado por williansaldanha em 29/09/2016 - 15:31h

Olá amigo, fiz aqui e rodou tudo certo!! Porém percebi que quando vou copiar um arquivo de uma máquina para outro pela rede, a velocidade também cai! Exemplo, se eu determinar que minha rede local 10.160.4.0/24 tiver uma velocidade de banda de 256 kbps ela interfere na cópia de arquivos do servidor de arquivos, e como na minha rede roda um programa de automação, consequentemente esse programa fica lento... Pra ficar mais ou menos, tive que liberar uma banda de 800 pra toda rede, e algumas máquinas ficaram com a banda total que é 4 mb. Tem algo que eu possa fazer pra melhor isso? Estou usando assim!!!

client rede_local {

bandwidth 800;
limit 800;
burst 2;
priority 1;

dst {
# Faixa de endereç da rede (254 IPs)
10.160.4.0/24;
};

};

[6] Comentário enviado por cesarpazebao em 01/07/2017 - 14:45h

Boa tarde! Otimo post parabens pela explicação.
Estava tentando implantar esse controle em um servidor com 3 placas de rede sendo:

eth0 acesso a Internet
eth1 rede local
eth2 rede sem fio


Primeiramente estartei o serviço como dst apenas para rede local (eth0) e o mesmo funcionou corretamente, pois fiz testes de donwloads e os mesmos funcionaram perfeitamente! Teste esse, feito no site do kurumin para download, onde apos estartar o serviço, o tempo para download aumentou consideravelmente, o que nao acontecera quando estava com o htb-tools desabilitado!

Pergunta-se entao: Caso queira colocar o serviço tambe na rede sem fio (eth0) este serviço funcionaria? uma vez que teria somente o dst?


Grato


Cesar



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts