Taxa mínima e problema de classe padrão para o HTB

28

Tenho algumas dúvidas sobre uma estrutura HTB que estou usando.

Meu objetivo é limitar a velocidade de download e upload de usuários em uma rede local. Cada usuário da rede tem uma lista pessoal de domínios com velocidade de inatividade para o domínio que ele não pode exceder.

Isso significa que o usuário1 pode ter seu acesso no slashdot.org restrito a 8KB no download e 3KB para upload, e o usuário2 pode ter no slashdot.org um acesso restrito de 4KB para baixo e 1KB para cima.

Por enquanto eu configuro um par iptables / tc que funciona muito bem, mas em uma escala muito pequena, usando 2 ou 3 hosts virtuais ao mesmo tempo (Infelizmente, não posso realizar teste de tamanho real).

Aqui está minha estrutura atual (mostrarei apenas a que está na saída da LAN, sendo que a única para o upload é simplesmente uma "cópia" desta)

Um qdisc HTB (identificador 2 :) anexado na interface, a classe de tráfego padrão é a classe FFFF.

A classe de raiz 2: 1 está diretamente sob o qdisc do HTB, tendo para taxa e teto a capacidade de DOWNLINK.

A classe padrão 2: FFFF como filho de 2: 1, com uma taxa de 1kbsp e um teto de capacidade de DOWNLINK.

Em seguida, há outras classes adicionadas dinamicamente quando há uma nova restrição para um usuário de um determinado domínio, uma nova classe tc é adicionada para controlar a velocidade de download de seu domínio.

Por enquanto, aqui está o que eu fiz:

Crie uma nova classe tc com um ID único (tirado de um banco de dados, não o ponto aqui), como pai, a classe 2: 1, o valor da taxa é 1bps, o valor ceil é definido para a velocidade limitada de download. p>

Aqui estão os comandos tc:

-------------- BEGIN SCRIPT --------------
DOWNLINK=800

## Setting up the static tc qdisc and class

$tc qdisc add dev $LAN_IFACE root handle 2: htb default 0xFFFF

# Main class so the default class can borrow bandwith from the others
$tc class replace dev $LAN_IFACE parent 0x2: classid 0x2:0x1 htb rate $DOWNLINK ceil $DOWNLINKkbps

# add the default class of class id 2:a under the main class of classid 2:1
$tc class replace dev $LAN_IFACE parent 0x2:0x1 classid 0x2:0xFFFF htb rate 1kbps ceil $DOWNLINKkbps prio 0

# add to the leaf class 2:10 for default traffic a sfq qdisc
$tc qdisc add dev $LAN_IFACE parent 0x2:0xFFFF handle 0xFFFF: sfq perturb 10

## The dynamic part called each time a new restriction for a couple domain/user is added
$tc class replace dev $LAN_IFACE parent 0x2:0x1 classid 0x2:0x$idHex htb rate 1bps ceil $speedDownkbps prio 1

# Add the sfq at the leaf class 2:1$id
$tc qdisc add dev $LAN_IFACE parent 0x2:0x$idHex handle 0x$idHex: sfq perturb 10

# $id is the mark added by iptables for this couple domain/user
$tc filter replace dev $LAN_IFACE parent 0x2:0 protocol ip prio 3 handle 0x$id fw flowid 0x2:0x$idHex
-------------- END SCRIPT --------------

Todo o tráfego normal (sem restrição de velocidade) deve ir para a classe padrão, e aquele restrito deve ser enviado para sua classe tc correspondente.

O ponto em que duvido seriamente é o uso da taxa de velocidade mínima de 1pb para a classe padrão e a classe restrita. Eu não posso controlar o número de classes restritas que serão criadas, e eu não quero a taxa total da classe restrita sobre a classe raiz.

Outro ponto, eu adicionei o padrão o prio 0, e a classe restrita o prio 1, então caso a classe padrão deva emprestar (quase sempre de acordo com sua taxa muito lenta), essa classe será servida antes da outra restrição domínio. Mas esses domínios não passarão fome se eu mantiver o teto da classe padrão como o da classe raiz?

Como posso ter sucesso para permitir que os usuários mantenham uma interatividade e largura de banda decentes para um uso não restrito, limitando a velocidade de vários domínios / usuários?

Eu também estou querendo saber se a classe padrão é útil aqui, pois se eu não especificar uma classe padrão para o qdisc htb, os pacotes que não corresponderem aos filtros serão desenfileirados na velocidade do hardware. (mas aqui novamente fazendo a classe restrita morrer de fome?)

Eu sou muito novo em tc e rede de QoS, então qualquer conselho, críticos (construtivos;)) serão bem-vindos.

Vincent.

    
por Mulot 04.01.2010 / 14:54

1 resposta

2

Como você não incluiu os classificadores, é difícil deduzir qual tráfego significa exatamente em cada aula. Por exemplo, o tráfego de saída HTTP ou SSH é muito importante para a interatividade, não é tanto para o HTTP de entrada.

Eu garantiria certa largura de banda para cada serviço dizendo: Eu tenho x kbps para o tráfego de entrada do httpd, e ele é dividido igualmente entre os usuários. Se você tem 10 ou 100 usuários, é justo. "Se você tem usuários de alta prioridade ou usuários de baixa prioridade em cada um desses serviços, você precisa ter classes e classificadores adicionais para eles.

(Também espero que você saiba que você só pode moldar o tráfego de saída de uma interface, NÃO a entrada. Isso significa que se você quiser limitar o uplink, você tem que trabalhar com a interface de saída para a internet ou usar o Dispositivo de enfileiramento intermediário . O Guia do lartc.org é um recurso muito bom.

    
por 15.07.2010 / 16:47