Bom tarde a todos!
Dando continuidade ao assunto "Garantia de Banda"  HTB.
Hoje vou compartilhar passo a passo a forma que eu faço aqui para garantir a banda do cliente.
Antes de tudo quero alertar que esse procedimento faz algumas alterações no banco de dados do mk-auth nas tabelas sis_plano, radgroupreply e radreply
(não é uma alteração drástica, mais por questões de segurança melhor fazer um backup antes)
então quem for fazer, aconselho fazer uma backup do mk-auth antes de tudo.

explicando o funcionamento: no mk-auth cada plano terá uma address-list com o mesmo nome do plano,
cada plano pertencerá a um grupo, são 2 grupos empresa e residencia, cada plano terá sua garantia de banda, para isso o script é baseado no nome do plano,
tipo de plano ou velocidade
ex: o plano tipo dedicado fará parte do grupo empresa, se o nome do plano contem empresa, empresarial, corporativo, comercial etc
o script faz uma verificação usando algumas chaves para identificar cada plano e colocá-lo no seu devido grupo, com sua garantia.
A garantia é feita em porcentagem baseada na velocidade de up e down de cada plano, já configurada no arquivo update_planos.php
e pode ser ajustadas nas linhas

$garantia_residencia = 70;
$garantia_empresa = 80;

residencia tem garantia de 70% da velocidade up e down
empresa tem garantia de 80% da velocidade up e down
os planos dedicados tem garantia de 100% por padrão

Assim também as prioridades dos planos podem serem ajustadas nas linhas

$prioridade_empresa = 4;
$prioridade_dedicado = 1;
$prioridade_residencia = 8;

Isso fará o mikrotik identificar qual a velocidade de cada cliente no address-list, o mikrotik não vai trabalhar com filas simples (simple queues) as simple queues dinamicas serão apagadas
o controle será feito na queue tree, o mikrotik usando tool fetch, faz consultas
no mk-auth e importa o script para toda configuração do controle de banda.

Para que tudo funcione corretamente é preciso verificar antes os seguintes pré-requisitos:
- A comunicação SMNP entre mk-auth e mikrotik tem que esta configurada e funcionando.
- Os Clientes tem que estarem com o ramal definido no mk-auth (não funciona com clientes em ramal "todos").
- O mk-auth tem que ter acesso a internet para fazer algumas consultas externas.

1º passo
Vamos prosseguir, configuração básica do SMNP no mikrotik
exemplo ip do mk-auth: 172.31.255.2 (troque pelo o ip do seu mk-auth)

/snmp community
set [ find default=yes ] addresses=172.31.255.2
/snmp
set contact=seuemail@gmail.com enabled=yes location=Brasil trap-target=0.0.0.0

e no mk-auth em controle de servidores as opções:
Megas instalados: (tem que esta preechido com a quantidade de mega disponível para cada ramal)
#ID PLACA: (o id da interface do link no mikrotik)
para descobrir qual é id segue o comando:

/interface print oid

Flags: D - dynamic, X - disabled, R - running, S - slave
0 R ;;; LINK
name=.1.3.6.1.2.1.2.2.1.2.5 actual-mtu=.1.3.6.1.2.1.2.2.1.4.5 mac-address=.1.3.6.1.2.1.2.2.1.6.5 admin-status=.1.3.6.1.2.1.2.2.1.7.5
oper-status=.1.3.6.1.2.1.2.2.1.8.5 bytes-in=.1.3.6.1.2.1.31.1.1.1.6.5 packets-in=.1.3.6.1.2.1.31.1.1.1.7.5 discards-in=.1.3.6.1.2.1.2.2.1.13.5
errors-in=.1.3.6.1.2.1.2.2.1.14.5 bytes-out=.1.3.6.1.2.1.31.1.1.1.10.5 packets-out=.1.3.6.1.2.1.31.1.1.1.11.5 discards-out=.1.3.6.1.2.1.2.2.1.19.5
errors-out=.1.3.6.1.2.1.2.2.1.20.5

o ultimo numero em name=.1.3.6.1.2.1.2.2.1.2.5 nesse exemplo aqui o número 5 é o id da placa 

Ainda no mikrotik, vá em ip address comente o ip que esta configurado no mk-auth em controle de servidores (IP do MK)
coloque o comment "LINK" (sem aspas "").

Agora no mk-auth
2º passo: baixe o arquivo qos.zip e descompacte
3º passo: com o winscp abra a pasta qos e copie a pasta local e qos.sh para /tmp
4º passo: com o putty execute os comandos abaixo no terminal do linux

chmod 777 /tmp/qos.sh

/tmp/qos.sh

o script qos.sh vai fazer todo o trabalho colocando cada arquivo em seu diretório e dando inicio a configuração dos planos.

Vamos para o próximo passo com os scripts mikrotik

5º passo: abra o arquivo mikrotik.txt
6º passo: edite em cada linha do script a KEY onde tive key_api (verifique sua KEY API no menu provedor / dados da empresa)
\n#===============================\r\
\n:global KEY \"key_api\"; \r\
\n#===============================\r\
7º passo: copie e cole no terminal mikrotik e depois execute no terminal do mikrotik o comando
/system script run ler_start_qos

verifique os logs no mikrotik se dá algum erro.

veja no mikrotik em /ip firewall mangle
se foi adicionado as regras de cada plano, e tambem verifique a arvore em /queue tree.
essa é a estrutura qos pode usar a mesma estrutura para fazer um qos de outros serviços agora de acordo com cada plano.
Para ver o real funcionamento é preciso derrubar todas as conexões de clientes no mikrotik,
ou apenas um reboot para o mikrotik pegar a nova address-list de cada cliente, então deixe para fazer esse procedimento no horário mais conveniente.

Testem e postem os resultados, espero que ajude a muitos que procuram algo do tipo.
Não esta 100% porque não é nativo do sistema mk-auth, é apenas uma adaptação com alguns ajustes para diminuir o trabalho manual no mikrotik.
tentei deixar o mais simples possível para implantação.
versão
mikrotik: 6.35
mk-auth: 4.99 64bits

Um Abraço a Todos!

qos.zip

Para adicionar comentários, você deve ser membro de MK-AUTH.

Join MK-AUTH

Votos 0
Enviar-me um email quando as pessoas responderem –

Respostas

  • Boa tarde amigos, rodando QoS do amigo Jonas à uns 45 dias, até agora 100% com relação ao trafego, porém como não temos regras no simple queues não gera gráfico dos clientes no MK-AUTH, se alguém ai tiver uma solução, se o amigo Jonas tiver alguma ideia....

  • Boa noite

    O teste só durou até agora a noite, os cliente tudo ligando aqui reclamando que a net ta lenta, tirei voltou ao normal.

    não sei se é porq uso vdsl pode ser que com dedicado fique bom, irei esperar butar aqui o dedicado e refaço os testes

    Ibrahim Raphael disse:

    olá amigo,

    boa tarde!

    Funciona com o radius normalmente ou tem alguma adaptação?


    Grato.

  • olá amigo,

    boa tarde!

    Funciona com o radius normalmente ou tem alguma adaptação?


    Grato.

    Pitet disse:

    A iniciativa do amigo foi muito boa, nao é desvalorizando nao longe de mim.

    Mas... o do video coloquei em pratica aqui, achei muito boa mesmo, e poucas regras e funcional, a do amigo ai tem muito regra que fica na queue tree muita coisa mesmo sem conta que usa o mk-auth e não vou mentir meu mk-auth é sagrado! nao mexo assim nao.

    A do video pouca coisa e ja faz efeito.

    To usando e 100% aprovado aqui.

  • A iniciativa do amigo foi muito boa, nao é desvalorizando nao longe de mim.

    Mas... o do video coloquei em pratica aqui, achei muito boa mesmo, e poucas regras e funcional, a do amigo ai tem muito regra que fica na queue tree muita coisa mesmo sem conta que usa o mk-auth e não vou mentir meu mk-auth é sagrado! nao mexo assim nao.

    A do video pouca coisa e ja faz efeito.

    To usando e 100% aprovado aqui.


    Pedro Filho disse:

    o vídeo é muito bom mesmo...

    Pitet disse:

    Esse que vc citou nao é bom nao/? olhando o video achei muito bom e mais pratico.

  • o vídeo é muito bom mesmo...

    Pitet disse:

    Esse que vc citou nao é bom nao/? olhando o video achei muito bom e mais pratico.

  • Esse que vc citou nao é bom nao/? olhando o video achei muito bom e mais pratico.

    douglas merquides contardi disse:

    testei aqui ficou otimo, parabens

    estava vendo outro https://www.youtube.com/watch?v=Bgs14CQ94iQ ;

    seria possivel colocar tb dessa forma para ele automaticamente priorizar o download e a abertura de pagina como no video sitado

    obrigado

  • nada haver id da porta com a porta propriamente dita, 
    nas minhas rbs deram desde a 1 ate a 3, em sua maioria a 2, procure a id da interface do link
    Ibrahim Raphael disse:

    Olá amigos,

    Tentei aqui mas não obtive sucesso.

    Aparece o seguinte erro: no such item

    Mudei a placa, mas estou um pouco intrigado porque a id identificada foi a 3 e no mikrotik a ether 3 é conectado o servidor de sms.

    OBS.: Desde quando mudei para a CCR1009 o tool fetch não funciona, será que estou errando em algo?

    Mk-auht 4.99 64 bits

    CCR 1009-8G-1S-1S+ v6.32.4

    Obrigado!

  • Bom dia amigos!!!

    Observando o script list notei algumas coisas que não sei se estão prejudicando o tools fetch:

    ;(eval / (eval /globalname=$addConfLine) (eval /globalname=$addDescLine) (<%% $addDescLine (> $addDescLine);#|     DNS: enabled;) (<%% $addConfLine (> $addConfLine); /ip dns {) (<%% $addConfLine (> $addConfLine);     set allow-remote-requests=yes) (<%% $addConfLine (> $addConfLine);     static add name=router address=192.168.88.1) (<%% $addConfLine (> $addConfLine); }) (<%% $addConfLine (> $addConfLine);))

    ;(eval / (eval /globalname=$addConfLine) (eval /globalname=$addDescLine) (eval /globalname=$dhcpEnabled) (<%% $addDescLine (> $addDescLine);#| LAN Configuration:) (eval /ifcondition=(!= $switchPorts );do=;(eval / (eval /localname=$tmpSwitchPorts;value=) (<%% $addConfLine (> $addConfLine); /interface ethernet {) (eval /ifcondition=(> $switchPortGroups 1);do=;(eval / (eval /foreachcounter=$i;do=;(eval / (eval /setname=$tmpSwitchPorts;value=( .  (eval (eval /pickbegin=0;counter=$i))  (master))) (eval /localname=$tmpMasterName;value=( .  (eval (eval /pickbegin=0;counter=$i)) -master)) (<%% $addConfLine (> $addConfLine);( .     set  (eval (eval /pickbegin=0;counter=$i))  name= $tmpMasterName ;)) (eval /forcounter=$j;do=;(eval / (eval /setname=$tmpSwitchPorts;value=( .  $tmpSwitchPorts ,  (eval (eval /pickbegin=$j;counter=$i)))));from=1;to=(- (eval (eval /lenvalue=$i)) 1)) (<%% $addDescLine (> $addDescLine);( .  #|     switch group:  $tmpSwitchPorts)) (eval /forcounter=$j;do=;(eval / (<%% $addConfLine (> $addConfLine);( .     set  (eval (eval /pickbegin=$j;counter=$i))  master-port= $tmpMasterName ;)));from=1;to=(- (eval (eval /lenvalue=$i)) 1)));in=$switchPorts));else=;(eval / (eval /setname=$tmpSwitchPorts;value=( .  (eval (eval /pickbegin=0;counter=$switchPorts))  (master))) (eval /localname=$tmpMasterName;value=( .  (eval (eval /pickbegin=0;counter=$switchPorts)) -master)) (<%% $addConfLine (> $addConfLine);( .     set  (eval (eval /pickbegin=0;counter=$switchPorts))  name= $tmpMasterName ;)) (eval /forcounter=$i;do=;(eval / (eval /setname=$tmpSwitchPorts;value=( .  $tmpSwitchPorts ,  (eval (eval /pickbegin=$i;counter=$switchPorts)))));from=1;to=(- (eval (eval /lenvalue=$switchPorts)) 1)) (<%% $addDescLine (> $addDescLine);( .  #|     switch group:  $tmpSwitchPorts)) (eval /forcounter=$i;do=;(eval / (<%% $addConfLine (> $addConfLine);( .     set  (eval (eval /pickbegin=$i;counter=$switchPorts))  master-port= $tmpMasterName ;)));from=1;to=(- (eval (eval /lenvalue=$switchPorts)) 1)))) (<%% $addConfLine (> $addConfLine);( .   } $NL)))) (eval /ifcondition=(= $lanPort bridge);do=;(eval / (<%% $addConfLine (> $addConfLine); /interface bridge) (<%% $addConfLine (> $addConfLine);( .     add name= $lanPort  disabled=no auto-mac=yes protocol-mode=rstp comment=defconf;)) (<%% $addConfLine (> $addConfLine); :local bMACIsSet 0;) (eval /ifcondition=(!= $wanPorts );do=;(eval / (eval /localname=$tmpWanPorts;value=) (eval /foreachcounter=$i;do=;(eval / (eval /setname=$tmpWanPorts;value=( .  $tmpWanPorts  || name~ " $i ")));in=$wanPorts) (<%% $addConfLine (> $addConfLine);( .   :foreach k in=[/interface find where !(slave=yes  $tmpWanPorts  || name~ " $lanPort " )] do={)));else=;(eval / (<%% $addConfLine (> $addConfLine); :foreach k in=[/interface find where !(slave=yes)] do={))) (<%% $addConfLine (> $addConfLine);( .     :log info  " k:  $ k ")) (<%% $addConfLine (> $addConfLine);( .     :local tmpPortName [/interface get  $ k name];)) (<%% $addConfLine (> $addConfLine);( .     :log info  " port:  $ tmpPortName ")) (<%% $addConfLine (> $addConfLine);( .     :if ( $ bMACIsSet = 0) do={)) (<%% $addConfLine (> $addConfLine);( .       :if ([/interface get  $ k type] =  " ether " ) do={)) (<%% $addConfLine (> $addConfLine);( .         /interface bridge set  " $lanPort "  auto-mac=no admin-mac=[/interface ethernet get  $ tmpPortName mac-address];)) (<%% $addConfLine (> $addConfLine);       :set bMACIsSet 1;) (<%% $addConfLine (> $addConfLine);     }) (<%% $addConfLine (> $addConfLine);   }) (<%% $addConfLine (> $addConfLine);   /interface bridge port) (<%% $addConfLine (> $addConfLine);( .       add bridge= $lanPort  interface= $ tmpPortName comment=defconf;)) (<%% $addConfLine (> $addConfLine); }))) (<%% $addConfLine (> $addConfLine);( .    /ip address add address=192.168.88.1/24 interface= $lanPort  comment= " defconf " ;)) (eval /ifcondition=(&& (= $dhcpServer 1) (= $dhcpEnabled 1));do=;(eval / (<%% $addDescLine (> $addDescLine);#|     DHCP Server: enabled;) (<%% $addConfLine (> $addConfLine);( .     /ip pool add name= " default-dhcp "  ranges=192.168.88.10-192.168.88.254;)) (<%% $addConfLine (> $addConfLine);   /ip dhcp-server) (<%% $addConfLine (> $addConfLine);( .       add name=defconf address-pool= " default-dhcp "  interface= $lanPort  lease-time=10m disabled=no;)) (<%% $addConfLine (> $addConfLine);   /ip dhcp-server network) (<%% $addConfLine (> $addConfLine);( .       add address=192.168.88.0/24 gateway=192.168.88.1 comment= " defconf " ;)))))

    ;(eval / (eval /globalname=$addConfLine) (eval /globalname=$addDescLine) (eval /globalname=$dhcpEnabled) (eval /ifcondition=(!= $wanPorts );do=;(eval / (eval /localname=$tmpWanPorts;value=) (<%% $addDescLine (> $addDescLine);#| WAN (gateway) Configuration:) (eval /foreachcounter=$i;do=;(eval / (eval /setname=$tmpWanPorts;value=( .  $tmpWanPorts $i  )));in=$wanPorts) (eval /ifcondition=(= $isLte 1);do=;(eval / (<%% $addConfLine (> $addConfLine);     /interface lte set add-default-route=yes;));else=;(eval / (eval /ifcondition=(= $dhcpEnabled 1);do=;(eval / (eval /foreachcounter=$i;do=;(eval / (<%% $addConfLine (> $addConfLine);( .     /ip dhcp-client add interface= $i  disabled=no comment= " defconf " ;)));in=$wanPorts))))) (<%% $addDescLine (> $addDescLine);( .  #|     gateway:   $tmpWanPorts ;)) (<%% $addDescLine (> $addDescLine);#|     firewall:  enabled;) (<%% $addDescLine (> $addDescLine);#|     NAT:   enabled;) (eval /ifcondition=(&& (= $isLte 0) (= $dhcpEnabled 1));do=;(eval / (<%% $addDescLine (> $addDescLine);#|     DHCP Client: enabled;))) (eval /foreachcounter=$i;do=;(eval / (<%% $addConfLine (> $addConfLine);( .   /ip firewall nat add chain=srcnat out-interface= $i  action=masquerade comment= " defconf: masquerade ")));in=$wanPorts) (<%% $addConfLine (> $addConfLine); /ip firewall {) (<%% $addConfLine (> $addConfLine);( .     filter add chain=input action=accept protocol=icmp comment= " defconf: accept ICMP ")) (<%% $addConfLine (> $addConfLine);( .     filter add chain=input action=accept connection-state=established,related comment= " defconf: accept establieshed,related ")) (eval /foreachcounter=$i;do=;(eval / (<%% $addConfLine (> $addConfLine);( .     filter add chain=input action=drop in-interface= $i  comment= " defconf: drop all from WAN ")));in=$wanPorts) (<%% $addConfLine (> $addConfLine);( .     filter add chain=forward action=fasttrack-connection connection-state=established,related comment= " defconf: fasttrack ")) (<%% $addConfLine (> $addConfLine);( .     filter add chain=forward action=accept connection-state=established,related comment= " defconf: accept established,related ")) (<%% $addConfLine (> $addConfLine);( .     filter add chain=forward action=drop connection-state=invalid comment= " defconf: drop invalid ")) (eval /foreachcounter=$i;do=;(eval / (<%% $addConfLine (> $addConfLine);( .     filter add chain=forward action=drop connection-state=new connection-nat-state=!dstnat in-interface= $i  comment= " defconf:  drop all from WAN not DSTNATed ")));in=$wanPorts) (<%% $addConfLine (> $addConfLine); }) (eval /foreachcounter=$i;do=;(eval / (<%% $addConfLine (> $addConfLine);( .   /ip neighbor discovery set [find name= " $i " ] discover=no)));in=$wanPorts) (<%% $addConfLine (> $addConfLine); /tool mac-server disable [find];) (<%% $addConfLine (> $addConfLine); /tool mac-server mac-winbox disable [find];) (eval /ifcondition=(!= $wanPorts );do=;(eval / (eval /localname=$tmpWanPorts;value=) (eval /foreachcounter=$i;do=;(eval / (eval /setname=$tmpWanPorts;value=( .  $tmpWanPorts  || name~ " $i ")));in=$wanPorts) (<%% $addConfLine (> $addConfLine);( .   :foreach k in=[/interface find where !(slave=yes  $tmpWanPorts )] do={)));else=;(eval / (<%% $addConfLine (> $addConfLine); :foreach k in=[/interface find where !(slave=yes)] do={))) (<%% $addConfLine (> $addConfLine);( .     :local tmpName [/interface get  $ k name];)) (<%% $addConfLine (> $addConfLine);( .     /tool mac-server add interface= $ tmpName disabled=no;)) (<%% $addConfLine (> $addConfLine);( .     /tool mac-server mac-winbox add interface= $ tmpName disabled=no;)) (<%% $addConfLine (> $addConfLine); }))))

    Sendo que nunca utilizei o ip padrão do mikrotik e porque está aparecendo?

    Obrigado a todos!

  • olá ... boa noite a todos!

    Percebi que ele gera um arquivo em files que fica em 0B, porém derrubei alguns clientes e quando observei no adress list havia o IP e a velocidade do cliente. No entanto, nada aconteceu no mangle e na queue tree.

    OBS.: Comando manual no script

    Alguém pode me orientar?

    Agradeço a todos,

    Fiquem com Deus!

  • Achei interessante e muito útil, para quem sabe realmente é uma mão na roda. para quem não sabe fica somente o sabor da vontade.

    Meu tool fetch não funciona e mikrotik mesmo manualmente não faz a mágica. :(

This reply was deleted.