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

  1. 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 qName [/queue simple get $i name];
        :local rLimit [/queue simple get $i max-limit];
        :local indexExplod [:find $rLimit "/"];
        :local lenth [:len $rLimit];
        :local rl [:pick $rLimit ($indexExplod + 1) ($lenth - 1)];
        :local rlUnity [:pick $rLimit ($lenth - 1) $lenth];
        :local burstl [/queue simple get $i burst-limit];
        :local indexExplod [:find $burstl "/"];
        :local lenth [:len $burstl];
        :local bl [:pick $burstl ($indexExplod + 1) ($lenth - 1)];
        :local blUnity [:pick $burstl ($lenth - 1) $lenth];
        :local burstt [/queue simple get $i burst-time];
        :local indexExplod [:find $burstt "/"];
        :local lenth [:len $burstt];
        :local bt [:pick $burstt ($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 bthUnity [: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 === $qName";
    #        :log warning "Com Burst";
    #        :log warning "Max Limit === $rl $rlUnity";
    #        :log warning "Burst Limit === $bl $blUnity";
    #        :log warning "Burst Thr === $bth $bthUnity";
    #        :log warning "Burst Time=== $cBt";
    /queue tree add name="QoS_$qName" parent="$interface" queue="default" max-limit="$($rl)$rlUnity" burst-limit="$($bl)$blUnity" burst-time="$cBt" burst-threshold="$($bth)$bthUnity" bucket-size=0.20;
            /queue tree add name="2-512k_$qName" parent="QoS_$qName" packet-mark="QoS-Andriopj_512K" queue="default" priority="4" limit-at="$($c512k)$rlUnity" max-limit="$($rl)$rlUnity" burst-limit="$($bl)$blUnity" burst-time="$cBt" burst-threshold="$($bth)$bthUnity";
            /queue tree add name="4-5M_$qName" parent="QoS_$qName" packet-mark="QoS-Andriopj_5M" queue="default" priority="5" limit-at="$($c5M)$rlUnity" max-limit="$($rl)$rlUnity";
            /queue tree add name="6-20M_$qName" parent="QoS_$qName" packet-mark="QoS-Andriopj_20M" queue="default" priority="6" limit-at="$($c20M)$rlUnity" max-limit="$($rl)$rlUnity";
            /queue tree add name="7-50M_$qName" parent="QoS_$qName" packet-mark="QoS-Andriopj_50M" queue="default" priority="7" limit-at="$($c50M)$rlUnity" max-limit="$($rl)$rlUnity";
            /queue tree add name="8-Inf_$qName" parent="QoS_$qName" packet-mark="QoS-Andriopj_Infinity" queue="default" priority="8" limit-at="$($cInf)$rlUnity" max-limit="$($rl)$rlUnity";
            } \
        else={
            :log warning "QoS ADD === $qName";
            /queue tree add name="QoS_$qName" parent="$interface" queue="default" max-limit="$($rl)$rlUnity" bucket-size=0.20;
            /queue tree add name="2-512k_$qName" parent="QoS_$qName" packet-mark="QoS-Andriopj_512K" queue="default" priority="2" limit-at="$($c512k)$rlUnity" max-limit="$($rl)$rlUnity";
            /queue tree add name="4-5M_$qName" parent="QoS_$qName" packet-mark="QoS-Andriopj_5M" queue="default" priority="4" limit-at="$($c5M)$rlUnity" max-limit="$($rl)$rlUnity";
            /queue tree add name="6-20M_$qName" parent="QoS_$qName" packet-mark="QoS-Andriopj_20M" queue="default" priority="6" limit-at="$($c20M)$rlUnity" max-limit="$($rl)$rlUnity";
            /queue tree add name="7-50M_$qName" parent="QoS_$qName" packet-mark="QoS-Andriopj_50M" queue="default" priority="7" limit-at="$($c50M)$rlUnity" max-limit="$($rl)$rlUnity";
            /queue tree add name="8-Inf_$qName" parent="QoS_$qName" packet-mark="QoS-Andriopj_Infinity" queue="default" priority="8" limit-at="$($cInf)$rlUnity" max-limit="$($rl)$rlUnity";
    
     }
    }

    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:	135
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; 13-06-2017 às 22:16.

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





  3. Parabens, implantei aqui vou monitorar.

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







Tópicos Similares

  1. MikrotiK - QoS - Individual
    Por vulcan no fórum Redes
    Respostas: 6
    Último Post: 19-07-2011, 08:07
  2. Respostas: 8
    Último Post: 18-09-2010, 22:01
  3. PPoE com Queue Dinamico
    Por aka2005 no fórum Redes
    Respostas: 5
    Último Post: 24-10-2008, 13:04
  4. Respostas: 5
    Último Post: 26-02-2008, 23:41
  5. QoS - Traffic Control - tc - tcng
    Por skopp no fórum Servidores de Rede
    Respostas: 21
    Último Post: 20-01-2003, 23:21

Visite: BR-Linux ·  VivaOLinux ·  Dicas-L