Nesse artigo vamos falar um pouco sobre o Shaperd, que vem para controle de banda nas distribuição
Debian. O foco desse artigo não é exaurir todas as funcionalidades da ferramenta, mas sim dar uma
visão de como colocar a ferramenta em produção e funcional.
Pronto! Agora vamos à configuração do Shaperd. Ele contém alguns exemplos no diretório "/usr/share/doc/shaperd/examples/", que foi o ponto de partida para esse arquivo de configuração que vou colocar aqui, mas vamos editar o arquivo em branco que se encontra no diretório "/etc/shaperd" e acrescentar a configuração abaixo.
Abrindo o arquivo para edição:
# vim /etc/shaperd/shaperd.conf
# example.2.conf.ipq : priority-based shaping (for 2.4 kernels)
#
# send a SIGHUP to reload this file with the command killall -HUP shaperd
# this is an "internal" log level (all logs are sent with facility daemon,
# priority info; see the syslog manpage for more information).
# valid levels are:
# alert (1)
# error (2)
# warning (3)
# info (4)
# debug1 (5)
# debug2 (6)
# log levels beggining from warning (3) will log unmatched packets
###Nivel de log caso tenha problemas substitua info por debug2 e veja a msg, lembre-se de voltar por conta de não abarrotar seu /var com logs desnecessarios.
log level = info
# this is a required option. note that shaperd must have been built with # the correct forwarding mechanism(s) in order for these to work # see the README for further details
### Foi utilizado ipq ao inves de divert(BSD)
packet forwarding = ipq
# this is useful for debugging # shaperd will run detached if set to "yes"
###Para rodar como Daemon
daemon = yes
# full path to shaperd's pidfile # it will be generated in daemon mode only
###Caminho para pidfile
pidfile = /var/run/shaperd.pid
###Criado uma classe chamada from_A
class from_A { #Limite da Banda para essa regra
bandwidth = 56 kbyte/s
#prioridade dessa regra no caso PRIO-0 e o protocolo que essa regra vai atuar no caso TCP
ipv4 classifier prio=0 proto=tcp \
#Essa regra pega os dados que chegam pela eth1 do endereço 192.168.10.2 com destino a eth0 para qualquer IP e aplica o shaper
inp_if=eth1 saddr=192.168.10.2 \
out_if=eth0 daddr=0.0.0.0/0.0.0.0
#Quando se usa o Borrow ele pega a banda reservada para a classe from_B quando não está em uso e utiliza #nesse caso a banda chegaria a 56kbyte/s mais 512 kbyte/s, caso queira deixar um valor fixo para a classe e so não utilizar o borrow.
borrow from from_B #prioridade dessa regra é 1 para protocolo UDP
ipv4 classifier prio=1 proto=udp \ #Essa regra trabalha encima dos dados que chegam pela eth1 de qualquer endereço da rede interna com destino a eth0 para qualquer IP
inp_if=eth1 saddr=0.0.0.0/0.0.0.0 \
out_if=eth0 daddr=0.0.0.0/0.0.0.0 #limite de pacotes não fiz um estudo aprofundado para informar o qual limite seria bom portanto deixei como vem no exemplo.
queue limits = 0 kb 100 packets
}
###Criando uma classe chamada form_C
class from_C {
bandwidth = 56 kbyte/s
ipv4 classifier prio=0 proto=tcp \ #Faz a regra inversa do form_A ou seja pega tudo que vem pela eth0 de qualquer IP #com destino a eth1 no endereço 192.168.10.2 e aplica o shaper nela
inp_if=eth0 saddr=0.0.0.0/0.0.0.0 \
out_if=eth1 daddr=192.168.10.2 #Mesma ideia do borrow from_B utiliza a banda se disponível da classe from_D
borrow from from_D #protocolo UDP
ipv4 classifier prio=1 proto=udp \ #Faz a regra inversa do form_A ou seja pega tudo que vem pela eth0 de qualquer IP #com destino a eth1 no para qualquer ip e aplica o shaper nela
inp_if=eth0 saddr=0.0.0.0/0.0.0.0 \
out_if=eth1 daddr=0.0.0.0/0.0.0.0
queue limits = 0 kb 100 packets
}
###Criando uma classe chamada form_B
class from_B {
bandwidth = 512 kbyte/s
ipv4 classifier prio=0 proto=tcp \ #Essa regra pega os dados que chegam pela eth1 do endereço 192.168.10.3 com destino a eth0 para qualquer IP e aplica o shaper
inp_if=eth1 saddr=192.168.10.3 \
out_if=eth0 daddr=0.0.0.0/0.0.0.0
queue limits = 0 kb 100 packets
}
class from_D {
bandwidth = 512 kbyte/s
ipv4 classifier prio=0 proto=tcp \ #Faz a regra inversa do form_B ou seja pega tudo que vem pela eth0 de qualquer IP #com destino a eth1 no endereco 192.168.10.3 e aplica o shaper nela
inp_if=eth0 saddr=0.0.0.0/0.0.0.0 \
out_if=eth1 daddr=192.168.10.3
queue limits = 0 kb 100 packets
}
[3] Comentário enviado por tosko em 01/05/2011 - 13:04h
em, neste caso desta configuração do shaperd vc não esta confundindo kbit/s por kbyte/s porque na classe A vc ta limitando uma banda de 56kbyte/s e la no final na class_from_b e class_from_c o total do link é 512kbyte/s que da um total de um link de 4Mbit/s é isto mesmo o link necessario para este escript deste jeito é um link de 4Mbit/s Up e Down? ou é 512Kbit/s up e down?
lembrando que link de internet e transferência de rede local é medida em Kbit, os gerenciadores de download medem a velocidade do download em Kbyte (ou seja kbit * 8)
é isto? ou tu confundiu kbyte por kbit ?
outra coisa este shaperd vai limitar o trafego da rede local ou só o que vai pra net?
[5] Comentário enviado por ratifers em 02/05/2011 - 11:56h
osko não os dados colocado estão certos tanto o é porconta que é o arquivos de configuração e se estivesse errado ele não funcionária esse ..arquivo foi meramente ilustrativo e utilizei testes com a prórpia interface de rede fastethernet. nada impede de adequar suas necessidades .mas nesse exemplo.
nesse exemplo o que ele faz limita para o ip 192.168.10.3 o uso de 512 kbytes/s e para o resto o uso de 56kbytes/s como tem o borrow o que pode acontecer eh que ip 192.168.10.3 não esta usando os 512 kbytes/s disponivel para ele sendo assim o resto da rede pode usa-ló ou seja ele soma a regra dos 56kbytes/s mais o que está disponivel no 512kbytes/s sendo que no topo de trafego dessa rede ele pode usar teria que ter um link para suportar o trafego de 56k mais os 512k tanto para up quanto para down veja que na regra eu trato isso e pode ser mudado tanto a banda liberada para up como a banda liberada para down. e como disse anteriormente sem problema vc utilizar isso para controle de rede desde que a maquina seja o gateway ou configure a para controlar a respectiva interface um exemplo seria vc configurar o entra na eth0 e o que o sai dela controlando essa banda.
Espero que tenha conseguido esclarecer sua duvida.
[7] Comentário enviado por ratifers em 10/05/2011 - 13:49h
bom jimmy.aa com isso você está fazendo um shappe na placa de rede então ele irá barrar todo o trafego que nela ali passar salvo se você trabalhar essas exceções como dito na ultima linha ou seja fazer a perfumaria.
[8] Comentário enviado por rafaelhenrique em 10/10/2011 - 10:48h
Oi galera!!
Alguém ai já testou essas configurações com um Firewall (iptables) + Proxy (squid3) já em funcionamento? Tenho um pouco de medo que umas regras atrapalhem as outras... pois tenho um Firewall ENORME aqui... vou fazer uns testes com a minha VM porém gostaria de saber se algum de vocês já fez a experiência.
E parabéns ao ratifers pois o artigo está otimo! Fez um ótimo trabalho companheiro! :D
O ip da minha máquina virtual é 172.16.100.2 e as regras do iptables ficaram da seguinte forma:
# iptables-save
# Generated by iptables-save v1.4.8 on Mon Oct 10 16:46:40 2011
*filter
:INPUT ACCEPT [39498:18222886]
:FORWARD ACCEPT [838:123718]
:OUTPUT ACCEPT [39607:8531833]
-A FORWARD -s 172.16.100.0/24 -i vboxnet0 -o eth0 -j QUEUE
-A FORWARD -d 172.16.100.0/24 -i eth0 -o vboxnet0 -m state --state RELATED,ESTABLISHED -j QUEUE
COMMIT
# Completed on Mon Oct 10 16:46:40 2011
# Generated by iptables-save v1.4.8 on Mon Oct 10 16:46:40 2011
*nat
:PREROUTING ACCEPT [3829:411030]
:POSTROUTING ACCEPT [3435:290914]
:OUTPUT ACCEPT [3435:290914]
-A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
-A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
-A POSTROUTING -s 172.16.100.0/24 -o eth0 -j MASQUERADE
COMMIT
# Completed on Mon Oct 10 16:46:40 2011
A máquina virtual navega, porém quando eu mando baixar uma imagem ISO de Debian por exemplo ela atinge o topo de 223 K/s e eu queria que ela somente baixasse a 56 K/s o que eu fiz errado? Alguém ai pode me dar uma ajuda?
Obrigado
PS: O shaperd está rodando e não apresentou nenhum erro
Pois quando era estabelecida uma conexão na porta 80 quem gerenciava a mesma era o Squid3 e não o Shaperd!
Removi a regra e tudo funcionou como o previsto! Portanto se eu quiser usar o Squid3 terei que limitar a porta 80 com delay polls (tem vários tutoriais no VOL sobre isso).
[13] Comentário enviado por ksombrah em 13/05/2013 - 09:49h
Bom dia!
Estou com um problema no Shaperd com o seguinte cenário:
WAN : eth1 e/ou ppp0
LAN : eth0
Tem um link redundante que utilizo quando a internet (eth1) cai, ai eu aciono a 3g (ppp0) as regras no firewall conseguem fazer o roteamento e o squid funciona belezinha, mas a navegação sem proxy, controlada pelo shaperd, não funciona, mas quando voltou para a internet ele funciona normalmente,