martes, 20 de enero de 2004

SHAPER (en portuges)

Ola,

tenho visto muita gente na lista pesquisando por
Controle de Trafego baseado em endereco IP!

Dah para se conseguir isto com o Traffic Shaper do Linux.
Basta criar varios shapers e adiocar uma rota estatica
de um IP para o shaper.

Vejam um pequeno exemplo:

1) crie varios shapers, faca quantos voce precisar,
cada shaper ira realiza um controle!

$ cd /lib/modules/versao_kernel/net
$ cp shaper.o shaper0.o
$ cp shaper.o shaper1.o
$ cp shaper.o shaper2.o
...

2) Atualize as dependencias parar os novos modulos:

$ depmod -a

3) Carregue os modulos necessarios:

$ insmod shaper0
$ insmod shaper1
...

Obs.: para cada modulo carregado, o kernel disponibiliza
uma interface shaperX, que sera a interface de rota para
o IP onde se quer limitar o trafeo.

4) Atache e configure a velocidade para cada shaper deveice:

$ shapecfg attach shaper0 eth1
$ shapecfg attach shaper1 eth1
$ shapecfg attach shaper2 eth1
...
$ shapecfg speed shaper0 64000
$ shapecfg speed shaper1 256000
$ shapecfg speed shaper2 64000
...

Obs: a partir das versoes 2.2.x do kernel (se nao me engano), ao
configurar uma interface, o kernel automaticamente adiciona uma rota
parao endereco de rede pela interface. Por isso deve-se remover
esta rota logo apos configurar a interface
(queremos fazer shape somente para um IP, certo?).

6) Adicione rotas para os shapers:

$ roude add -host 192.168.1.2 dev shaper0
$ route add -host 192.168.1.3 dev shaper1
$ route add -host 192.168.1.4 dev shaper1
$ route add -host 192.168.1.5 dev shaper1
$ route add -host 192.168.1.6 dev shaper2

a saida do comando route deve ser algo como:

Destino Roteador Mascara Opcoes Metrica Ref Uso Iface
200.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.1.2 0.0.0.0 255.255.255.255 UG 0 0 0 shaper0
192.168.1.3 0.0.0.0 255.255.255.255 UG 0 0 0 shaper1
192.168.1.4 0.0.0.0 255.255.255.255 UG 0 0 0 shaper1
192.168.1.5 0.0.0.0 255.255.255.255 UG 0 0 0 shaper1
192.168.1.6 0.0.0.0 255.255.255.255 UG 0 0 0 shaper2
0.0.0.0 200.1.1.1 0.0.0.0 UH 1 0 0 eth0

7) Pronto!

##############

Eso esta como un poco mal.. no hace falta copiar el modulo como 7 veces para tener 7 shapers xD
DDD

modprobe shaper shapers=7

xD

--
Pablo Ruiz Garcia (Pci)