Página 1 de 5 12345 ÚltimoÚltimo
+ Responder ao Tópico



  1. #1

    Padrão controle dinamico de portas UDP (solucao para o ares)

    bom acho q não é só eu q tenho problemas com clientes q ultrapassam as velocidades dos queues devido aos programinhas de P2P como o famoso ares

    bom como eu tenho clientes q usam voip e o tal ares junto, fica dificil bloquear as portas UDP deles

    logo pensei em criar um script, de tantos em tantos minuto checaria a velocidade de cada cliente, se ela estivesse 10% acima do contratado o script bloquearia as portas UDP, quando a velocidade baixar 20% do contratado o script habilitaria novamente as portas UDP

    assim foi, cheguei até comentar com o amigo alexsuarezferreira no msn q estava preparando esse script, mas nao imaginava q iria acabar logo, em 6 horas de bateção de cabeça terminei e vou deixar aqui pro pessoal, pra quem quiser testar

    Requisitos:
    Simple Queue em todos clientes com Priority=8
    Faixas de IPs clientes q comecem com "1" ex: 192.168.x.x, 10.x.x.x
    Última edição por undrtkr; 24-09-2007 às 13:20. Razão: solucao para o ares

  2. #2

    Padrão

    Scheduler:
    Código :
    /system scheduler add name=controle_udp on-event=controle_udp interval=3m
    aqui o valor interval pode ser mudado pro valor q desejarem fazer a verificacao

    Scripts:
    Código :
    /system script add
    name="controle_udp" owner="admin" policy=ftp,reboot,read,write,policy,test,winbox,password source=
         :foreach i in=[/que sim find priority=8] do={
                   :global ip [/que sim get $i target-address];
                   :set ip [:pick [:tostr $ip] 0 [:find [:tostr $ip] "/"]];
     
                   :local rate [/que sim get [/que sim find target-address=$ip] rate];
                   :global rxrate [:pick $rate 0 [:find $rate "/"]];
                   :global txrate [:pick $rate ([:find $rate "/"]+1) [:len $rate]];
     
                   :local limit [/que sim get [/que sim find target-address=$ip] max-limit];
                   :local rxlimit [:pick $limit 0 [:find $limit "/"]];
                   :local txlimit [:pick $limit ([:find $limit "/"]+1) [:len $limit]];
                   :set rxlimit ($rxlimit + ($rxlimit / 10));
                   :set txlimit ($txlimit + ($txlimit / 10));
     
                   :if (($txrate > $txlimit) || ($rxrate > $rxlimit)) do={ /sys scri run [/sys scri find name=bloqueia_udp] };
     
                   :foreach j in=[/ip fire fil find src-port=1025-65535] do={
                             :local ipblock [/ip fire fil get $j comment];
                             :set ipblock [:pick [:tostr $ipblock] [:find $ipblock "1"] [:len $ipblock]];
                             :if ($ip = $ipblock) do={
                                  :local txlimit20 ($txlimit - ($txlimit / 5));
                                  :local rxlimit20 ($rxlimit - ($rxlimit / 5));
                                 :if (($rxrate < $rxlimit20) && ($txrate < $txlimit20)) do={ /sys scri run [/sys scri find name=desbloqueia_udp] };
                              }
                   }
          }

    Código :
    /system script add name="bloqueia_udp" owner="admin" policy=ftp,reboot,read,write,policy,test,winbox,password source=
         :log warning ("Cliente " . $ip . " ultrapassou a banda! (up: " . ($rxrate/1024) . "kbps / down: " . ($txrate/1024) . "kbps)");
         :log warning ("Bloqueando portas UDP do IP: " . $ip);
     
         /ip firewall filter add chain=forward src-address=$ip protocol=udp src-port=1025-65535 dst-port=1025-65535 action=drop comment=("Bloqueio das p
    ortas UDP por excesso de banda - " . $ip)


    Código :
    /system script add  name="desbloqueia_udp" owner="admin" policy=ftp,reboot,read,write,policy,test,winbox,password source=
         :log info ("Cliente " . $ip . " voltou para banda normal! (up: " . ($rxrate/1024) . "kbps / down: " . ($txrate/1024) . "kbps)");
         :log info ("Desbloqueando portas UDP do IP: " . $ip);
     
         /ip firewall filter remove [/ip fire fil find comment=("Bloqueio das portas UDP por excesso de banda - " . $ip)];

    quem axar interessante, pode testar

    lembrando q esse script foi criado por mim, e estou liberando ele publicamente pra quem quiser usa-lo
    Última edição por undrtkr; 24-09-2007 às 13:15.



  3. #3

    Padrão

    tenho impressão de já ter visto esse script no site gringo do mikrotik!!

    mais mesmo assim valeu ae!!

  4. #4

    Padrão

    Citação Postado originalmente por kilderman Ver Post
    tenho impressão de já ter visto esse script no site gringo do mikrotik!!

    mais mesmo assim valeu ae!!
    kilderman, o script fui eu q escrevi, e procurei um monte no forum gringo algo parecido e nao achei

    mas postei um topico sobre ele ontem a noite, pode pesquisar é uma idéia original do brasil hehehe (a idéia talvez nao, mas a mente q escreveu sim)

    o script já esta funcional aqui no meu provedor, bloqueando e desbloqueando as UDP dos clientes com ares, porem tive q mudar o scheduler para 3 minutos senão o cliente ja voltava a subir a banda durantes os 15 minutos

    segue imagem dele rodando no meu mikrotik:
    Miniaturas de Anexos Miniaturas de Anexos Clique na imagem para uma versão maior

Nome:	         script_rodando.JPG
Visualizações:	296
Tamanho: 	65,9 KB
ID:      	1126  
    Última edição por undrtkr; 24-09-2007 às 13:19.



  5. #5

    Padrão

    Muito boa iniciativa mano, mais quando tendo adicionar o 1° script da o seguinte erro:

    invalid value for argument target-addresses
    invalid item number

    Oq pode ser isto?

  6. #6

    Padrão

    Citação Postado originalmente por rogeriodj Ver Post
    Muito boa iniciativa mano, mais quando tendo adicionar o 1° script da o seguinte erro:

    invalid value for argument target-addresses
    invalid item number

    Oq pode ser isto?
    da uma verificada o correto seria
    target-addresses -> target-address