Crea colas simples automáticamente con DHCP Server en MikroTik RouterOS

¿Por qué automatizar las colas?

Si manejas un ISP o WISP con MikroTik RouterOS, sabes que una de las tareas más tediosas es gestionar las colas simples para cada cliente. Crearlas una por una, actualizar velocidades, eliminar las de clientes que se dan de baja... es un trabajo manual que te roba tiempo y propicia errores.

La solución está en el propio RouterOS: el servidor DHCP puede ejecutar scripts automáticamente cuando un cliente recibe o pierde su concesión. Con esto puedes crear y eliminar colas simples sin intervención manual.

Pero ojo: no se trata de crear colas de forma descontrolada. Todas las colas deben estar dentro de una cola padre para limitar el ancho de banda total. Así evitas que un cliente se coma todo el recurso y proteges a los demás.


La estructura: cola padre + colas hijas

El esquema es simple:

  • Una cola padre llamada WIFI-OFICINA con un límite de 30M/60M (subida/bajada)
  • Todas las colas de clientes se crean como hijas de esta cola padre
  • Las colas hijas pueden tener su propio límite, pero nunca superarán el total de la padre

Esto significa que si tienes 10 clientes activos, todos comparten los 30M/60M. Si uno se pone a descargar pesado, no se lleva más de lo que permite su cola hija, y el resto del ancho se distribuye entre los demás. La oficina y los demás clientes quedan protegidos.


El script completo

Primero creamos la cola padre (solo una vez, manualmente):

/queue simple add name="WIFI-OFICINA" max-limit=30M/60M

Luego, el script que se ejecuta desde el DHCP Server crea las colas hijas dentro de esa padre:

:local queueName "Cliente-$leaseActMAC"
:if ($leaseBound = "1") do={
  /queue simple add name=$queueName \
    target=($leaseActIP . "/32") \
    max-limit=10M/10M \
    parent="WIFI-OFICINA" \
    comment=[/ip dhcp-server lease get [find where \
      active-mac-address=$leaseActMAC && \
      active-address=$leaseActIP] host-name]
} else={
  /queue simple remove $queueName
}

La línea clave es parent="WIFI-OFICINA". Eso hace que la cola del cliente sea hija de la cola padre.


Cómo funciona

RouterOS expone variables especiales cuando ejecuta un script desde el DHCP Server:

  • $leaseActMAC — la dirección MAC del cliente
  • $leaseActIP — la IP asignada
  • $leaseBound — "1" si la concesión está activa, "0" si se liberó

Cuando un cliente se conecta ($leaseBound = "1"):

  • Se crea una cola hija dentro de WIFI-OFICINA
  • Nombre: basado en la MAC del cliente
  • Target: la IP del cliente en formato /32
  • Límite: 10M/10M (ajústalo según tu plan)
  • Comentario: el hostname del cliente (se extrae automáticamente del lease)

Cuando el cliente se desconecta ($leaseBound != "1"), la cola se elimina automáticamente. Sin colas huérfanas.


Configuración paso a paso

  1. Ajusta las velocidades en el script según tu plan: cambia max-limit=10M/10M por lo que necesites.

Asigna el script al DHCP Server:

/ip dhcp-server set [find] lease-script=dhcp-queue-script

Crea el script en RouterOS:

/system script add name=dhcp-queue-script source="... (el script de arriba) ..."

Crea la cola padre (solo una vez):

/queue simple add name="WIFI-OFICINA" max-limit=30M/60M

Personalización: colas por plan de cliente

Si tienes diferentes velocidades según el plan, puedes hacer que el script asigne la velocidad según el rango de IP:

:local queueName "Cliente-$leaseActMAC"
:if ($leaseBound = "1") do={
  :local speed "5M/5M"
  :if ([:pick $leaseActIP 0 3] = "10.") do={ :set speed "10M/10M" }
  :if ([:pick $leaseActIP 0 3] = "172") do={ :set speed "20M/20M" }
  /queue simple add name=$queueName \
    target=($leaseActIP . "/32") \
    max-limit=$speed \
    parent="WIFI-OFICINA" \
    comment=[/ip dhcp-server lease get [find where \
      active-mac-address=$leaseActMAC && \
      active-address=$leaseActIP] host-name]
} else={
  /queue simple remove $queueName
}

Ventajas y consideraciones

Ventajas

  • Control total del ancho de banda — la cola padre WIFI-OFICINA limita el agregado a 30M/60M
  • Clientes protegidos entre sí — nadie se come el ancho de banda de los demás
  • Sin colas huérfanas — cuando un cliente se desconecta, su cola desaparece
  • Cero mantenimiento manual — las colas se crean y eliminan solas

Consideraciones

  • Si tienes más de 500 clientes, considera usar Queue Tree o colas por interface
  • Para control por plan, evalúa usar PCQ en lugar de colas simples
  • Este método es ideal para redes residenciales y WISPs pequeños
  • Ajusta el límite de la cola padre según tu capacidad real de subida/bajada

¿Tú cómo manejas el control de ancho de banda en tu red MikroTik? ¿Colas simples con padre, queue tree, o PCQ? Cuéntanos en los comentarios.