Controle de banda com HTB-Tools

Primeiramente obrigado por acessar o meu artigo! Este tem como objetivo expor aos usuários como instalar e configurar o serviço de controle de banda HTB-Tools, afim de priorizar aplicações de Internet como Skype, sub-redes, um computador ou uma rede inteira, limitando ou liberando quantidade de banda.

[ Hits: 79.928 ]

Por: Rodrigo Paiva Moschetto em 07/07/2008 | Blog: http://www.essencialinfo.eti.br


Hardware, distro, link e iptables



Aqui vou falar sobre alguns itens e configurações básicas que foram utilizadas na experiência.

Hardware (Computador)

Para essa experiência foi utilizado um computador pessoal padrão IBM-PC (x86) com a seguinte configuração:
  • Processador Intel Pentium III 850Mhz
  • Memória RAM ITAUCOM PC133 256MB
  • HD 20GB
  • Mainboard Soyo 6vca-133
  • VGA PCI 2MB
  • 2 Placas de rede Realtek modelo rtl8139
  • DVD-ROM

Distribuição Linux

A distribuição do Linux utilizada nessa experiência foi o Slackware 12 em DVD instalado de forma completa.

Dica: Geralmente eu instalo sempre o sistema operacional completo, pois acho mais fácil desinstalar um pacote para substituir por outro atualizado do que ter que ficar procurando ou correndo atrás dos pacotes que faltam, ou ainda ficar adivinhando o nome do pacote que eu deveria ter instalado da distribuição para que determinado serviço ou programa funcione.

Link de internet e configuração de rede

O link de Internet é fornecido pela NetVirtua de 2Mbits e a rede local é distribuída por um HUB de 8 portas de velocidade 10/100Mbits.

As interfaces ethernet foram configuradas da seguinte forma:

eth0 (Internet) - com dhcpclient
IP: 0.0.0.0/0

eth1 (Rede Local - LAN) - com ip fixo e dhcpserver
IP: 192.168.0.1/24

Configuração iptables (firewall)

Com o sistema operacional instalado e funcionando adequadamente no computador, utilizamos o IPTables para configurar NAT da interface de rede local (eth1) para que todos os pacotes sejam traduzidos para a rede externa (Internet).

Para isso foi criado um script pequeno, já que nessa rede não há restrições de acesso:

1. Criação do script:

# vi /usr/local/sbin/firewall

#!/bin/bash
SBINDIR=/usr/sbin
$SBINDIR/iptables -F
$SBINDIR/modprobe iptable_nat

# Tradução de endereços (NAT)
$SBINDIR/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

# INCLUA DEMAIS REGRAS.... CASO NECESSÁRIO....E SALVE O SCRIPT

2. Dê permissão de execução para o script:

# chmod +x /usr/local/sbin/firewall

3. Incluindo o script na inicialização:

# vi /etc/rc.d/rc.local

# Inicia o firewall
if [ -x /usr/local/sbin/firewall ]; then
  . /usr/local/sbin/firewall
fi

Pronto! Agora temos todas as estações compartilhando o acesso a Internet do servidor.

Logicamente, caso você deseje restringir acesso a determinadas estações, fique a vontade.

    Próxima página

Páginas do artigo
   1. Hardware, distro, link e iptables
   2. Instalando e configurando o HTB-Tools
   3. Testando e monitorando o consumo de banda
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

O primeiro FISL ninguém esquece!

Promoção RedBug + Viva o Linux

Instalando o PostgreSQL no Slackware

Análise do Syllable, mais um interresante sistema operacional livre

Logrotate, uma importante ferramenta de administração dos logs do sistema

  
Comentários
[1] Comentário enviado por removido em 07/07/2008 - 10:13h

Ótimo artigo!!!

é bom ver artigos de verdade novamente no VoL!

Parabéns e obrigado!

[2] Comentário enviado por gjr_rj em 07/07/2008 - 14:05h

Excelente artigo !!!

Parabéns!!!

[3] Comentário enviado por nps em 07/07/2008 - 15:01h

Estava precisando demais de um artigo funcional do htb..

[4] Comentário enviado por grandmaster em 09/07/2008 - 13:04h

Realmente muito bom o o artigo.

Também estava precisando de um artigo sobre o HTB porque acabo sempre achando artigos sobre CBQ.

---
Renato de Castro Henriques
CobiT Foundation 4.1 Certified ID: 90391725
http://www.renato.henriques.nom.br

[5] Comentário enviado por rodrigomoschetto em 12/07/2008 - 22:57h

Obrigado a todos pela visita!

[6] Comentário enviado por junior em 24/07/2008 - 21:00h

Amigo, o HTB é melhor que CBQ pra fazer esse tipo de controle de banda?
dá pra fazer o controle baseado em um grupo de usuários autenticados no squid?

Um abraço.

[7] Comentário enviado por rodrigomoschetto em 25/07/2008 - 01:43h

Rapaz, eu optei em aprender a usar o HTB pela facilidade e não por ser melhor ou pior do que o CBQ, pois, ambos os serviços têm a mesma função, o que muda é a maneira de que cada um é configurado. Eu achei o HTB mais rápido de ser configurado e mais explicativo.

No próprio Squid você já pode fazer um controle de banda sem precisar usar o HTB. E, aqui no VOL tem muitos artigos ou tutoriais que falam sobre isso.

Boa sorte!

[8] Comentário enviado por k4mus em 28/07/2008 - 14:07h

Amigo, no caso o bandwidth seria a velocidad minima "garantida" ao client, e o limit é valor maximo que este usuario pode chegar ?

Eh que configirei aqui mas ele nao esta garantindo o valor minimo nao. Quando tenho dois clientes baixando ao mesmo tempo, normalment um "rouba" a banda quase toda do outro.

[9] Comentário enviado por rodrigomoschetto em 28/07/2008 - 15:48h

Minima não, Bandwidth é a velocidade total do seu link de Internet, é Limit é o valor que pode ser consumido do Bandwidth, ou seja, do total.

Por ex, meu link é de 2M(2048k) mas eu quero que seja consumido no máximo 1.5M(1500k) do total.

Agora, qto ao compartilhamento veja se vc não colocou os dois clientes em uma mesma subclasse.

Lembre-se! Dois clientes em uma mesma sub-classe irão compartilhar a mesma banda!

[10] Comentário enviado por k4mus em 28/07/2008 - 17:37h

Obrigado pela resposta fera ,


Amigo, vc falou que limit é o valor que pode ser consumido do bandwidth. Fiquei um pouco confuso quando se refere à subclasse.

Por exemplo, na subclase "client pdc-01": o bankwidth eh 100 e o limit 128. Isto quer dizer que em um horario de pico que todos estejam fazendo download. O cliente 192.168.0.2/32 tera garantido pelo htb velocidade variando de 100 a 128 ?


Desculpe ae se ta dificil pra eu entender ; ;)


grato





[11] Comentário enviado por rodrigomoschetto em 28/07/2008 - 20:26h

Exatamente! 100 é a largura da banda mas o total é 128. E, isso varia mesmo na hora em que ambas interfaces estiverem trafegando dados.

Qto a sub-classe, utilize sempre um IP por sub-classe. Caso queira limitar banda para serviços, crie uma outra sub-classe, como eu fiz no exemplo para o skype.

[12] Comentário enviado por leandroros em 30/07/2008 - 10:52h

Bom dia!

gostei muito do artigo, e gostaria da sua opinião para uma solução que quero definir aqui onde trabalho. É o seguinte eu tenho um link de 4M full e gostaria de limitar 1M para acesso de uma máquina que esta fora da empresa. Este acesso é pela internet e 70% dos usuários da empresa acessam esta máquina o dia inteiro. por isso quando a minha banda esta lotada eu perco a qualidade de acesso a esta máquina. Você acha que esta ferramenta pode me atender?

[13] Comentário enviado por rodrigomoschetto em 30/07/2008 - 13:12h

Legal, aí está uma coisa que eu nunca havia pensado.

Eu acredito que você pode restringir a banda sim para os usuários "por serviço". Acho que essa é a saída.

Por ex: Limitar a banda para todo mundo que acessar esse computador externo via porta 445.. ou então outra porta... sei lá....

Mas eu aposto que funciona!

[14] Comentário enviado por royrocha em 12/08/2008 - 16:50h

Gostei muito do artigo... já tá guardado no bookmarks..

gostaria de levantar uma dúvida: na minha rede, por exemplo, estou usando eth1 para a rede interna e eth2 para a rede pública. Sendo assim, como ficariam os arquivo de configuração eth0-qos.cfg e eth1-qos.cfg? Para associar eth1 para rede interna e eth2 para rede pública teria colocar algo do tipo eth1-qos.cfg e eth2-qos.cfg, por exemplo...

[15] Comentário enviado por rodrigomoschetto em 16/08/2008 - 17:48h


leandroros
Com certeza funciona! Boa sorte!

royrocha
Se eu não me engano, o htb na hora da instalação já cria esses arquivos de acordo com as interfaces configuradas no seu sistema operacional.

roberto
Pelo que eu li no site do desenvolvedor, não tem limite para criação de classes ou sub-classes. Tudo depende da largura de banda e infraestrutura utilizada. Logicamente, para mais de 50 classes/subclasses recomendo uma rede gigaethernet com switches gerenciáveis que proporciona um melhor controle, desempenho e confiabilidade.

[16] Comentário enviado por birobiro em 17/09/2008 - 08:36h

Galera alguem aqui sabe como fazer pra aplicar uma funca timeno HBT tipo o time do CBQ, preciso mto disso galera, aqui no trampo taum me pedindo isso e eu naum consegui nada a respeito ja visitei varios foruns e nada, peca a essa galera antenada do vol se poder me passa essa info. valew grandes...

[17] Comentário enviado por rodrigomoschetto em 17/09/2008 - 11:26h

birobiro
O que a função time faz realmente?

[18] Comentário enviado por salfix em 07/10/2008 - 16:30h

ah to com os mesmo dilema, o que queremos é apenas uma função que possa parar ou iniciar o controle de banda de modo agendado como é feito no cbq com a funcao time e a sintase no cbq é TIME=18:00-06:00;256Kbit/25Kbit aqui no htb ja testei e naum funcionou...

[19] Comentário enviado por cirinho em 08/12/2009 - 05:07h

Estou com problema

Ele roda e aparentemente funciona normal

quando dou htb eth1 stats para monitorar o consumo ele mostra um erro

na verdade é sempre na linha do upload

class netgame {
bandwidth 2500;
limit 3500;
burst 2;
priority 1;

client server {
bandwidth 1024;
limit 2500;
burst 2;
priority 1;
# upload 150;
dst {
10.0.0.100/32;
};
};

client netgame01 {
bandwidth 600;
limit 1024;
burst 2;
priority 1;
# upload 150;
dst {
10.0.0.101/32;
};
};


};



class default { bandwidth 64; };


[20] Comentário enviado por cirinho em 08/12/2009 - 05:08h

eu comentei a linha do upload e ai funcionou

[21] Comentário enviado por cirinho em 08/12/2009 - 05:13h

porém eu preciso implementar o limite de upload como resolver?

[22] Comentário enviado por tosko em 08/07/2010 - 14:41h

o que acontece com as maquinas que não estão listadas nos scripts do htb? navegaram sem restrição?

[23] Comentário enviado por ricardors em 03/07/2012 - 08:48h

Estou com dúvidas na parte de configuração, eu dou start nas placas e até aí tudo OK, a internet entra pelo eth de origem e realmente limita a banda, mas eu não estou entendo como eu disteribuo a internet para os outros computadores, eu coloco um cabo de rede saindo da placa para um HUB? Seria isso?

[24] Comentário enviado por cirinho em 15/09/2012 - 03:33h


[22] Comentário enviado por tosko em 08/07/2010 - 14:41h:

o que acontece com as maquinas que não estão listadas nos scripts do htb? navegaram sem restrição?


Quando não está listado no script, cai na regra/classe padrão, algo do tipo:

class default { bandwidth 64; };

Geralmente se coloca um valor bem baixo do tipo: bandwidth = 8 ou 16 ou 32 ou 58 ... depende de cada caso e da necessidade de cada rede!


...


[23] Comentário enviado por ricardors em 03/07/2012 - 08:48h:

Estou com dúvidas na parte de configuração, eu dou start nas placas e até aí tudo OK, a internet entra pelo eth de origem e realmente limita a banda, mas eu não estou entendo como eu disteribuo a internet para os outros computadores, eu coloco um cabo de rede saindo da placa para um HUB? Seria isso?


No meu caso é o seguinte ...
eth0 - liga ao modem
eth1 - liga ao hub e demais clientes

Então o meu script para o eth0 eu deixo vazio, ou posso fazer algo genérico como no exemplo acima 0.0.0.0 pra toda rede...

No eth1 eu crio a classe internet e dentro dela os clientes. Respondendo também o @tosko no final tem a classe default que é a regra geral que se aplica pros demais casos que não listamos especificamente no script.

Eu também crio uma classe intranet onde libero o tráfego de 100mbit para a rede interna, no meu caso nas portas do samba, pra compartilhar arquivos sem a limitação feita para a internet :)

[25] Comentário enviado por arasouza em 05/12/2012 - 14:44h

Parabéns ao artigo, apesar de estarmos em 2012, ainda serviu para dirimir algumas dúvidas.. flw

[26] Comentário enviado por edulkrp em 15/06/2016 - 09:50h

Segue um script que eu criei e funciona perfeitamente para quem quiser testar.

#!/bin/bash
####### Regras para controle de banda linux tc iproute #######

#interface da rede interna
interna=eth0

#interface da rede externa internet
externa=eth1

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A POSTROUTING -t nat -o $externa -j MASQUERADE

ips=("
ip=10.0.0.164|Down=10mbit|Up=10mbit|descricao=filipi_mac_wifi
ip=10.0.0.162|Down=10mbit|Up=10mbit|descricao=ipad_Wladimir
");

if [ "$ips" ];then
#Download
tc qdisc del dev $interna root
tc qdisc add dev $interna root handle 11: cbq bandwidth 100Mbit avpkt 1000 mpu 64

contador1=0;
contador2=0;

for i in $ips
do
contador1=$(($contador1+1))
contador2=$(($contador2+1))

ip=$(echo $i | cut -d'|' -f1 | cut -d'=' -f2)
down=$(echo $i | cut -d'|' -f2 | cut -d'=' -f2)

tc class add dev $interna parent 11:0 classid 11:$contador1 cbq rate $down weight 100kbit allot 1514 prio 1 avpkt 1000 bounded
tc filter add dev $interna parent 11:0 protocol ip handle $contador2 fw flowid 11:$contador1
iptables -t mangle -A POSTROUTING -d $ip -j MARK --set-mark $contador2
done

contador1=0;

#Upload
tc qdisc del dev $externa root
tc qdisc add dev $externa root handle 10: cbq bandwidth 100Mbit avpkt 1000 mpu 64

for i in $ips
do
contador1=$(($contador1+1));
contador2=$(($contador2+1));

ip=$(echo $i | cut -d'|' -f1 | cut -d'=' -f2);
up=$(echo $i | cut -d'|' -f3 | cut -d'=' -f2);

tc class add dev $externa parent 10:0 classid 10:$contador1 cbq rate $up weight 100kbit allot 1514 prio 1 avpkt 1000 bounded
tc filter add dev $externa parent 10:0 protocol ip handle $contador2 fw flowid 10:$contador1
iptables -t mangle -A FORWARD -s $ip -j MARK --set-mark $contador2
done
fi


Contribuir com comentário