Pessoal hoje iremos ver 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 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).
# 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
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 diretorio criado:
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ê sera 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 paginas web
serão armazenadas, responda:
/var/www/ ou outro diretório a
sua escolha.
Pronto o HTB-Tools já esta 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 as interfaces de rede eth0 e eth1. Os arquivos de
configuração são organizados em classes, cada classe pode ter uma sub-classe
que são os clientes, a classe principal é referente a banda total, todas as
sub-classes podem compartilhar banda entre elas, mas se existir mais de uma
classe principal elas não poderão compartilhar a banda.
Neste artigo iremos realizar a demonstração das regras comas classes
abaixo:
Zezinho – Terá o limite de banda de 256 kbps – 10.0.0.10
Ana – Terá o limite de banda de 512 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 trafego da Rede que não se enquadrar nas regras acima
irão ter 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. Iremos criar uma copia 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 podera utilizar
burst 2; # Numer máximo em Kbit
que uma classe pode enviar por vez
priority 1; # Nivel de prioridade, são
elas de 0 a 7, onde 0 é a maior
client zezinho { # Nome da Sub-Classe
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 mascara
};
};
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 trafego que não se encaixar nas classes acima.
Depois execute o comando abaixo para testar o arquivo:
# q_checkcfg
/etc/htb/eth1-qos.cfg
Se ocorrer tudo bem ate 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 http://speedtest.copel.net/
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 trafego 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 ai, espero que tenham gostado, até a próxima.
Olá amigo, muito bom o seu tutorial, segui mas não consegui fazer o controle do upload. Teria como me dar uma ajuda. Coloquei aqui neste site mais detalhes, mas sem resposta por eqto.
ResponderExcluirhttp://www.vivaolinux.com.br/topico/provedores/HTB-Nao-controla-UPLOAD
Amigo posta ai seu qos.cfg das placas de rede pra gente dar uma olhada.
ResponderExcluirOpa, desculpe a demora,
ResponderExcluirINICIO 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
# 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
# End of the scripT
FIM ETH2;
No eth0 não escrevi nem ativei nada, seria esse o problema?
----
Mais uma vez obrigado!
Amigo me desculpe a demora, estou com o tempo meio curto esse mes, mas vamos lá, confesso que só hoje consegui parar para ver com calma seu problema, eu fiquei com uma dúvida, voce disse la no vol que precisaria fazer transmissão ao vivo para a internet e por isso iria precisar limitar o up, até ai tudo bem, o que não entendi direito foi a sua eth1 (rede de transmissão), se voce vai fazer up pra internet porque esta utilizando essa interface? não era melhor voce utilizar sua eth0 que é sua interface WAN? o que voce precisa upar esta em uma faixa de rede diferente, por isso voceesta utilizando outra interface é isso? me explica melhor o porque dessa eth1 pra eu tentar te ajudar. Mais uma vez desculpa pela demora.
ResponderExcluirEste comentário foi removido pelo autor.
ExcluirSem problemas, eu tb, to quebrando cabeça com esse trem. Sobre a identação ocorre algo estranho eu tabulei os campos bem direitinho, mas na hora q colava no VOL ficava tudo alinha a esquerda, ae eu entrava para fazer a edição e aparecia a identação normalzinha, que coisa....
ExcluirRespondendo a sua pergunta, nao criei regra nenhuma no eth0, por imaginar (de forma errada provalvemente) que não funcionaria configurar a faixa 10.10.10.X da eth1 na eth0 (sendo que esta usa o ip 192.168.0.254, no forum la consta 8.0.0.254, mas vi esta faixa não era recomendada para rede local).
O servidor tem 3 placas ao todo,
eth0 - wan
eth1 - rede para um segundo prédio, que funcionam departamentos com tudo diferentes do meu.
eth2 - rede que transmitirá
eth0 - 192.168.0.254
eth1 - 10.0.0.254
eth2 - 10.10.10.254
O que eu gostaria na realidade era de criar uma regra específica que liberasse a velocidade de upload para 3 maquinas na rede da placa eth2, e limitasse todo o restante para 25kbps.
Obs: não sei se é importante mencionar mas a rede eth1 e eth2 praticamente não usarão a banda ao mesmo tempo.
Se eu criar o eth0-qos.cfg com o o src 10.10.10.51 por exemplo vai limitar o upload?
Mais uma vez obrigado.
relendo a sua pergunta do pq limitar na eth1, na verdade o computador em questão é um servidor squid, e vou utilizar um outro computador, 10.10.10.51 (por exemplo) para transmitir. E a rede continuará recebendo acessos de outras máquinas, smartphones,
ExcluirHaaaa outra coisa tenta organizar um pouco seu arquivo, ele ta meio bagunçado, tenta identar ele como fiz no exemplo do post. Assim fica melhor quando outras pessoas precisam ver seu conf.
ResponderExcluirAmigo o que vc precisa fazer para limitar o upload é fazer as regras no seu gateway, ou seja na saida da sua rede, e nele vc vai fazer a configuração na interface que tem a conexão com a internet, no seu caso a eth0, dai vc vai configurar para dar prioridade para as maquinas da rede que vc quer e deixar uma taxa para o restante desse rede e para a outra rede, mas acho que deixar só 25 kbps para o resto todo vai ficar meio complicado, mas é melhor vc fazer os testes e ver como a conexão vai ser comportar, qqr coisa me adiciona no gtalk que a gente bate um papo.
ResponderExcluirBlz, já me deu uma luz, mas confesso que não sei como fazer, pois já tentei escrever a configuração similar a da eth2, só modificando de dst para src, mas não funciona. Ativo o eth0 e todo o trafego é direcionado pra o default, já adicionei no gtalk, qdo der a gente conversa e faz o teste do upload. Eu falei de 25kbps, mas como tem 1mbps posso colocar mais, de repente uns 200kbps, pra o default e os 800k, pros pcs que fazem a transmissão...
ExcluirNa eth0(192.168.0.254), como limitar a faixa de ip da rede eth1 (10.0.0.x) e eth2(10.10.10.x)? Tenho visto http://tutolivre.net/br/htb-tools-exemplos-pr%C3%A1ticos-de-configura%C3%A7%C3%A3o este tutorial, mas nao serviu muito... sinceramente não sei por que não funciona adicionando a linha upload no eth2-qos.cfg! Mais uma vez obrigado pela ajuda.
ResponderExcluirBom dia! teria como mostrar como dou prioridade para o protocolo SIP na rede.
ResponderExcluirTem como configurar para usar o Mac Address ?
ResponderExcluir