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
|