Traffic Shaping usando tc

3

Eu tenho um link de 1,5 Mbit / s que quero compartilhar com 150 usuários.

Minha configuração é a seguinte:

Caixa Linux com 3 NICs eth0 - ip público eth1 - sub-rede A - 50 usuários (ips estáticos) eth2 - sub-rede B - 100 usuários (via dhcp)

Estou usando o squid como um proxy transparente na porta 3128. servidor dhcp usando as portas 67 e 68.

Eu estava criando, mas acho que os pacotes não estão indo para as filas certas

#!/bin/bash
DEV=eth0

RATE_MAIN=2048kbit 
CEIL_MAIN=2048kbit
BURST=1b
CBURST=1b

RATE_DEFAULT=1024kbit 
CEIL_DEFAULT=$CEIL_MAIN
PRIO_DEFAULT=3

RATE_P2P=1024Kbit
CEIL_P2P=$CEIL_MAIN
PRIO_P2P=4

RATE_IND=32kbit
CEIL_IND=$CEIL_DEFAULT

tc qdisc del dev $DEV root

tc qdisc add dev $DEV root handle 1: htb default 30
tc class add dev $DEV parent 1: classid 1:1 htb rate $RATE_MAIN ceil $CEIL_MAIN
tc class add dev $DEV parent 1:1 classid 1:10 htb rate $RATE_DEFAULT ceil $CEIL_MAIN burst $BURST cburst $CBURST prio $PRIO_WEB

## some other sub class for p2p other traffic
tc class add dev $DEV parent 1:1 classid 1:20 htb rate $RATE_P2P ceil $CEIL_P2P burst $BURST cburst $CBURST prio $PRIO_P2P

$IPS_NET1=50
$IPS_NET2=100
let $IPS=$IPS_NET1+$IPS_NET2
for ((i=1; i<= $IPS; i++))
do
    let CLASSID=($i+100)
    let HANDLE=($i+100)

    tc class add dev $DEV parent 1:10 classid 1:$CLASSID htb rate $RATE_IND ceil $CEIL_IND

    tc qdisc add dev $DEV parent 1:$CLASSID handle $HANDLE: sfq perturb 10
done

## Generate IP addresses ##
IP_ADDRESSES=""

# Subnet A
BASE_IP=10.10.10.
for ((i=2; i<=$IPS_NET1+1; i++))
do
 TEMP="$BASE_IP$i"
 IP=ADDRESSES="$IP_ADDRESSES $TEMP"
done

# Subnet B
BASE_IP=192.168.0.

for ((i=2; i<=$IPS_NET2+1; i++))
do
 TEMP="$BASE_IP$i"
 IP_ADDRESSES="$IP_ADDRESSES $TEMP"
done

## FILTERS ##
j=1
U32="tc filter add dev $DEV protocol ip parent 1:0 prio $PRIO_DEFAULT u32"
for NET in $IP_ADDRESSES; do
 let CLASSID=($j+100)
 $U32_DEFAULT match ip src $NET/32 flowid 1:$CLASSID
 $U32_DEFAULT match ip dst $NET/32 flowid 1:$CLASSID
 let j=j+1
done

Vocês podem me ajudar a descobrir o que há de errado com isso?

basicamente eu quero que minhas aulas sejam

1: 1 (1,5 Mbit) 1:10 (1024 Kbit) 1:20 (1024 Kbit) (200 ips cada com 32 kbit)

    
por Simon 27.10.2009 / 20:46

3 respostas

1

Ainda estou me envolvendo no tráfego e encontrando o Manual de disciplina de simulação de HTB Linux - usuário orientar uma ótima leitura. Seus exemplos descrevem quase exatamente o que você está fazendo.

    
por 10.01.2010 / 23:29
1

Parece que você está tentando criar uma classe por endereço IP, geralmente isso não é feito, especialmente quando você tem uma quantidade tão pequena de largura de banda para começar.

Eu tentaria algo como o Wondershaper primeiro.

Mas 1,5 Mbit / s com 150 usuários? Isso provavelmente não vai funcionar. Você não disse o que esses usuários farão, espero que eles tenham bloqueado máquinas que só podem executar um aplicativo de intranet.

    
por 11.01.2010 / 01:29
1

Se o seu link tiver apenas 1,5 MBit / s, por que você tem um RATE_MAIN de 2048kbit (que é mais de 2 MBit / s)? Se você se encontra em tc com relação à sua largura de banda máxima absoluta, ele nunca conseguirá gerenciar a largura de banda nem perto de como você a configurou.

Observe também que geralmente 1,5 MBit / s são 1500 kbit / se 1500000 bit / s. No entanto, em tc 1 mbit é igual a 1024 kbit, o que equivale a 1048576 bit / s.

Se o seu link for de 1,5 MBit / s, seu máximo teórico é 187500 bps (em tc bps significa BYTES por segundo , não bits por segundo, como estamos acostumados) e para ter tráfego efetivo filtrando, você geralmente precisa diminuir isso por uma porcentagem realística. Se não houver sobrecarga de protocolo adicional envolvida (diferente de TCP / IP, mas isso já é contabilizado automaticamente pelo tc), então você pode levar 90% disso. Se você tem uma linha DSL por trás dele (talvez com SNAP + LLC + PPPoE + AAL5 + ATM), é melhor você levar apenas 80% disso.

Por último, mas não menos importante, você tenta dar a cada usuário uma classe de 32 kbit (em tc que é 32 * 1024 kbit / s).

150 * 32 = 4800

Você está ciente de que esta é WAY OVER sua velocidade de linha, está?

Se você espera que o HTB funcione corretamente e a maneira como a maioria das pessoas espera que ele funcione, a soma de todas as taxas e tetos das classes para crianças não pode exceder a taxa e o teto de sua classe pai. E você está bem longe disso (1024 é o valor da sua classe pai).

    
por 20.01.2010 / 23:27