+ Responder ao Tópico



  1. #1

    Padrão 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;

  2. #2

    Padrão 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?

  3. #3

    Padrão 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

  4. #4

    Padrão 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

  5. #5

    Padrã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

  6. #6

    Padrão 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.

  7. #7

    Padrão 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 .

  8. #8

    Padrão Re: CONTROLE DE BANDA COM HTB

    Estamos aqui pra isso :-D

  9. #9

    Padrão 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

  10. #10

    Padrão 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;

  11. #11