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 extre mamente 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 n a 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 Simpl e 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 connectionmark=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 connectionmark=QoS_conn_Down new-packet-mark=QoS-Andriopj_Infinity passthrough=yes
Esse você adiciona em PPP > Profile Abra cada um dos Profiles > aba Scripts S cripts > On Up Código : :foreach i in=[/queue simple find where name="
"] 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" maxlimit="$($rl)$rlUnity" burst-limit="$($bl)$blUnity" burst-time="$cBt" burstthreshold="$($bth)$bthUnity" bucket-size=0.20; /queue tree add name="2-512k_$qName" parent="QoS_$qName" packetmark="QoS-Andriopj_512K" queue="default" priority="4" limitat="$($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" packetmark="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" packetmark="QoS-Andriopj_20M" queue="default" priority="6" limitat="$($c20M)$rlUnity" max-limit="$($rl)$rlUnity"; /queue tree add name="7-50M_$qName" parent="QoS_$qName" packetmark="QoS-Andriopj_50M" queue="default" priority="7" limitat="$($c50M)$rlUnity" max-limit="$($rl)$rlUnity";
/queue tree add name="8-Inf_$qName" parent="QoS_$qName" packetmark="QoS-Andriopj_Infinity" queue="default" priority="8" limitat="$($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" packetmark="QoS-Andriopj_512K" queue="default" priority="2" limitat="$($c512k)$rlUnity" max-limit="$($rl)$rlUnity"; /queue tree add name="4-5M_$qName" parent="QoS_$qName" packetmark="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" packetmark="QoS-Andriopj_20M" queue="default" priority="6" limitat="$($c20M)$rlUnity" max-limit="$($rl)$rlUnity"; /queue tree add name="7-50M_$qName" parent="QoS_$qName" packetmark="QoS-Andriopj_50M" queue="default" priority="7" limitat="$($c50M)$rlUnity" max-limit="$($rl)$rlUnity"; /queue tree add name="8-Inf_$qName" parent="QoS_$qName" packetmark="QoS-Andriopj_Infinity" queue="default" priority="8" limitat="$($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_"] /queue tree remove [find where name="QoS_"] :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