Simple Queue from dhcp leases

Tema en 'Scripting & Scheduling' iniciado por gnando, 1 Jun 2015.

  1. gnando

    gnando New Member

    Me Gusta recibidos:
    1
    hola a todos!

    Estoy buscando en script que me recorra los leases del dhcp y me agrege las ip a
    simple queue con 1M/1M, si alguien lo tiene armado se lo agradeceria.

    saludos
     
  2. ALEJANDROGORDON

    ALEJANDROGORDON Well-Known Member

    Me Gusta recibidos:
    1.741
    para eso no necesitas un script puede hacer una regla de mangle que apunte a toda la red que requieres y usando simple queue o tree mas pcq, haces una regla global para que todo el que se conecte lo limite a maximo 1mb.
     
  3. lepumin

    lepumin Well-Known Member

    Me Gusta recibidos:
    172
    Editar DHCP Server y en Lease Script poner este codigo
    Insertar CODE, HTML o PHP:
    #DHCP Lease Script a SimpleQueue
    #@lepumin
    
    :local maquina [/ip dhcp-server lease get [find where  active-address=$leaseActIP && active-mac-address=$leaseActMAC] host-name];
    :if ($leaseBound = "1") do={
    /queue simple add name=$maquina target=$leaseActIP max-limit=1M/1M
    } else={ /queue simple remove $maquina }
    Saludos
     
    Última edición: 1 Jun 2015
  4. thunderM

    thunderM Active Member

    Me Gusta recibidos:
    113
    me parece mas simple con mangle y tree.
     
  5. gnando

    gnando New Member

    Me Gusta recibidos:
    1
    Hola muchachos gracias por la info me ha sido de gran utilidad.
    Ahora quisiera saber sino es mucho pedir como hacer para asignar a una determinada pc(segun mac address) un gateway diferente al que se asigna en la configuracion genereal del DHCP server.
    De no poderse se puede asignar una ruta?

    saludos y agurado sus comentarios.
     
  6. freedarwuin

    freedarwuin New Member

    Me Gusta recibidos:
    0
    #DHCP Lease Script a SimpleQueue
    #@lepumin

    :local maquina [/ip dhcp-server lease get [find where active-address=$leaseActIP && active-mac-address=$leaseActMAC] host-name];
    :if ($leaseBound = "1") do={
    /queue simple add name=$maquina target=$leaseActIP max-limit=1M/1M
    } else={ /queue simple remove $maquina }

    ese codigo que hace?
     
  7. fcmontes

    fcmontes Well-Known Member

    Me Gusta recibidos:
    1.422
    Aqui lo tienes, solo tienes, ademas, tambien puedes modificar la velocidad de los moviles.
    No olvides dar algun me gusta si es lo que estas buscando.
    Insertar CODE, HTML o PHP:
    # Asignar Queue simple desde DHCP Leases
    
    #Definimos los limites de ancho de banda que hay que asignar.
    global MaxUP 1M
    global MaxDown 1M
    #Definimos los limites de ancho de banda para los moviles.
    global MaxMUP 1M
    global MaxMDown 1M
    
    # Definimos variables desde DHCP Leases
    /ip dhcp-server lease
    :foreach x in=[find] do={
    :local leaseaddr ([get $x address]."/32")
    :local leasemacaddr [get $x mac-address]
    :local leasehostname [get $x host-name]
    :local leasename [get $x comment]
    :local queuecomment
    :local leaseinqueue false
    :delay (10ms);
    /queue simple
    :foreach y in=[find] do={
    
    # Definir las variables desde Queues.
    :local queuetargetaddr [get $y target]
    :set queuecomment [get $y comment]
    
    # Aislar la informacion extraida del campo Comment y Host (MAC, leasehostname)
    :local queuemac [:pick $queuecomment 4 21]
    :local queuehostname [:pick $queuecomment 22 [:len $queuecomment]]
    :delay (10ms);
    # Si la MAC del leases coincide con la MAC de la cola, actualiza la informacion.
    :if ($queuemac = $leasemacaddr) do={
    # Añadir comentario
    :set queuecomment ("MAC.--" . $leasemacaddr . ",Host.--" . $leasehostname)
    set $y target=$leaseaddr comment=$queuecomment
    :delay (10ms);
    #Si se detecta que es un Movil, modifica tambien la velocidad
    :if ($queuecomment~"iPhone" or $queuecomment~"android") do={
    set $y max-limit="$MaxMUP/$MaxMDown"
    }
    :delay (10ms);
    :if ($leasename != "") do= {
    set $y name=($leasename . " (" . $leasemacaddr . ")")
    } else= {
    :if ($leasehostname != "") do= {
    set $y name=($leasehostname . " (" . $leasemacaddr . ")")
    } else= {
    set $y name=$leasemacaddr
    :delay (10ms);
    }}
    :set leaseinqueue true
    } else= {
    # Si existe ip para este arrendamiento pero mac es diferente a continuación, actualizar mac / nombre de host y resetea contador
    :if ($queuetargetaddr = $leaseaddr) do={
    # Definir campo de comentarios
    :set queuecomment ("MAC.--" . $leasemacaddr . ",Host.--" . $leasehostname)
    set $y comment=$queuecomment
    reset-counters $y
    :delay (10ms);
    :if ($leasename != "") do= {
    set $y name=($leasename . " (" . $leasemacaddr . ")")
    #Si se detecta que es un Movil, modifica tambien la velocidad
    :if ($leasehostname~"iPhone" or $leasehostname~"android") do={
    set $y max-limit="$MaxMUP/$MaxMDown"
    }} else= {
    :if ($leasehostname != "") do= {
    set $y name=($leasehostname . " (" . $leasemacaddr . ")")
    } else= {
    set $y name=$leasemacaddr
    }}
    :set leaseinqueue true
    }}}
    :delay (10ms);
    
    
    # Si no esiste una entrada en el leases, elimina el queue de la lista
    :if ($leaseinqueue = false) do={
    # Crea un comentario
    :set queuecomment ("MAC.--" . $leasemacaddr . ",Host.--" . $leasehostname)
    
    :if ($leasehostname~"iPhone" or $leasehostname~"android") do={
    
    :local cmd "/queue simple add target=$leaseaddr max-limit=$MaxMUP/$MaxMDown comment=$queuecomment queue=PCQUp/PCQDown \ total-queue=default"
    :if ($leasename != "") do={
    :set cmd "$cmd name=\"$leasename ($leasemacaddr)\""
    } else= {
    :if ($leasehostname != "") do={
    :set cmd "$cmd name=\"$leasehostname ($leasemacaddr)\""
    } else= {
    :set cmd "$cmd name=\"$leasemacaddr\""
    }}
    :execute $cmd
    } else={\
    
    :local cmd "/queue simple add target=$leaseaddr max-limit=$MaxUP/$MaxDown comment=$queuecomment queue=PCQUp/PCQDown \ total-queue=default"
    :if ($leasename != "") do={
    :set cmd "$cmd name=\"$leasename ($leasemacaddr)\""
    } else= {
    :if ($leasehostname != "") do={
    :set cmd "$cmd name=\"$leasehostname ($leasemacaddr)\""
    } else= {
    :set cmd "$cmd name=\"$leasemacaddr\""
    }}
    :execute $cmd
    }}}
    
    
    :delay (10ms);
    # Eliminar las entradas dinámicas que ya no existen en la tabla de arrendamiento
    /queue simple
    :foreach z in=[find] do={
    :local queuecomment [get $z comment]
    :local queue2ndpart [:pick $queuecomment 6 23]
    :put $queue2ndpart
    :delay (10ms);
    :if ( [/ip dhcp-server lease find mac-address=$queue2ndpart] = "") do={
    :delay (10ms);
    :log info ("DTQ: Removing stale entry for MAC Address - " . $queue2ndpart)
    remove $z
    }}
    
    
     
  8. lepumin

    lepumin Well-Known Member

    Me Gusta recibidos:
    172
    Pues agrega una cola simple por cada IP entregada por un DHCP.
    Saludos
     
  9. Alexis Luchini

    Alexis Luchini New Member

    Me Gusta recibidos:
    1
    Hola Félix, excelente código!

    Pero por algún motivo que desconozco no me funciona... Lo único que puedo decirte es que mi DHCP entrega IP's desde 192.168.128.1/16 hasta 192.168.192.254/16

    Modifiqué donde dice
    Insertar CODE, HTML o PHP:
     :local leaseaddr ([get $x address]."/32") 
    pero no funciona...

     
  10. arielf

    arielf Member

    Me Gusta recibidos:
    11
    y porque no le seteas al opcion de rate cuando cargas el cliente,,
     
  11. amperex

    amperex New Member

    Me Gusta recibidos:
    0
    Muchas gracias por compartirlo, estoy probandolo pero despues de ejecutarlo no se añade nada al listado de queues simples, ¿a que puede ser debido?. En el log no me aparece ningún error, las policies he escojido todas y me he asegurado de haber ejecutado el script a mano desde el mismo cuadro después de guardar.

    Gracias

     
  12. fcmontes

    fcmontes Well-Known Member

    Me Gusta recibidos:
    1.422
    Prueba a ejecutarlo por consola, para ver cual es el error, pues habria que ver cual es tu configuracion en tu equipo, para ver porque no funciona.
     
  13. leningomez

    leningomez Member

    Me Gusta recibidos:
    15
    Realmente eres bueno en lo que haces @fcmontes felicitaciones ..saludos...
     
  14. fcmontes

    fcmontes Well-Known Member

    Me Gusta recibidos:
    1.422
    Gracias hombre, esta bien que de vez en cuando reconozcan tu valia.
    El secreto reside en que me apasiona lo que hago.
    Un saludo.
     
    A OneRED le gusta esto.
  15. cemaraya

    cemaraya Member

    Me Gusta recibidos:
    1
    Hola
    Estoy actualmente implementando una solucion en "clientes multiusers finales".
    Asi defino a los lugares tales como establecimientos rurales con muchos empleados, fabricas, casas de famila con muchos integrantes conectados... etc...
    Actualmente uso este script en el LEASE SCRIPT del DHCP Server, para dar servicio a los que se conectan al wifi, o a las puertas del RB que coloco para administrar.
    Insertar CODE, HTML o PHP:
    :local queueName "$leaseActMAC";
    
    :if ($leaseBound="1") do={
        /queue simple add name=$queueName target=($leaseActIP . "/32") parent=---Moviles max-limit=512k/768k comment=[/ip dhcp-server lease get [find where active-mac-address=$leaseActMAC && active-address=$leaseActIP] host-name];
    } else={
        /queue simple remove $queueName
    }
    Está bueno y funciona.. PERO....
    Sucede que el ancho de banda de ese cliente es de 4096k dwn 2048k up; y habiendo un solo dispositivo conectado, el cliente solo percibe "casi un mega de bajada".. y reclama que él me compra 4 megas....
    Que manera tengo para aplicar un sistema dinamico de asignacion de ancho de banda de acuerdo a la cantidad de dispositivos reales conectados?
    Es decir.. si hay 1, le da todo el ancho de banda comprado.. si hay 3, divide el ancho de banda entre los tres..
    Se puede lograr esta idea?
    Muchas gracias !!
     
  16. yusepe

    yusepe New Member

    Me Gusta recibidos:
    0
    funciona bien pero cuando cambia una ip o se elimina del dhcp no lo elimina de las colas simples.. por lo demas va genial ¿alguna idea de que puede estar pasando? gracias de antemano.
     
  17. yusepe

    yusepe New Member

    Me Gusta recibidos:
    0
    buenas me contesto a mi mismo.. no tengo mucha idea de programación pero he encontrado este que va muy bien en un sistema ver 6.35.4 en mas de una ocasión he visto scripts que funcionaban en una version de sistema en actualizaciones posteriores ya no... pongo esta que esta probada por si le sirve a alguien como me ha servidor a mi.

    :local queueName "Client- $leaseActMAC";

    :if ($leaseBound = "1") do={
    /queue simple add name=$queueName target=($leaseActIP . "/32") limit-at=1024k/1024k max-limit=1024k/1024k comment=[/ip dhcp-server lease get [find where active-mac-address=$leaseActMAC && active-address=$leaseActIP] host-name];
    } else={
    /queue simple remove $queueName
    }
     

Compartir esta página