Script Mikrotik para LIMITAR dispositivos móviles con DHCP con QUEUEs Dinamicas

Bloquear / Limitar

En las 3 versiones anteriores de este script podiamos «bloquear» un dispositivo movil tanto por DHCP como en el firewall del Bridge (capa 2) y en firewall capa 3.

Tal vez te interesen los scripts anteriores:
Version 1: Filtrar en Bridge Filter
Version 2: Filtrar en Firewall Filter
Version 3: Filtrar con DHCP Block

Ahora con una mínima modificación podemos controlarles el ancho de banda a cada uno de ellos. En este caso el script permite setear el RATE-LIMIT en una variable para todos los dispositivos.

########## INICIO DEL SCRIPT
:local DHCPSERVER "dhcp1";
:local LIMITE "256k";
# # www.tech-nico.com 
 
:foreach i in=[/ip dhcp-server lease find active-server=$DHCPSERVER] do={
log warning "Hola";
    :local DhcpDynMAC [/ip dhcp-server lease get $i mac-address];
                :local DhcpDynCLIENTID [/ip dhcp-server lease get $i active-client-id];
    :local DhcpDynHOST [/ip dhcp-server lease get $i host-name];
    :local phoneNAME [:pick $DhcpDynHOST 0 4];
 
    :if ( ($phoneNAME="BLUS") || ($phoneNAME="iPad") || ($phoneNAME="andr") || ($phoneNAME="Andr") || ($phoneNAME="Wind") || ($phoneNAME="iPho") || ($phoneNAME="BLAC") ) do={
        /ip dhcp-server lease set $i block-access=no  rate-limit="$LIMITE" insert-queue-before=first  mac-address="$DhcpDynMAC" use-src-mac=yes comment="$DhcpDynHOST" server="$DHCPSERVER" client-id="$DhcpDynCLIENTID";
    }
}
############## FIN DEL SCRIPT

La forma de limitar del script (sincronizando con queues) es como lo hacen algunos servidores radius.

El script recorre la lista de Leases DHCP y busca los dispositivos que comienzan con Host_name «iPad», «andr», etc. Luego lo edita, agregandole el limite de velocidad. Esto instantaneamente agrega un Queue dinamico en la lista de queues, controlando asi en el acto a cada Lease. Si el lease caduca, el queue se elimina solo, y si el lease por alguna razon renueva con otra direccion IP, tambien lo hace el queue de manera sincronizada. Es tal y como lo manejan los Servidores Radius.

Espero que lo disfruten de estas utilidades tan sencillas pero al mismo tiempo tan brillantes.

A pedido de Leonardo Jung. (excelente idea).

Saludos.

12 Comentarios

  1. No me lo ha hecho nunca, quizas la IP que quiere asignar en la queue ya la tenes creada como queue estatica. O bien esta queriendo asignar 2 veces una misma direccion. Es raro. Proba actualizar el routerOS a la ultima version.

  2. azzarito, yo lo tengo andando en 2 routerboard con la 6.18. Te deberia andar perfectamente bien en la 6.3. Seguro estas haciendo algo mal. Volve a seguir los pasos y si no, a debuggear hermano!.

  3. Hola el scripts funciona cuando yo manualmente le paso a modo estático, luego corro el scripts funciona. pero en modo dinamico no funciona! no creis que primero seria pasar de modo dinamic a modo static?

    ideas?

    Saludos

  4. Guzman, claro, el script se encarga de leer dinamicos y al filtralo, agregar el flag «Blocked» como entrada estatica. Es decir, que no deberias hacer nada.

  5. Hola @Benjamin, No doy soporte tecnico para los scripts del blog. Es imposible que pueda probar los scripts en cada version de RouterOS. Lo que yo hararia es debuggear (imprimir variables en LOG) porque a veces cambian las sintaxis de los comandos. Tambien revisar si tu script tiene los permisos correctos. Saludos.

  6. Buenas, yo lo adapte a mi mk y quedo andando
    # Variables
    :local DHCPSERVER «dhcp1»;
    :local LIMITE «1M/512k»;

    :foreach i in=[/ip dhcp-server lease find active-server=$DHCPSERVER] do={
    log warning «Se asigna ancho de banda dinamico a los clientes del dhcp»;
    :local DhcpDynMAC [/ip dhcp-server lease get $i mac-address];
    :local DhcpDynCLIENTID [/ip dhcp-server lease get $i active-client-id];
    :local DhcpDynHOST [/ip dhcp-server lease get $i host-name];

    /ip dhcp-server lease set $i block-access=no rate-limit=»$LIMITE» insert-queue-before=first mac-address=»$DhcpDynMAC» use-src-mac=yes server=»$DHCPSERVER» client-id=»$DhcpDynCLIENTID»;
    }
    # Otros parametros que se pudieran establecer
    # comment=»$DhcpDynHOST»
    # address-lists=»Nombre la lista»
    # rate-limit=»$LIMITE» Unidades aceptadas M – k

  7. Hola, estoy realizando pruebas con este script en un RB951G-2HnD 6.46.1 solo con la configuración mínima de firewall y no he logrado que funcione.

    Aparte de ello, como podría hacer para que ademas de limitar el ancho de banda de los celulares, restringir el acceso a facebook / youtube durante cierto horario (horario de restricción 8 a 12 y de 13 a 18)
    (nota: dentro de las variables de $phoneNAME no esta para los HUAWUEI (ya lo agregue para mis pruebas)

Deja un comentario