1 Anexo(s)
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.
Anexo 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
https://www.youtube.com/watch?v=BwyPYTtF23Q
Re: PPoE - QoS Dinâmico e Individual
Bela contribuição e de altíssimo nível.
Parabéns
Re: PPoE - QoS Dinâmico e Individual
Re: PPoE - QoS Dinâmico e Individual
Parabens, implantei aqui vou monitorar.
Re: PPoE - QoS Dinâmico e Individual
PS: se tiverem alguma sugestão de correção ou melhoria, me avisem...
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.
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.
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.
Re: PPoE - QoS Dinâmico e Individual
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?
Re: PPoE - QoS Dinâmico e Individual
Citação:
Postado originalmente por
alextaws
@
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...
Re: PPoE - QoS Dinâmico e Individual
Citação:
Postado originalmente por
AndrioPJ
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?
Re: PPoE - QoS Dinâmico e Individual
Citação:
Postado originalmente por
alextaws
o simples da rb do cliente corporativo? ou o individual dos clientes pppoe?
Esse que vc citou que o resultado foi satisfatório.
Re: PPoE - QoS Dinâmico e Individual
Citação:
Postado originalmente por
AndrioPJ
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
Re: PPoE - QoS Dinâmico e Individual
Citação:
Postado originalmente por
alextaws
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.
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%
Re: PPoE - QoS Dinâmico e Individual
Citação:
Postado originalmente por
sostenes
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...
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.
Re: PPoE - QoS Dinâmico e Individual
então... ,verifica ai só é adicionado o burst na primeira regra, nas demais nao tem.
Re: PPoE - QoS Dinâmico e Individual
vou aguardar mais testes dos colegas