FUG-BR / Grupo Brasileiro de Usuarios de FreeBSD
Controle de Trfego - IPFW2 + Dummynet
Por Guilherme Rosrio   
12/06/2006

Controle de Tráfego

IPFW2 + Dummynet


O Dummynet é uma ferramenta muito flexível para gerenciamento de banda, para impor ou simular algumas condições desejadas no tráfego da rede. Ele funciona interceptando os pacotes e passando-os por um ou mais "pipes" ou "queues", que podem efetuar a limitação de banda, perdas de pacotes, retardos de propagação etc. Os pipes são canais com largura de banda fixa, enquanto as queues representam filas de pacotes, associadas a um peso (weight). As queues compartilham, em proporção ao peso, a largura de banda dos pipes aos quais estão associadas.

Todo o gerenciamento do Dummynet é feito através do IPFW, que deverá estar configurado e funcionando.

options DUMMYNET
options HZ=1000

A segunda opção não é obrigatória, mas na maioria dos casos auxilia no funcionamento do Dummynet. Ela define a granularidade do timer utilizado pelo sistema, que é de 10ms (HZ=100) por padrão. Efeitos do Dummynet como o delay de propagação são aplicados um a cada ponto do timer, então reduzir a granularidade irá possibilitar o tratamento de taxas de tráfego mais altas, e a especificação de delays mais precisos. A opção HZ=1000 irá definir a granularidade para 1ms. Valores menores que 1ms não são recomendados, para maiores informações veja a RFC1323.

Adicionadas as opções, compile e instale o kernel, conforme descrito na seção Recompilação e Instalação do Kernel.

Após isso, basta adicionar as regras desejadas através do IPFW. As opções do IPFW específicas para Dummynet estão descritas abaixo.

Para definir um pipe utiliza-se o seguinte comando / regra:

ipfw pipe número config opções-configuração

Para a definição de uma queue utiliza-se o comando / regra abaixo:

ipfw queue número config opções-configuração

Em ambos os casos o parâmetro número não depende da númeração das demais regras do ipfw. As opções de configuração são as seguintes:


Opções de configuração específicas do pipe:

bw banda
Define a largura de banda do pipe. A banda deve ser especificada em Kbit/s, Mbit/s, KByte/s ou MByte/s.


delay delay
Define o delay de propagação do pipe. O delay deverá ser especificado em milisegundos.


Opções de configuração específicas da queue:

pipe número
Conecta a queue ao pipe especificado. Podem ser conectadas várias queues a um único pipe.

weight peso
Especifica o peso daquela queue. O valor pode variar de 1 a 100.


Principais opções de configuração, comuns ao pipe e à queue:

buckets tamanho-tabela
Especifica o tamanho da tabela usada para guardar as diversas queues. O valor pode variar de 16 a 65536, o padrão é 64.

mask especificação-máscara
Define diferentes fluxos através da aplicação da máscara especificada. Cada fluxo é enviado para uma queue ou pipe separado, criados dinamicamente. Cada pipe dinâmico terá a mesma largura de banda do pipe original, enquanto que cada queue dinâmica irá compartilhar com as demais dinâmicas a largura de banda do pipe ao qual está conectada a original. A especificação de máscara deve ser uma ou mais das seguintes:
dst-ip máscara, src-ip máscara, dst-port máscara, src-port máscara, proto máscara ou all.
O parâmetro all define que todos os bits em todos os campos são significantes.

noerror
Não reporta o erro quando um pacote for perdido, por exemplo em uma simulação de perda de pacotes ou congestionamento.

plr taxa-perda
Define a taxa de perda de pacotes. O valor deverá ser entre 0 e 1, com 0 significando nenhuma perda, e 1 significando 100% de perda.

queue {slots | tamanhoKBytes}
Tamanho da fila, em slots ou KBytes.


Os comandos para manipular as regras de pipes e queues são similares aos das regras comuns do IPFW:

ipfw {pipe | queue} {delete | list | show} número


Exemplos


 

Limitar o tráfego da rede 10.10.0.0/16 para a 192.168.0.0/16 em 300 Kbit/s:

ipfw add 1000 pipe 1 src-ip 10.10.0.0/16 dst-ip 192.168.0.0/16
ipfw pipe 1 config bw 300Kbit/s queue 50KBytes


Simular uma perda de pacotes de entrada de 5%:

ipfw add 1000 pipe 1 in
ipfw pipe 1 config plr 0.05


Limitar o tráfego em 300Kbit/s de entrada em ambas as direções:

ipfw add 1000 pipe 1 in
ipfw add 1100 pipe 2 out
ipfw pipe 1 config bw 300Kbit/s queue 50KBytes
ipfw pipe 2 config bw 300Kbit/s queue 50KBytes


Limitar o tráfego de cada máquina da rede 10.10.0.0/16 em 128Kbit/s nas duas direções:

ipfw add 1000 pipe 1 src-ip 10.10.0.0/16 out
ipfw add 1100 pipe 2 dst-ip 10.10.0.0/16 in
ipfw pipe 1 config mask src-ip 0x000000ff bw 128Kbit/s queue 10KBytes
ipfw pipe 2 config mask dst-ip 0x000000ff bw 128Kbit/s queue 10KBytes


Introduzir um delay no tráfego:

ipfw add 1000 pipe 1 in
ipfw add 1100 pipe 2 out
ipfw pipe 1 config delay 250ms bw 1Mbit/s
ipfw pipe 2 config delay 250ms bw 1Mbit/s



Devemos dar atenção ao tamanho da queue (fila) nos pipes quando fazemos limitação de banda, pois apesar de limitarmos a largura de banda em 50 Kbit/s, por exemplo, o MTU da interface de rede continua o normal, 1500 bytes. Se não for especificado o tamanho da fila, ela será muito grande e irá gerar um delay não desejado no tráfego. O tamanho padrão da fila é 50 slots, que multiplicado pelo MTU de 1500 bytes, dá o valor de 600 Kbits. Essa fila iria levar 12 segundos para ser preenchida por uma banda de 50 Kbit/s, o que é um atraso muito grande na comunicação.

Referencia: http://www2.unijui.tche.br/~heini/freebsd/dummynet.html

Comentrios
SsJiEsKaagRBxycMa
Por Arfan em 10/06/2012 15:00:30
We got to talk a little about this last week on the golf cusroe, so you know that I've been back and forth about contentment and jobs and even places to live for about 4 years now.Contentment is hard to define, especially when it comes to a family because you really have 4 different views of contentment unless you are all united. Given your kids are, well, kids, it's hard to ask them to take on the yoke of adult contentment decisions.As I was watching your video (didn't put in the hair product, eh? you didn't let Tyler get to you, did you?) I realized that in my job (as a engineer of sorts) I find fulfillment in about 10% of my job. The other 90% sometimes makes me just want to walk away, but when I get to do that 10%, then I am fueled for a good bit. What is that 10%? It's writing articles, speaking at conferences, presenting new ideas, collaborating with other leaders, editing other people's writing, and when I get around to it, designing new things for on-campus. None of those is really confined to my job area of library technology, but I've realized that I'm good at them, and until I can develop them to go out on my own and consult (if I ever really decide to do that), I need to tap into that 10% as much as I can to get me through that other parts. And slowly, try to get that 10% to be more like 20% or 30% or 50%, etc.But that's just my story. Because I like to name drop well known people, I remember watching an interview Don Miller did with Michael Hyatt. I think he was running a small printing company or something like that when he was trying to decide about writing full time. He said that when he sat down with his pastor to discuss it, his pastor asked him to define an amount he would need to have to do this full time. So Don wrote down a number and shared it with his pastor. And he told Hyatt that for his contract for Blue Like Jazz, they hit that number exactly. Not a little more, not a little less, but exactly.So from the financial/practical side of it, I would encourage you and Erica to come up with that number for you. Maybe you hit that in combination by your savings and the upswing $ you start getting in writing and speaking. Maybe you hit it through your first major project. Maybe Tripp and Tyler offer that to you to write for their sit-com (remember, don't tell them your number).From the spiritual side, remember always that you are gifted in everything you are doing now: in the stuff you don't like and in the stuff you love. Your giftedness isn't changed by the dislike or joy you get from using those gifts. You already know this by being a father. I hate some of the things I have to do as a father, but I love being a father, and that I get to share my gifts with them.Speaking of that, it's almost lunchtime, and my 19-month-old son gets to come have lunch with me today, so I gotta get some work done.


Comente!*
Nome:
E-mail
Homepage
Ttulo:
Comentrio:

Cdigo:* Code

ltima Atualizao ( 12/06/2006 )