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.
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