terça-feira, 13 de julho de 2010

Controle de banda com HTB (Controlando Upload e Download) + Squid

O texto abaixo consegui na net e atraves dele consegui compreender o que estava acontecendo com meu proxy pois conseguia limitar download mais upload não funcionava. Eis a Solução HTB, abaixo segue tutorial de como instalar em Fedora.
_____________________________________________________________________

Interferência do Squid no funcionamento do QOS.

Quando se usa o squid e o qos ao mesmo tempo, o controle da velocidade do upload não funciona, os usuários conseguem fazer upload a toda velocidade. Entretanto, o controle do download funciona, mesmo quando os arquivos já estão no cache.

Porque isso acontece?

1 - O nosso QOS só é capaz de controlar o tráfego que é ENVIADO por uma determinada placa de rede.
2 - O upload é controlado pelo tráfego que é enviado pela placa EXTERNA. Tudo que SAI do linux pela placa externa (destinado a internet), é considerado upload.
3 - O download é controlado pelo tráfego que é enviado na placa INTERNA. Todo que SAI do linux pela placa interna (destinado aos usuários) é considerado download.
4 - Sem o squid, o trafego entre essas duas placas é praticamente um-pra-um, tudo que entra de um lado, sai do outro, e vice-versa.
5 - O squid funciona exatamente NO MEIO das duas placas, interferindo na comunicacao normal que o linux faria entre elas.

Sem o squid:
Quando uma requisão chega vinda de um usuário interno o sistema sabe qual é o ip dele, e essa requisição é repassada diretamente para a internet. Sendo assim, o linux sabe DE QUEM É um determinado upload, sabendo o ip do usuário o upload pode ser enquadrado em uma das classes do QOS, e é devidamente limitado pela banda daquela classe.

Com o squid:
O usuário faz uma requisição para o squid. E esse, por sua vez, vai na internet buscar os dados.
Quando você usa o squid, todo o tráfego do http pertence ao próprio squid. E o squid usa o ip do proprio Linux (onde ele está instalado).
E como se o Linux estivesse fazendo todos os downloads e uploads do http sozinho, sem os usuários da lan.

Assim o linux NÃO SABE a qual usuário pertence um determinado tráfego, passa a ser TUDO do Squid. Principalmente porque o squid pode guardar esses dados no cache e pode entregá-lo para mais de um usuário interno. (afinal, essa é a razão do squid existir).

Quando o squid faz upload, o trafego que está saindo pela placa de rede da internet é indentificado pelo linux como pertencente ao proprio linux (é o squid que está fazendo esse upload, não o usuário). E, como o qos não tem como identificar o ip do usuário que solicitou aquele tráfego, ele não se enquandra em classe nenhuma.

Mas então, porque o download é limitado?

Quando o squid envia dados para um cliente que está na LAN, o qos detecta um trafego de saida na placa de rede interna e ele tem como saber para qual ip interno esses pacotes serão entregues. Dessa forma, o tráfego é enquadrado em uma classe e a velocidade é limitada de acordo com a banda estabelecida para essa classe. MESMO QUE ESSES DADOS ESTEJAM VINDO DO CACHE.

Na verdade, o linux não sabe se o squid pegou o dado no cache, ou foi buscar na internet. Como o qos atua na saida da placa interna, tudo que passar por alí será limitado, independente de onde veio. "

No caso o texto generaliza qualquer QOS.
_______________________________________________________________________



GERENCIAMENTO NO CONTROLE DE BANDA – HTB-Tools



ATENÇÃO: O PACOTE DO HTB-TOOLS E O ARQUIVO BITOPS.H ENCONTRAM-SE ANEXADOS.

1. INTRODUÇÃO
A economia de recursos, equipamentos, serviços, compartilhamento de Internet entre outras vantagens tornam indispensável o uso de redes de computadores em diversas instituições. Porém é preciso dividir o uso dos recursos entre os usuários de forma que todos possam usufruir sem prejudicar os demais. Esse controle pode ser resolvido com o HTB, que impõe o controle na banda e, então, garante uma taxa de conexão de acordo com as necessidades e as prioridades de cada usuário.

2. O QUE É HTB?
O HTB (Hierarchical Token Bucket) é um recurso nativo do kernel GNU/Linux utilizado no controle do tráfego de um link físico de acesso a Internet em uma rede de computadores.

3. OS PRÉ-REQUISITOS PARA USAR O HTB E HTB-TOOLS NO FEDORA 9
A distribuição FEDORA 9 com o kernel Linux versão 2.6.18 ou superior deve estar corretamente instalada porque os módulos do HTB já estarão inclusos no kernel.

4. A INSTALAÇÃO DO HTB E DO HTB-TOOLS NO FEDORA 9

Confirmado que o seu kernel é pertencente a versão 2.6.18 ou superior, iremos agora começar todo o procedimento para a instalação e configuração do HTB-Tools.

1º passo
Realizar a instalação dos pacotes os quais o HTB Tools possui dependência. Os pacotes são: Make, Flex, Gcc e o Dialog. Em seu terminal, digite o seguinte comando, sendo usuário root:

[root@servidor] yum install make flex gcc dialog

2º passo
Agora iremos levantar o seguintes módulos necessários. Em seu terminal, digite o seguinte comando, sendo usuário root:

[root@servidor] modprobe sch_htb
[root@servidor]modprobe sch_sfq
[root@servidor]modprobe cls_u32

3º passo
Crie o diretório man8 (na instalação será copiado um arquivo de manual para esta
pasta). E caso não seja criado, apresentará erro na instalação do pacote HTB-Tools.

[root@servidor] mkdir /usr/local/man/man8

4º passo
Agora, realize o download do arquivo htb_tools-0.3.0a.tar.gz. Feito o download, descompactamos o pacote:

[root@servidor] tar –zxvf htb_tools-0.3.0a.tar.gz

Entre no diretório HTB-TOOLS-0.3.0a.

[root@servidor] cd HTB-TOOLS-0.3.0a

Dentro do diretório HTB-TOOLS-0.3.0a, crie um diretório dentro do subdiretório /include. O diretório criado terá o nome de asm (/include/asm):

[root@servidor] mkdir /include/asm

Após criar o diretório /include/asm, copie o arquivo bitops.h (o arquivo está disponibilizado junto com o artigo) para dentro dele.

Feito isto, o HTB-Tools já se encontra todo configurado e pronto para a sua instalação.
Volte para a raiz do diretório HTB-TOOLS-0.3.a e execute os seguintes comandos:

[root@servidor /HTB-TOOLS-0.3.0a] make && make full

Isto irá instalar os binários q_parser, q_show, q_checkcfg, htb, htbgen no diretório
/sbin , o script rc.htb irá para o diretório de scripts que for indicado, os dois arquivos de
configuração padrão eth0-qos.cfg para upload and eth1-qos.cfg para download irão
para a pasta /etc/htb e também instalará o q_show.php e o gerador de configurações
wHTB-tools.

Pronto, o HTB-TOOLS está funcionando em conjunto com o HTB.

5. CONFIGURANDO O HTB-TOOLS NO FEDORA 9

É bastante trivial a configuração do HTB-Tools. Imaginando que o tráfego da rede interna tenha que passar da interface de rede eth0 (placa onde está sua rede interna, isto é, conectada no swicth) para sair pela eth1 (placa rede conectada com o roteador), então, basta alterar o eth0-qos.cfg padrão (isto para o eth0, é claro) conforme a necessidade da rede. Digamos que se deseja que o tráfego da rede de uma empresa 192.168.1.0/24 (rede_1) tenha exclusividade de 512Kbps no máximo e 480Kbps garantidos nos dias de pico. Sabendo que a banda máxima que a rede pode atingir é de 5Mbps, então, o arquivo eth0-qos.cfg ficaria assim:

class Rede_Empresa {
bandwidth 5000;
limit 5000;
burst 0;
priority 1;
client rede_1 {
bandwidth 480;
limit 512;
burst 0;
priority 1;
dst {
192.168.1.0/24;
};
};
client rede_geral {
bandwidth 8;
limit 5000;
burst 0;
priority 2;
dst {
0.0.0.0/24;
};
};
};

class default {
bandwidth 8;
};

Um diferencial que o HTB possui em relação as demais ferramentas de controle de tráfego é que você pode determinar qual a banda mínima garantida que o usuário irá ter e qual o limite máximo que ele usará caso haja disponibilidade no link. Feito esta configuração, basta executar o seguinte comando para que as regras de controle de banda entrem em vigor:

[root@servidor] htb eth0 start

Está feito o controle de banda desta empresa, dando exclusividade de 512Kbps para a rede 1, assim também, limitando a banda da rede para 4520Kbps. Entende-se que, tudo o que não estiver declarado como a rede_1, faz parte da classe default e não da classe Rede_Empresa. Há outras variantes para a configuração do HTB-TOOLS. No caso acima citado, fizemos o controle do download (dst = destination). Para controlar o upload utiliza-se src (source) no lugar do dst. Pode ser usado o IP de um host, no lugar de usar o IP da rede, apenas citando o ip seguido da máscara. (Ex.: 192.168.1.35/24

Se quiser controlar uma porta específica, basta incluir o número da porta logo após o IP da rede/host. (Ex.ara a porta 80 ==> 192.168.1.0/24 80). Outros controles que podem ser usado na administração usando o HTB com HTBTOOLS é:

# htb { start | stop | stats | generate }
ou
# htb { help | version }

Onde:
interface - a interface de rede que você deseja controlar
start - aplica as propriedades do arquivo de configuração na interface
stop - apaga as regras aplicadas a interface específica
stats - mostra, em tempo real, a estatística de tráfego para a interface
generate - apenas cria o script para aplicar as regras
help - mostra algumas informações úteis
version - mostra a versão e informações de direitos autorais

AGORA O MELHOR DE TODOS, VOCÊ PODE SIMPLIFICAR TUDO ISSO, UTILIZANDO A INTERFACE GRÁFICA DO HTB-TOOLS. VÁ NO DIRETÓRIO DO HTB-TOOLS.

[root@servidor] cd HTB-TOOLS-0.3.0a

Agora basta digitar:

[root@servidor] ./setup

Arquivos: bitops
Htb_Tools

_____________________________________________________________________

Outros Exemplos de Configurações

###############
# eth1-qos.cfg #
################
# for how to configure and use see docs/HowTo/
class REDE_Interna {
bandwidth 256; (VELOCIDADE MINIMA GARANTIDA PARA O CLIENTE DESTA INTERFACE)
limit 333; (VELOCIDADE MAXIMA DO LINK)
burst 2;
priority 1;
client ALAN { (o nome client e obrigatorio sem espaços)
bandwidth 25; (VELOCIDADE MINIMA GARANTIDA DO CLIENTE)
limit 256; (VELOCIDADE MAXIMA DO CLIENTE)
burst 2;
priority 4; (PRIORIDADE DA BANDA PARA O CLIENTE)
upload 75; (VELOCIDADE DO UPLOAD DO CLIENTE)
dst {
192.168.0.2/24; (IP DO CLIENTE / OU REDE)
};
};

};
class default { bandwidth 8; };

Nenhum comentário: