Configuração do Shaperd no Debian Lenny

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.

[ Hits: 32.565 ]

Por: Daniel Barcelini em 29/04/2011


Configurando o Shaperd



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
}

Página anterior     Próxima página

Páginas do artigo
   1. Configuração da rede, instalação do Shaperd e módulos do Kernel
   2. Configurando o Shaperd
   3. Configurando o Iptables e direcionando o tráfego para Shaperd
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

BIND DNS Active Directory Windows 2008

Configuração fácil de um servidor PPP

Configurando DHCP com DNS (Bind9) na rede local - Debian Linux

Caso de Estudo: E-mail Server ISP

Instalando AJAXTERM em um Fedora

  
Comentários
[1] Comentário enviado por felipe_sama em 29/04/2011 - 12:48h

legal, o que eu estava procurando.

[2] Comentário enviado por trnet em 29/04/2011 - 13:44h

Cara funciona da mesma maneira no Debian Squeeze?

tem como usar o shaperd com cbq?


Abraço!!!


[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?

[4] Comentário enviado por ratifers em 02/05/2011 - 11:40h

trnet desculpa a demora para a resposta bom sobre o squeeze nao cheguei a usa-lo ainda para isso mas creio que funcione normalmente.

e sobre o cbq os dois programas tem a mesma finalidade então não vejo o porque de utiliza-lo simultaneamente.

abraços

[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.

Abraços

[6] Comentário enviado por jimmy.aa em 06/05/2011 - 13:45h

ótimo artigo, gostaria de saber se desta forma ele barra tambem a banda do cache do squid, oque não seria interessante

[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.

Abraços

[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

Obrigado

[9] Comentário enviado por rafaelhenrique em 10/10/2011 - 16:48h

Boa tarde galera!

Fiz um cenário de testes desta forma:

log level = debug2
packet forwarding = ipq
daemon = yes
pidfile = /var/run/shaperd.pid

class from_A {
bandwidth = 56 kbyte/s

ipv4 classifier prio=0 proto=tcp \
inp_if=vboxnet0 saddr=172.16.100.0/255.255.255.0 \
out_if=eth0 daddr=0.0.0.0/0.0.0.0

ipv4 classifier prio=1 proto=udp \
inp_if=vboxnet0 \
out_if=eth0

queue limits = 0 kb 100 packets
}

class from_B {
bandwidth = 56 kbyte/s

ipv4 classifier prio=0 proto=tcp \
inp_if=eth0 saddr=0.0.0.0/0.0.0.0 \
out_if=vboxnet0 daddr=172.16.100.0/255.255.255.0

ipv4 classifier prio=1 proto=udp \
inp_if=eth0 saddr=0.0.0.0/0.0.0.0 \
out_if=vboxnet0 daddr=0.0.0.0/0.0.0.0

queue limits = 0 kb 100 packets
}

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

[10] Comentário enviado por rafaelhenrique em 10/10/2011 - 17:10h

Pessoal enfim consegui resolver meu problema a regra que me atrapalhava era:

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128

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).

Obrigado pelo tutorial novamente ratifers

[11] Comentário enviado por wandersonbpaula em 17/03/2012 - 10:22h

ratifers,
O que seria essa perfumaria?
Poderia ser mais especifico?

[12] Comentário enviado por ratifers em 04/04/2012 - 14:46h

wandersonbpaula a parte de perfumaria como disse acima seria a configuração de portas especificas.

[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,

segue abaixo o shaperd.conf que estou usando:

log level = info
packet forwarding = ipq
daemon = yes
pidfile = /var/run/shaperd.pid

class gvt {
ipv4 classifier proto=all \
inp_if=eth1 saddr=0.0.0.0/0.0.0.0 \
out_if=eth0 daddr=0.0.0.0/0.0.0.0
bandwidth = 512 kbyte/s
queue limits = 1000 kb 0 packets
}

class 3g {
ipv4 classifier proto=all \
inp_if=ppp0 saddr=0.0.0.0/0.0.0.0 \
out_if=eth0 daddr=0.0.0.0/0.0.0.0
bandwidth = 512 kbyte/s
queue limits = 1000 kb 0 packets
}

Alguém já passou por isso....

[14] Comentário enviado por thehell em 19/05/2014 - 19:18h

utilizei seu exemplo mais quando eu habilito as regras do iptables a minha maquina não navega, o que posso estar fazendo de errado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts