+ Responder ao Tópico



  1. #1

    Padrão Htb+tc não está controlando o Voip

    Pessoal,

    é o seguinte estou com um problema no meu QoS....tenho 1mb dedicado embratel entrando no linux que roda squid + cache full(htb+tc) + apache + iptables e etc...

    meu QoS está dividindo o link de 1mb em dois de 512k ficando 512k dedicado para as portas do servidor asterisk voip e 512k dedicado para navegacao, e-mails e etc...segue abaixo os scripts:

    placa de rede interna(cache full):

    #!/bin/bash

    tc qdisc del dev eth1 root

    tc qdisc add dev eth1 root handle 1:0 htb default 40
    #----------------------alterar essa linha-------------------
    tc class add dev eth1 parent 1:0 classid 1:1 htb rate 10mbit

    tc class add dev eth1 parent 1:1 classid 1:10 htb rate 512kbit ceil 512kbit prio 1 # voip
    tc class add dev eth1 parent 1:1 classid 1:20 htb rate 100kbit ceil 200kbit prio 2 # DNS / ACK / SYN / FIN
    tc class add dev eth1 parent 1:1 classid 1:30 htb rate 250kbit ceil 512kbit prio 3 # Terminal service
    tc class add dev eth1 parent 1:1 classid 1:40 htb rate 512kbit ceil 512kbit prio 4 # HTTP
    tc class add dev eth1 parent 1:1 classid 1:60 htb rate 128kbit ceil 256kbit prio 5 # E-mail
    #--------------adiciona essa classe para receber o tr�fego do zph
    tc class add dev eth1 parent 1:1 classid 1:50 htb rate 5mbit prio 1 #ZPH


    tc qdisc add dev eth1 parent 1:10 handle 10: sfq perturb 10
    tc qdisc add dev eth1 parent 1:20 handle 20: sfq perturb 10
    tc qdisc add dev eth1 parent 1:30 handle 30: sfq perturb 10
    tc qdisc add dev eth1 parent 1:40 handle 40: sfq perturb 10
    tc qdisc add dev eth1 parent 1:50 handle 50: sfq perturb 10
    tc qdisc add dev eth1 parent 1:60 handle 60: sfq perturb 10

    tc filter add dev eth1 parent 1:0 protocol ip prio 1 u32 match ip sport 5060 0xffff flowid 1:10
    tc filter add dev eth1 parent 1:0 protocol ip prio 1 u32 match ip sport 5061 0xffff flowid 1:10
    tc filter add dev eth1 parent 1:0 protocol ip prio 1 u32 match ip sport 10000 0xffff flowid 1:10
    tc filter add dev eth1 parent 1:0 protocol ip prio 1 u32 match ip sport 20000 0xffff flowid 1:10
    tc filter add dev eth1 parent 1:0 protocol ip prio 2 u32 match ip sport 53 0xffff flowid 1:20
    tc filter add dev eth1 parent 1:0 protocol ip prio 3 u32 match ip sport 3389 0xffff flowid 1:30
    tc filter add dev eth1 parent 1:0 protocol ip prio 4 u32 match ip sport 80 0xffff flowid 1:40
    tc filter add dev eth1 parent 1:0 protocol ip prio 5 u32 match ip sport 25 0xfff flowid 1:60
    tc filter add dev eth1 parent 1:0 protocol ip prio 5 u32 match ip sport 110 0xfff flowid 1:60
    #-------------e finalmente o filtro que vai classificar o tr�fego e jogar na classe certa
    tc filter add dev eth1 parent 1:0 protocol ip prio 3 u32 match ip protocol 0x6 0xff match ip tos 0x60 0xff flowid 1:50


    Placa de rede externa:

    !/bin/bash

    tc qdisc del dev eth0 root

    tc qdisc add dev eth0 root handle 1:0 htb default 40
    tc class add dev eth0 parent 1:0 classid 1:1 htb rate 1024kbit

    tc class add dev eth0 parent 1:1 classid 1:10 htb rate 512kbit ceil 512kbit prio 1 # voip
    tc class add dev eth0 parent 1:1 classid 1:20 htb rate 100kbit ceil 200kbit prio 2 # DNS / ACK / SYN / FIN
    tc class add dev eth0 parent 1:1 classid 1:30 htb rate 64kbit ceil 64kbit prio 3 # Terminal service
    tc class add dev eth0 parent 1:1 classid 1:40 htb rate 512kbit ceil 512kbit prio 4 # HTTP
    tc class add dev eth0 parent 1:1 classid 1:50 htb rate 128kbit ceil 256kbit prio 5 # E-mail


    tc qdisc add dev eth0 parent 1:10 handle 10: pfifo limit 10
    tc qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 10
    tc qdisc add dev eth0 parent 1:30 handle 30: sfq perturb 10
    tc qdisc add dev eth0 parent 1:40 handle 40: sfq perturb 10
    tc qdisc add dev eth0 parent 1:50 handle 50: sfq perturb 10


    tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dport 5060 0xffff flowid 1:10
    tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dport 5061 0xffff flowid 1:10
    tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dport 10000 0xffff flowid 1:10
    tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dport 20000 0xffff flowid 1:10
    tc filter add dev eth0 parent 1:0 protocol ip prio 2 u32 match ip dport 53 0xffff flowid 1:20
    tc filter add dev eth0 parent 1:0 protocol ip prio 3 u32 match ip dport 3389 0xffff flowid 1:30
    tc filter add dev eth0 parent 1:0 protocol ip prio 4 u32 match ip dport 80 0xffff flowid 1:40
    tc filter add dev eth0 parent 1:0 protocol ip prio 5 u32 match ip dport 25 0xfff flowid 1:50
    tc filter add dev eth0 parent 1:0 protocol ip prio 5 u32 match ip dport 110 0xfff flowid 1:50


    mas nos testes o QoS do voip não está funcionando...o cache full funciona mas o QoS para o voip ficar com 512k não está funcionando como podem ver nos testes abaixo:


    teste na placa de rede interna:

    proxy:/home/novaf# tc -s -d class show dev eth1
    class htb 1:1 root rate 10000Kbit ceil 10000Kbit burst 6598b/8 mpu 0b overhead 0b cburst 6598b/8 mpu 0b overhead 0b level 7
    Sent 139281689 bytes 190179 pkt (dropped 0, overlimits 0 requeues 0)
    rate 518248bit 98pps backlog 0b 0p requeues 0
    lended: 2071 borrowed: 0 giants: 0
    tokens: 2774 ctokens: 2774

    class htb 1:10 parent 1:1 leaf 10: prio 1 quantum 6400 rate 512000bit ceil 512000bit burst 1855b/8 mpu 0b overhead 0b cburst 1855b/8 mpu 0b overhead 0b level 0
    Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) ==> está zerado o sent
    rate 0bit 0pps backlog 0b 0p requeues 0
    lended: 0 borrowed: 0 giants: 0
    tokens: 29696 ctokens: 29696

    class htb 1:20 parent 1:1 leaf 20: prio 2 quantum 1250 rate 100000bit ceil 200000bit burst 1649b/8 mpu 0b overhead 0b cburst 1699b/8 mpu 0b overhead 0b level 0
    Sent 42805 bytes 223 pkt (dropped 0, overlimits 0 requeues 0)
    rate 472bit 0pps backlog 0b 0p requeues 0
    lended: 223 borrowed: 0 giants: 0
    tokens: 127304 ctokens: 65700

    class htb 1:30 parent 1:1 leaf 30: prio 3 quantum 3125 rate 250000bit ceil 512000bit burst 1724b/8 mpu 0b overhead 0b cburst 1855b/8 mpu 0b overhead 0b level 0
    Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
    rate 0bit 0pps backlog 0b 0p requeues 0
    lended: 0 borrowed: 0 giants: 0
    tokens: 56524 ctokens: 29696

    class htb 1:40 parent 1:1 leaf 40: prio 4 quantum 6400 rate 512000bit ceil 512000bit burst 1855b/8 mpu 0b overhead 0b cburst 1855b/8 mpu 0b overhead 0b level 0
    Sent 132575793 bytes 166721 pkt (dropped 0, overlimits 0 requeues 0)
    rate 509360bit 78pps backlog 0b 15p requeues 0
    lended: 166706 borrowed: 0 giants: 0
    tokens: -47518 ctokens: -47518

    class htb 1:50 parent 1:1 leaf 50: prio 1 quantum 62500 rate 5000Kbit ceil 5000Kbit burst 4Kb/8 mpu 0b overhead 0b cburst 4Kb/8 mpu 0b overhead 0b level 0
    Sent 108045 bytes 312 pkt (dropped 0, overlimits 0 requeues 0)
    rate 112bit 0pps backlog 0b 0p requeues 0
    lended: 312 borrowed: 0 giants: 0
    tokens: 6626 ctokens: 6626

    class htb 1:60 parent 1:1 leaf 60: prio 5 quantum 1600 rate 128000bit ceil 256000bit burst 1663b/8 mpu 0b overhead 0b cburst 1727b/8 mpu 0b overhead 0b level 0
    Sent 6572310 bytes 22938 pkt (dropped 0, overlimits 0 requeues 0)
    rate 8928bit 15pps backlog 0b 0p requeues 0
    lended: 20867 borrowed: 2071 giants: 0
    tokens: 102912 ctokens: 53504




    teste placa de rede externa:

    proxy:/home/novaf# tc -s -d class show dev eth0
    class htb 1:1 root rate 1024Kbit ceil 1024Kbit burst 2111b/8 mpu 0b overhead 0b cburst 2111b/8 mpu 0b overhead 0b level 7
    Sent 34052274 bytes 60356 pkt (dropped 0, overlimits 0 requeues 0)
    rate 264592bit 41pps backlog 0b 0p requeues 0
    lended: 11888 borrowed: 0 giants: 0
    tokens: 14850 ctokens: 14850

    class htb 1:10 parent 1:1 leaf 10: prio 1 quantum 6400 rate 512000bit ceil 512000bit burst 1855b/8 mpu 0b overhead 0b cburst 1855b/8 mpu 0b overhead 0b level 0
    Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) ====>mesma coisa zerada
    rate 0bit 0pps backlog 0b 0p requeues 0
    lended: 0 borrowed: 0 giants: 0
    tokens: 29696 ctokens: 29696

    class htb 1:20 parent 1:1 leaf 20: prio 2 quantum 1250 rate 100000bit ceil 200000bit burst 1649b/8 mpu 0b overhead 0b cburst 1699b/8 mpu 0b overhead 0b level 0
    Sent 22283 bytes 267 pkt (dropped 0, overlimits 0 requeues 0)
    rate 176bit 0pps backlog 0b 0p requeues 0
    lended: 267 borrowed: 0 giants: 0
    tokens: 121407 ctokens: 62752

    class htb 1:30 parent 1:1 leaf 30: prio 3 quantum 1000 rate 64000bit ceil 64000bit burst 1631b/8 mpu 0b overhead 0b cburst 1631b/8 mpu 0b overhead 0b level 0
    Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
    rate 0bit 0pps backlog 0b 0p requeues 0
    lended: 0 borrowed: 0 giants: 0
    tokens: 208896 ctokens: 208896

    class htb 1:40 parent 1:1 leaf 40: prio 4 quantum 6400 rate 512000bit ceil 512000bit burst 1855b/8 mpu 0b overhead 0b cburst 1855b/8 mpu 0b overhead 0b level 0
    Sent 3735641 bytes 32562 pkt (dropped 0, overlimits 0 requeues 0)
    rate 23424bit 18pps backlog 0b 0p requeues 0
    lended: 32562 borrowed: 0 giants: 0
    tokens: 25602 ctokens: 25602

    class htb 1:50 parent 1:1 leaf 50: prio 5 quantum 1600 rate 128000bit ceil 256000bit burst 1663b/8 mpu 0b overhead 0b cburst 1727b/8 mpu 0b overhead 0b level 0
    Sent 30317154 bytes 27543 pkt (dropped 0, overlimits 0 requeues 0)
    rate 244616bit 22pps backlog 0b 16p requeues 0
    lended: 15639 borrowed: 11888 giants: 0
    tokens: -103420 ctokens: -95988

    alguém tem idéia do que pode ser o problema? o que está errado no script?

  2. #2

    Padrão

    procure fazer com marcação de pacotes via iptables


    IFNET=eth0
    IFLOCAL=eth1
    CONT=100
    MARK=101

    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    IPTABLES="/sbin/iptables"


    # ADICIONANDO CLASSES PRINCIPAIS PARA CADA IP
    tc class add dev $IFLOCAL parent 1:1 classid 1:$CONT htb rate "$DOWN"kbit ceil "$MAXDOWN"kbit prio 3
    tc class add dev $IFNET parent 1:1 classid 1:$CONT htb rate "$UP"kbit ceil "$UP"kbit prio 3

    # ADICIONANDO CLASSES COM MAIOR PRIORIDADE CADA IP
    tc class add dev $IFLOCAL parent 1:$CONT classid 1:$MARK htb rate "$(($DOWN * 800))"bit ceil "$MAXDOWN"kbit prio 3
    tc class add dev $IFNET parent 1:$CONT classid 1:$MARK htb rate "$(($UP * 800))"bit ceil "$UP"kbit prio 3

    tc qdisc add dev $IFLOCAL parent 1:$MARK handle "$MARK": sfq perturb 9
    tc qdisc add dev $IFNET parent 1:$MARK handle "$MARK": sfq perturb 9

    tc filter add dev $IFLOCAL parent 1:0 protocol ip prio 10 handle $MARK fw classid 1:$MARK
    tc filter add dev $IFNET parent 1:0 protocol ip prio 10 handle $MARK fw classid 1:$MARK

    $IPTABLES -t mangle -A POSTROUTING -s $IP -p tcp -m multiport --ports 80,3128,443,22,25,53 -j MARK --set-mark $MARK # Seta portas com maior prioridade down
    $IPTABLES -t mangle -A POSTROUTING -d $IP -p tcp -m multiport --ports 80,3128,443,22,25,53 -j MARK --set-mark $MARK # Seta portas com maior prioridade up

    MARK=$(($MARK + 1))

  3. #3

    Padrão

    Faça um teste redurindo a velocidade da rede interna de 10mbit para 1mbit.

  4. #4

    Padrão

    normalmente voip utiliza-se de intervalo de portas portanto marcação de pacotes é necessário

  5. #5

    Padrão

    Olá pessoal. Tenho percebido que quando coloco o squid + htb, o controle de banda se perde.
    Alguem pode me ajudar?
    Obrigado

  6. #6

    Padrão

    Perceba que o controle de banda funciona identificando a origem e destino do pacote, quando se usa proxy quem faz a solicitação para a internet é o proxy logo o trafego fica controlado entre o cliente e o proxy porem do proxy para a internet não.
    O que eu uso bem é <internet>-------------<proxy+nat> ------ <htb> --- <clientes>
    Dessa forma acabo preservando o pacote do cliente até o proxy e faço o controle de banda dos clientes, no proxy eu crio regras locais para que o link não seja totalmente utilizado troco o pfifo por sfq.
    Abraço

  7. #7

  8. #8

    Padrão

    rpz...do nada começou a trafegar na no htb:

    proxy:/home/novaf# tc -s -d class show dev eth1
    class htb 1:1 root rate 100000Kbit ceil 100000Kbit burst 51587b/8 mpu 0b overhead 0b cburst 51587b/8 mpu 0b overhead 0b level 7
    Sent 253792134 bytes 239826 pkt (dropped 0, overlimits 0 requeues 0)
    rate 510816bit 55pps backlog 0b 0p requeues 0
    lended: 148586 borrowed: 0 giants: 0
    tokens: 3981 ctokens: 3981

    class htb 1:10 parent 1:1 leaf 10: prio 1 quantum 6400 rate 512000bit ceil 512000bit burst 1855b/8 mpu 0b overhead 0b cburst 1855b/8 mpu 0b overhead 0b level 0
    Sent 3901 bytes 7 pkt (dropped 0, overlimits 0 requeues 0)
    rate 0bit 0pps backlog 0b 0p requeues 0
    lended: 7 borrowed: 0 giants: 0
    tokens: -6784 ctokens: -6784

    class htb 1:20 parent 1:1 leaf 20: prio 2 quantum 1250 rate 100000bit ceil 200000bit burst 1649b/8 mpu 0b overhead 0b cburst 1699b/8 mpu 0b overhead 0b level 0
    Sent 89368 bytes 395 pkt (dropped 0, overlimits 0 requeues 0)
    rate 40bit 0pps backlog 0b 0p requeues 0
    lended: 395 borrowed: 0 giants: 0
    tokens: 104367 ctokens: 54232

    class htb 1:30 parent 1:1 leaf 30: prio 3 quantum 3125 rate 250000bit ceil 512000bit burst 1724b/8 mpu 0b overhead 0b cburst 1855b/8 mpu 0b overhead 0b level 0
    Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
    rate 0bit 0pps backlog 0b 0p requeues 0
    lended: 0 borrowed: 0 giants: 0
    tokens: 56524 ctokens: 29696

    class htb 1:40 parent 1:1 leaf 40: prio 4 quantum 1600 rate 128000bit ceil 300000bit burst 1663b/8 mpu 0b overhead 0b cburst 1749b/8 mpu 0b overhead 0b level 0
    Sent 20046924 bytes 16666 pkt (dropped 0, overlimits 0 requeues 0)
    rate 126088bit 12pps backlog 0b 2p requeues 0
    lended: 10743 borrowed: 5921 giants: 0
    tokens: -123904 ctokens: -81859

    class htb 1:50 parent 1:1 leaf 50: prio 5 quantum 1600 rate 128000bit ceil 400000bit burst 1663b/8 mpu 0b overhead 0b cburst 1799b/8 mpu 0b overhead 0b level 0
    Sent 233699875 bytes 222769 pkt (dropped 156, overlimits 0 requeues 0)
    rate 386656bit 42pps backlog 0b 9p requeues 0
    lended: 80095 borrowed: 142665 giants: 0
    tokens: -134144 ctokens: -61105

    class htb 1:60 parent 1:1 leaf 60: prio 1 quantum 12500 rate 1000Kbit ceil 1000Kbit burst 2099b/8 mpu 0b overhead 0b cburst 2099b/8 mpu 0b overhead 0b level 0
    Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
    rate 0bit 0pps backlog 0b 0p requeues 0
    lended: 0 borrowed: 0 giants: 0
    tokens: 17203 ctokens: 17203


    não precisei marcar nada no iptables..agora algué conhece algum QoS mais eficiente para voip porque as vezes ainda as ligações picotam....pode ser uma rera diferente de htb + iptables ou etc...

    agora noto que a latencia na placa de rede sobe para se ter uma ideia antes de começar trafegar(quando reininio o servidor) ele pinga 1ms nas maquinas internamente mas agora mesmo está pingando com media de 20ms o que pode ser? porque o htb está subindo a latencia assim?



    outra dúvida tenho proxy autenticado no meu caso ao invés da porta 80 eu deveria colocar a porta 3128 do squid no htb+tc?
    Última edição por lfernandosg; 11-09-2009 às 15:44.

  9. #9

    Padrão

    Olá, eu identifico cada telefone, amarro o mac e o ip no dhcp e crio uma classe no htb para cada um com prioridade 1.
    Dessa forma tenho um excelente resultado na voz.
    Temos vários servidores usando esse modelo e funcionam muito bem.
    []'s

  10. #10

    Padrão

    cara pode colocar um script de exemplo aqui? nosso servidor está ligado a atas, gateway e uma central telefonica que estamos substituindo por um audiocodes mp-124 24 portas fxs então me se puder me passar um script de exemplo agradeço.

  11. #11

    Padrão

    Faço assim:
    dhcp - amarro o ip do telefone
    host ext_251 {
    hardware ethernet 00:04:F2:14:24:BB;
    fixed-address 192.168.155.51;
    }

    HTB-Tools - Reservo 100k (depende do codec que usa) com prioridade 1.
    Isso faz com que a voz tenha sempre prioridade em relacao aos outros.

    client ext_251 {
    bandwidth 100;
    limit 100;
    burst 2;
    priority 1;
    upload 100;
    dst {
    192.168.155.40/32;
    };
    };

    []'s

  12. #12

    Padrão

    Desculpa, coloquei o ip errado no htb. Tem que ser o mesmo ip que está no dhcp.
    []'s

  13. #13

    Padrão

    Certo queria sua dica no caso para reservar 512k do meu linK para todos ips assim:
    Gateway com 24 ramais fxs 10.0.1.11
    Gateway com 2 ramais fxs 10.0.1.12
    Gateway com 8 portas fxo- celulares e linhas analógicas e fax 10.0.1.10

    Como faço para reservar 512k para esses ips?
    obs. Tenho 10 licenças g729

    Oba:tenho 10 licenças g729

  14. #14

    Padrão

    Dentro da classe que passei, coloca todos os ips que necessita.
    Calcula a quantidade de banda com o codec que usa e ligacoes simultaneas.
    Assim nao vai ter problemas de picote. Lembra que o qos tem que ser fim-a-fim.
    Se seu servidor está conectado direto com seu link, não tem problema.
    Usa g729, ele ocupa pouca banda e coloca a mesma quantidade no upload da classe.
    []'s

  15. #15

    Padrão

    mas não teria como colocar o total de 512k para esses ips? porque se eu colocar valores fixo de reserva de banda por IP pode ser que o gw consuma muito mais do que um dos gateways.


    porque quando ligar fixo vamos usar o G729 mas quando usar celular ou fax sai por G711 como o gw audiocodes vai ter o maior número de ramais estou meio perdido de como separar esses 512k entre esse gateway o linksys de 2 portas e o d-link com os celulares e linhas analogicas que vai ficar só três celulares nele.

    Tem alguma dica de como posso dividir? porque se fosse tudo ata não teria como dividir esses 512k para 30 ramais entende? teria que ser os 512k conforme o uso da banda....