Sei sulla pagina 1di 3

PPoE - QoS Dinâmico e Individual

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.

Codigo:

/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 };

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

Potrebbero piacerti anche