Página 1 de 10 123456 ... ÚltimoÚltimo
+ Responder ao Tópico



  1. #1

    Padrão PPoE - QoS Dinâmico e Individual

    Prezados,

    De uns tempo pra cá, vira e mexe recebemos ligações de clientes reclamando que não conseguem acessar nada ou que está extremamente lento, e quando vamos ver a conexão, o consumo de banda do cliente está em 100%.
    Em 90% dos casos é com destino a IP da Microsoft, o que nos leva a crer ser atualização.

    Sendo que desde o lançamento do Windows 10, a quantidade de ligações desse tipo aumentou.

    Diante de tal problema, resolvi ir atrás de alguma solução de QoS individual e automático.
    Consegui achar alguns exemplos de scripts na internet, fiz algumas modificações para poder gerar QoS automático para clientes com ou sem Burst.

    O que ele faz?
    A cada nova conexão, ele analisa os dados da Simple Queue desse cliente, e cria algumas regras no Queue Tree, com 5 tipos de priorização, conforme o tamanho do pacote (independente de site, protocolo ou serviço).

    A principio tem funcionado bem.

    Segue abaixo o script:

    Código :
    /ip firewall mangle
    add action=mark-connection chain=forward comment=QoS-Andriopj_Client_PPPoE new-connection-mark=QoS_conn_Down out-interface=all-ppp passthrough=yes
    add action=mark-packet chain=forward connection-bytes=0-524288 connection-mark=QoS_conn_Down new-packet-mark=QoS-Andriopj_512K passthrough=yes
    add action=mark-packet chain=forward connection-bytes=524289-5242880 connection-mark=QoS_conn_Down new-packet-mark=QoS-Andriopj_5M passthrough=yes
    add action=mark-packet chain=forward connection-bytes=5242881-20971520 connection-mark=QoS_conn_Down new-packet-mark=QoS-Andriopj_20M passthrough=yes
    add action=mark-packet chain=forward connection-bytes=20971521-52428800 connection-mark=QoS_conn_Down new-packet-mark=QoS-Andriopj_50M passthrough=yes
    add action=mark-packet chain=forward connection-bytes=52428801-0 connection-mark=QoS_conn_Down new-packet-mark=QoS-Andriopj_Infinity passthrough=yes

    Esse você adiciona em PPP > Profile
    Abra cada um dos Profiles > aba Scripts > On Up
    Código :
    :foreach i in=[/queue simple find where name="<pppoe-$user>"] do={
        :local NamePPP [/queue simple get $i name];
        :local RateLimit [/queue simple get $i max-limit];
        :local indexExplod [:find $RateLimit "/"];
        :local lenth [:len $RateLimit];
        :local rl [:pick $RateLimit ($indexExplod + 1) ($lenth - 1)];
        :local RateLimitUn [:pick $RateLimit ($lenth - 1) $lenth];
        :local BurstLimit [/queue simple get $i burst-limit];
        :local indexExplod [:find $BurstLimit "/"];
        :local lenth [:len $BurstLimit];
        :local bl [:pick $BurstLimit ($indexExplod + 1) ($lenth - 1)];
        :local BurstLimitUn [:pick $BurstLimit ($lenth - 1) $lenth];
        :local BurstTime [/queue simple get $i burst-time];
        :local indexExplod [:find $BurstTime "/"];
        :local lenth [:len $BurstTime];
        :local bt [:pick $BurstTime ($indexExplod + 1) ($lenth - 1)];
        :local indexExplod [:find $bt "m"];
        :local lenth [:len $bt];
        :local bt0 [:pick $bt 0];
        :local bt1 [:pick $bt ($indexExplod + 1) $lenth];
        :local BurstTh [/queue simple get $i burst-threshold];
        :local indexExplod [:find $BurstTh "/"];
        :local lenth [:len $BurstTh];
        :local bth [:pick $BurstTh ($indexExplod + 1) ($lenth - 1)];
        :local BurstThUn [:pick $BurstTh ($lenth - 1) $lenth];
        :local c512k [($rl * 55 / 100)];
        :local c5M [($rl * 25 / 100)];
        :local c20M [($rl * 20 / 100)];
        :local c50M [($rl * 15 / 100)];
        :local cInf [($rl * 10 / 100)];
        :local cBt [(($bt0 * 60) + $bt1)];
        :if ([:len $bl] != 0) do={
            :log warning "QoS ADD === $NamePPP";
    #        :log warning "Com Burst";
    #        :log warning "Max Limit === $rl $RateLimitUn";
    #        :log warning "Burst Limit === $bl $BurstLimitUn";
    #        :log warning "Burst Thr === $bth $BurstThUn";
    #        :log warning "Burst Time=== $cBt";
    /queue tree add name="QoS_$NamePPP" parent="$interface" queue="default" max-limit="$($rl)$RateLimitUn" burst-limit="$($bl)$BurstLimitUn" burst-time="$cBt" burst-threshold="$($bth)$BurstThUn" bucket-size=0.20;
            /queue tree add name="2-512k_$NamePPP" parent="QoS_$NamePPP" packet-mark="QoS-Andriopj_512K" queue="default" priority="4" limit-at="$($c512k)$RateLimitUn" max-limit="$($rl)$RateLimitUn" burst-limit="$($bl)$BurstLimitUn" burst-time="$cBt" burst-threshold="$($bth)$BurstThUn";
            /queue tree add name="4-5M_$NamePPP" parent="QoS_$NamePPP" packet-mark="QoS-Andriopj_5M" queue="default" priority="5" limit-at="$($c5M)$RateLimitUn" max-limit="$($rl)$RateLimitUn";
            /queue tree add name="6-20M_$NamePPP" parent="QoS_$NamePPP" packet-mark="QoS-Andriopj_20M" queue="default" priority="6" limit-at="$($c20M)$RateLimitUn" max-limit="$($rl)$RateLimitUn";
            /queue tree add name="7-50M_$NamePPP" parent="QoS_$NamePPP" packet-mark="QoS-Andriopj_50M" queue="default" priority="7" limit-at="$($c50M)$RateLimitUn" max-limit="$($rl)$RateLimitUn";
            /queue tree add name="8-Inf_$NamePPP" parent="QoS_$NamePPP" packet-mark="QoS-Andriopj_Infinity" queue="default" priority="8" limit-at="$($cInf)$RateLimitUn" max-limit="$($rl)$RateLimitUn";
            } \
        else={
            :log warning "QoS ADD === $NamePPP";
            /queue tree add name="QoS_$NamePPP" parent="$interface" queue="default" max-limit="$($rl)$RateLimitUn" bucket-size=0.20;
            /queue tree add name="2-512k_$NamePPP" parent="QoS_$NamePPP" packet-mark="QoS-Andriopj_512K" queue="default" priority="2" limit-at="$($c512k)$RateLimitUn" max-limit="$($rl)$RateLimitUn";
            /queue tree add name="4-5M_$NamePPP" parent="QoS_$NamePPP" packet-mark="QoS-Andriopj_5M" queue="default" priority="4" limit-at="$($c5M)$RateLimitUn" max-limit="$($rl)$RateLimitUn";
            /queue tree add name="6-20M_$NamePPP" parent="QoS_$NamePPP" packet-mark="QoS-Andriopj_20M" queue="default" priority="6" limit-at="$($c20M)$RateLimitUn" max-limit="$($rl)$RateLimitUn";
            /queue tree add name="7-50M_$NamePPP" parent="QoS_$NamePPP" packet-mark="QoS-Andriopj_50M" queue="default" priority="7" limit-at="$($c50M)$RateLimitUn" max-limit="$($rl)$RateLimitUn";
            /queue tree add name="8-Inf_$NamePPP" parent="QoS_$NamePPP" packet-mark="QoS-Andriopj_Infinity" queue="default" priority="8" limit-at="$($cInf)$RateLimitUn" max-limit="$($rl)$RateLimitUn";
     
     
     }
    }


    Esse você adiciona em PPP > Profile
    Abra cada um dos Profiles > aba Scripts > On Down
    Código :
    /queue tree remove [find where parent="QoS_<pppoe-$user>"]
    /queue tree remove [find where name="QoS_<pppoe-$user>"]
    :foreach a in=[/queue tree find where invalid] do={ /queue tree remove $a };


    Pronto, agora seu concentrador já deve estar criando o QoS automaticamente para cada cliente que se conectar/reconectar.
    Clique na imagem para uma versão maior

Nome:	         1.jpg
Visualizações:	2168
Tamanho: 	259,7 KB
ID:      	66869


    FONTES:
    https://wiki.mikrotik.com/wiki/Manual:Scripting
    https://wiki.mikrotik.com/wiki/Manua...pting-examples
    https://forum.mikrotik.com/viewtopic.php?t=61974
    https://forum.mikrotik.com/viewtopic.php?t=4887
    http://mk-auth.com.br/forum/topics/qos-din-mico-pppoe
    https://forum.mikrotik.com/viewtopic.php?t=11534

    Última edição por AndrioPJ; 15-08-2018 às 15:18.

  2. #2

    Padrão Re: PPoE - QoS Dinâmico e Individual

    Bela contribuição e de altíssimo nível.
    Parabéns

  3. #3

    Padrão Re: PPoE - QoS Dinâmico e Individual

    [emoji1319][emoji1319]

  4. #4

    Padrão Re: PPoE - QoS Dinâmico e Individual

    Parabens, implantei aqui vou monitorar.

  5. #5

    Padrão Re: PPoE - QoS Dinâmico e Individual

    PS: se tiverem alguma sugestão de correção ou melhoria, me avisem...

  6. #6

    Padrão Re: PPoE - QoS Dinâmico e Individual

    Gostei do conseito. Uma coisa pra melhorar seria colocar a regra default small sfq ou pcq com tudo marcado.

  7. #7

    Padrão Re: PPoE - QoS Dinâmico e Individual

    Eu usei pcq para o problema inicial relatado aqui. Alto consumo causando lentidão.

    A ideia de QoS aqui não é a mais complexa. Prioriza transferências menores ou iniciando.

    Gostei do conseito do script a inicialização dele, criação de queue child em queues dinâmicas.

  8. #8

    Padrão Re: PPoE - QoS Dinâmico e Individual

    Dentro deste contexto também não vejo problema se ele iniciar muitas transferências simultâneamente e o pcq for aplicado a cada categoria só iria ajudar.

  9. #9

    Padrão Re: PPoE - QoS Dinâmico e Individual

    Muito bom.

  10. #10

    Padrão Re: PPoE - QoS Dinâmico e Individual

    @AndrioPJ, eu utilizo o QoS individual em todos os meus concentradores, mais com diferença em um pequeno detalhe, o script eu colo dentro de SYSTEM --> SCRIPT e nos profiles PPP o nome do script, o funcionamento é o mesmo.

    Vendo sua publicação gostaria de compartilhar algo que notei nesse QoS que utilizo algum tempo.

    Fiz alguns testes e notei com ele ou sem ele a navegação pro cliente final não tem mudado significamente, pela regra acredito que ela deveria priorizar os pacotes menores independente do serviço ou protocolo, dessa forma acho que as navegações (sites) deveria ter uma certa qualidade na hora de abrir.

    Monitorando e alguns testes feito com alguns clientes selecionados ao fazer um download por exemplo torrent a banda do cliente é 100% atingida o cliente vai navegar e nada do site abrir, demora tempo e nada, isso com plano de 2 e 3 megas, então para testar removi o cliente da Queue tree, o problema foi o mesmo, nada de melhora na navegação.

    Acredito que algum tipo de melhoria falta a ser acrescentada no QoS. O que acha se fosse acrescentado mais uma regra nesse escript onde ele priorizaria a navegação(abertura de sites) pro cliente final?

    Tive mais certeza do problema quando um amigo configurou um QoS Simples em uma rb450 pra eu colocar em um cliente corporativo no qual solicitou que alguns sites fossem priorizados na abertura de sites, fizemos isso é o resultado foi muito satisfatório. O mesmo teste com download torrent feito com o cliente pppoe usando qos individual foi feito com esta rb, e ao requisitar abertura dos sites priorizados retirou dos outros serviços incluindo o download citado e enviado pros sites, coisa que não estava acontecendo no teste feito com o cliente pppoe.

    O que acha disso?

  11. #11

    Padrão Re: PPoE - QoS Dinâmico e Individual

    Citação Postado originalmente por alextaws Ver Post
    @AndrioPJ, eu utilizo o QoS individual em todos os meus concentradores, mais com diferença em um pequeno detalhe, o script eu colo dentro de SYSTEM --> SCRIPT e nos profiles PPP o nome do script, o funcionamento é o mesmo.

    Vendo sua publicação gostaria de compartilhar algo que notei nesse QoS que utilizo algum tempo.

    Fiz alguns testes e notei com ele ou sem ele a navegação pro cliente final não tem mudado significamente, pela regra acredito que ela deveria priorizar os pacotes menores independente do serviço ou protocolo, dessa forma acho que as navegações (sites) deveria ter uma certa qualidade na hora de abrir.

    Monitorando e alguns testes feito com alguns clientes selecionados ao fazer um download por exemplo torrent a banda do cliente é 100% atingida o cliente vai navegar e nada do site abrir, demora tempo e nada, isso com plano de 2 e 3 megas, então para testar removi o cliente da Queue tree, o problema foi o mesmo, nada de melhora na navegação.

    Acredito que algum tipo de melhoria falta a ser acrescentada no QoS. O que acha se fosse acrescentado mais uma regra nesse escript onde ele priorizaria a navegação(abertura de sites) pro cliente final?

    Tive mais certeza do problema quando um amigo configurou um QoS Simples em uma rb450 pra eu colocar em um cliente corporativo no qual solicitou que alguns sites fossem priorizados na abertura de sites, fizemos isso é o resultado foi muito satisfatório. O mesmo teste com download torrent feito com o cliente pppoe usando qos individual foi feito com esta rb, e ao requisitar abertura dos sites priorizados retirou dos outros serviços incluindo o download citado e enviado pros sites, coisa que não estava acontecendo no teste feito com o cliente pppoe.

    O que acha disso?
    Você tem o script desse QoS simples que seu amigo configurou?
    Quem sabe, poderíamos analisar ele e melhorar...

  12. #12

    Padrão Re: PPoE - QoS Dinâmico e Individual

    Citação Postado originalmente por AndrioPJ Ver Post
    Você tem o script desse QoS simples que seu amigo configurou?
    Quem sabe, poderíamos analisar ele e melhorar...
    o simples da rb do cliente corporativo? ou o individual dos clientes pppoe?

  13. #13

    Padrão Re: PPoE - QoS Dinâmico e Individual

    Citação Postado originalmente por alextaws Ver Post
    o simples da rb do cliente corporativo? ou o individual dos clientes pppoe?
    Esse que vc citou que o resultado foi satisfatório.

  14. #14

    Padrão Re: PPoE - QoS Dinâmico e Individual

    Citação Postado originalmente por AndrioPJ Ver Post
    Esse que vc citou que o resultado foi satisfatório.
    Muito melhor.
    DETALHE: nesse a priorização de sites e depois as mesma regras por tamanho de pacote. A minha dúvida seria se daria para acrescentar no qos individual a mesma priorização, mais ao invés de priorizar sites determinados, priorizar toda navegação

  15. #15

    Padrão Re: PPoE - QoS Dinâmico e Individual

    Citação Postado originalmente por alextaws Ver Post
    Muito melhor.
    DETALHE: nesse a priorização de sites e depois as mesma regras por tamanho de pacote. A minha dúvida seria se daria para acrescentar no qos individual a mesma priorização, mais ao invés de priorizar sites determinados, priorizar toda navegação
    1 - Para provedor, de acordo com o Marco Civil, é proibido priorizar pacotes quanto a origem/destino, conteúdo, terminal ou aplicação.
    ou seja, não se pode priorizar um site em detrimento a outro.

    2 - Esse script que postei prioriza pacotes pequenos, independente da origem/destino, protocolo, aplicação, etc e tal.
    Mas sabemos que pacotes pequenos em sua grande maioria é: dns, ping, navegação ou inicio de algum download/video online.

  16. #16

    Padrão Re: PPoE - QoS Dinâmico e Individual

    A ideia e boa,ja usei algo parecido a um tempo atrás,o problema e que tanto no seu script quanto no que eu usava nao respeita a o burst limit, pra mim infelizmente isso inviabilizou o uso do mesmo,um exemplo pra os menos intendidos: velocidade contratada 2048k , burst limit: 2298k , o pico máximo sempre e 2M. que seria os 2048k.

    Para os que utilizam planos sem brust funciona 100%

  17. #17

    Padrão Re: PPoE - QoS Dinâmico e Individual

    Citação Postado originalmente por sostenes Ver Post
    A ideia e boa,ja usei algo parecido a um tempo atrás,o problema e que tanto no seu script quanto no que eu usava nao respeita a o burst limit, pra mim infelizmente isso inviabilizou o uso do mesmo,um exemplo pra os menos intendidos: velocidade contratada 2048k , burst limit: 2298k , o pico máximo sempre e 2M. que seria os 2048k.

    Para os que utilizam planos sem brust funciona 100%
    Cheguei a ver uns script na internet quando estava estudando uma solução, esses ignoravam totalmente a configuração do burst,.
    Mas vale salientar que Esse que postei adiciona regras para burst tbm...

  18. #18

    Padrão Re: PPoE - QoS Dinâmico e Individual

    Bom to rodando em cima de 900 cliente, até agora tudo ok. Achei uma boa melhora mesmo quando o link esta no gargalo.
    Processamento subiu um pouco mas nada absurdo.

  19. #19

    Padrão Re: PPoE - QoS Dinâmico e Individual

    então... ,verifica ai só é adicionado o burst na primeira regra, nas demais nao tem.

  20. #20

    Padrão Re: PPoE - QoS Dinâmico e Individual

    vou aguardar mais testes dos colegas