CONTROLE DE BANDA COM HTB
Olá amigos.
escreví um script para controle de banda utilizando o HTB, acontece que tenho uma rede wireless onde uma interface do servidor faz nat para um ap pra de lá mandar pra omini. limito apenas na interface os ips dos clientes, e nao crio nenhum regra para o radio . Teria de limitar tb ? alguns de meus clientes estão acessando dentro da velocidade que especifico pra eles , ooutros poucos, ficao muito abaixo do rate que especifico . Vejam meu script.
# Os ip's que entraram no controle de banda
ips128=`cat /etc/rc.d/hosts.128`
ipespecial=`cat /etc/rc.d/hosts.especiais`
# A placa de rede que tera o controle de banda
p_rede="eth1"
# Velocidade para os clientes
velocidade128=74kbit
velocidadeespecial=128kbit
# LIMPANDO TUDO
tc qdisc del dev $p_rede root
tc qdisc add dev $p_rede root handle 1:0 htb default 42
count1=1
for IPS in $ips128
do
tc class add dev $p_rede parent 1:0 classid 1:3$count1 htb rate $velocidade128
tc filter add dev $p_rede protocol ip parent 1:0 prio 1 u32 match ip dst $IPS flowid 1:3$count1
tc filter add dev $p_rede protocol ip parent 1:0 prio 1 u32 match ip src $IPS flowid 1:3$count1
count2=`expr $count2 + 1`
done;
count2=0
for IPS in $ipespecial
do
tc class add dev $p_rede parent 1:0 classid 1:4$count2 htb rate $velocidadeespecial
tc filter add dev $p_rede protocol ip parent 1:0 prio 1 u32 match ip dst $IPS flowid 1:4$count2
tc filter add dev $p_rede protocol ip parent 1:0 prio 1 u32 match ip src $IPS flowid 1:4$count2
count2=`expr $count2 + 1`
done;
Re: CONTROLE DE BANDA COM HTB
Saudações Tiago,
Você não precisa fazer controle de banda para a rede do rádio, que deve ser uma rede logicamente diferente das que vc usa para seus clientes.
A questão é que quando vc usa controle de banda diretamente nas interfaces físicas, eth0, ppp0, vc só consegue controlar o output da placa, vc controla o fluxo que sai dela não o que entra por ela.
Quando fazemos o controle de banda temos sempre que analisar o input e output das interfaces.
No seu caso se a eth1 é a interface que vai para o ap, vc está controlando o fluxo de download dos seus clientes. O output da eth1 representa para seus cilentes o download que eles podem fazer.
Sempre que fiz meus controles de banda utilizei interfaces virutais, imq por exemplo. Para que eu pudesse controlar melhor o input.
Você colocou um filtro com o src do cliente entrando pela interface. O controle do upload dos clientes não deve estar funcionando.
As regras parecem estar corretas, o que eu te apontaria é que talvez o throughput do AP não seja suficiente em horários de pico.
Voce já fez o teste de throughput em seus clientes em horários diferentes para ver se o problema é que o rádio não está suportando os clientes todos ao mesmo tempo?
Re: CONTROLE DE BANDA COM HTB
Boa josé Guilherme,
Pensei nisso, mas não é. Pois mesmo com um numero relativamente baixo de clientes a conexão fica lenta m algun clientes. Outra coisa. A rede para meu radio eh a eth2 enquanto os gatways para meus clientes é a eth1 , fiz isso por medido de segurança msmo . Um abraço e espero outra resposta
Re: CONTROLE DE BANDA COM HTB
Então Tiago,
Eu li e re-li o seu primeiro post e não vejo nada de errado nas regras que você usou. Apenas aquele fato que eu mencionei de que vc está com duas regras filter uma com src e outra com dst. E as duas vc está jogando o tráfego para a mesma classe.
Temos dois pontos para analisar com isso:
1º como te disse quando vc coloca os filtros diretamente sobre a device física (eth) vc só consegue filtrar os pacotes que saem dela, logo a sua regra de src deve estar inutilizada.
2º Se a sua regra de src estivesse funcionando vc estaria jogando o upload e o download do cliente na mesma classe, isso quer dizer que se vc tem um cliente de 64kbps e ele estivesse trafegando a todo vapor (up e down ao mesmo tempo) ele teria 32 de up e 32 de down, quando na verdade ele deveria ter 64 de upstream e 64 de downstream.
Entendido isso (se vc não entendeu, me questione) eu preciso saber mais informações a respeito da sua rede.
- Como vc está fazendo exatamente para testar o link desses seus clientes?
- Eu não compreendi muito bem como está a topologia da sua rede. Se vc pudesse fazer um esboço com o servidor e o que está exatamente ligado à cada interface, e se há mais algum firewall.
Tendo estas duas informações eu posso te ajudar mais.
Abraço
Re: CONTROLE DE BANDA COM HTB
Obrigado José Guilherme, Você vem sendo muito gentil e amigável. Entendi sobre seu comentário a respeito das regras associados ao device, mas queria saber agora como controlar a src. vou ter que marcar os pacotes que vem pela eth0 (WAN) ? me explique melhor amigao. Obrigado desde já.
Tenho a seguinte estrutura:
Criei Interfaces Virtuais para minha rede wireless ou seja na eth1 eu tenho os endereços
REDE WIRELESS
eth1 192.168.12.30/27
eth1: 192.168.12.62/27
eth1:1 192.168.12.94/27
eth2 192.168.10.254/255 Rede A CABO
eth2:0 192.168.11.254/255 //NAT PRO RADIO
eth0 200.xxxxxxxxx
Re: CONTROLE DE BANDA COM HTB
Cara, acho que o mais rápido pra vc ter esse controle de up funcionando vai ser marcando os pacotes mesmo, mas não marcar os pacotes que estão entrando pela eth0.
Você deve marcar os pacotes que estão entrando pelas outras interfaces e depois capturar esses pacotes com os filtros e classes associados à eth0. Acho que assim deve dar certo.
Lembrando que pra cada cliente vc vai ter uma class e um mark diferente.
Outras coisas. Além do MARK existe também o CLASSIFY que eu particularmente gosto bastante. No kernel tem algumas coisas mais recentes como Ingress Qdisc, Metadata (EMATCH META). Esses dois caras conjugados conseguem reclassificar as filas entrando pelas interfaces, mas eu não tenho laboratório pra testá-los, então nem sei como usa. Se eu conseguir algum teste com eles eu posto pro pessoal aqui do forum.
Outras dicas. Mantenha bloqueado o forward entre essas redes, para que os seus clientes não fiquem usando seu firewall como ponte.
Deixe faça controle de mac nos seus rádios e desabilite o broadcast de ssid pra dificultar que qualquer um se conecte às suas bases.
Re: CONTROLE DE BANDA COM HTB
Blz José! valew mesmo . Era bem como eu imaginava e você me deu uma luz grande, man. Espero que continue me ajudando e te ajudarei sempre que for necessário .
Re: CONTROLE DE BANDA COM HTB
Estamos aqui pra isso :-D
Re: CONTROLE DE BANDA COM HTB
essa ai tbm e boa, mas eu ja prefiro fazer assim:
DEV=eth2
TC=/sbin/tc
U32="filter add dev $DEV protocol ip parent 1:0 prio 4 u32"
U32upload="filter add dev $DEV protocol ip parent ffff: prio 4 u32"
#Delata root
$TC qdisc del dev $DEV root >/dev/null 2>&1
$TC qdisc del dev $DEV ingress >/dev/null 2>&1
#Adiciona root qdisk
$TC qdisc add dev $DEV handle ffff: ingress; >/dev/null 2>&1
$TC qdisc add dev $DEV root handle 1: htb default 10
#Adiciona root class
$TC class add dev $DEV parent 1: classid 1:1 htb rate 10mbit ceil 100mbit burst 125000k quantum 1536.
#Adiciona Default class
$TC class add dev $DEV parent 1:1 classid 1:0x10 htb rate 1kbps ceil 1kbps burst 2k quantum 1536
$TC qdisc add dev $DEV parent 1:0x10 handle 0x10: pfifo limit 5
Adiciona class REDE_Interna, que pfifo limit 5
#Com velocidade de no maximo 333kbps e minimo 256kbps
$TC class add dev $DEV parent 1:1 classid 1:0x20 htb rate 32kbps ceil 41kbps burst 2k prio 1 quantum 1536
#Adicionando cliente TESTE
$TC class add dev $DEV parent 1:0x20 classid 1:0x21 htb rate 1kbps ceil 9kbps burst 2k prio 4 quantum 1536
$TC ${U32} match ip dst 192.168.0.14/24 match 0xffff flowid 1:0x21
#controle de upload do cliente na velocidade de 75 kbps
$TC ${U32upload} match ip src 192.168.0.14/24 police rate 75kbit burst 22k drop flowid :1
$TC qdisc add dev $DEV parent 1:0x21 handle 0x21: pfifo limit 5
Detalhe, eu considero um erro a pessoa nao informar ao TC o quanto de velocidade vai ser distribuida tipo se eu tenho um link de 1 mb e quero distribuir entre os clientes um limite maximo do link de 5123 eu devo setar isso, isso evita lentidao na rede tipo se nao informar o link vai ser consumido todo eo sistema vai ficar doido pq a placa de rede e 10/100 e ele vai procurar dar mais e mais velocidade pros clientes sem que tenha essa velocidade de internet.
o correto e informar o quanto vai ser distribuido no geral e sempre setar o burst
Re: CONTROLE DE BANDA COM HTB
Ae Galera. A Solução . Melhor desempenho que obtive foi depois de escrever este script. Funcionalidade Total. Um abraço e Obrigaod a todos, Emanuel (tianguapontocom) brigadao. JOsé Guilherme, Valeu também amigao, depois me de seu contato. Um abraço .
#!/bin/bash
# Controle banda utilizando tc
# By Tiago Gomes Pereira
# Itabuna - Bahia
# Os ip's que entraram no controle de banda
ips128=`cat /etc/rc.d/hosts.128`
ipespecial=`cat /etc/rc.d/hosts.especiais`
# A placa de rede que tera o controle de banda
p_rede="eth1"
# Velocidade para os clientes
velocidade64=70kbit
velocidade128=128kbit
# LIMPANDO TUDO
tc qdisc del dev $p_rede root
tc qdisc add dev $p_rede handle ffff: ingress; >/dev/null 2>&1
tc qdisc add dev $p_rede root handle 1: htb default 10
tc class add dev $p_rede parent 1: classid 1:1 htb rate 10mbit ceil 100mbit
tc class add dev $p_rede parent 1:1 classid 1:20 htb rate 600kbit ceil 768kbit
count=1
for IPS in $ips128
do
tc class add dev $p_rede parent 1:20 classid 1:$count htb rate 70kbit ceil 80kbit
tc filter add dev $p_rede protocol ip parent 1:0 prio 1 u32 match ip dst $IPS flowid 1:$count
tc filter add dev $p_rede protocol ip parent ffff: prio 4 u32 match ip src $IPS police rate 18kbit burst 22k drop flowid 1:$c
ount
count=`expr $count + 1`
done;
count=`expr $count + 1`
for IPS in $ipespecial
do
tc class add dev $p_rede parent 1:20 classid 1:$count htb rate 100kbit ceil 115kbit
tc filter add dev $p_rede protocol ip parent 1:0 prio 1 u32 match ip dst $IPS flowid 1:$count
tc filter add dev $p_rede protocol ip parent ffff: prio 4 u32 match ip src $IPS police rate 18kbit burst 22k drop flowid 1:$count
count=`expr $count + 1`
done;
count=`expr $count + 1`
for IPS in `cat /etc/rc.d/hosts.meioespeciais`
do
tc class add dev $p_rede parent 1:20 classid 1:$count htb rate 90kbit ceil 110kbit
tc filter add dev $p_rede protocol ip parent 1:0 prio 1 u32 match ip dst $IPS flowid 1:$count
tc filter add dev $p_rede protocol ip parent ffff: prio 4 u32 match ip src $IPS police rate 18kbit burst 22k drop flo
wid 1:$count
count=`expr $count + 1`
done;
Re: CONTROLE DE BANDA COM HTB