- ¿Qué es un script?
Un script es una serie de comandos o instrucciones que son ejecutadas por el sistema operativo o por una aplicación.
- ¿Para qué sirven los scripts?
Los scripts en MikroTik se usan principalmente para realizar tareas tediosas. Es posible configurarlos para que se ejecuten a una hora determinada o bien si ciertas condiciones se cumplen. Suele ser muy común su uso para hacer mantenimientos.
- Usos de los scripts.
Los scripts en MikroTik pueden usarse para hacer copias de seguridad a una hora determinada, cambiar configuraciones, detectar incidencias, bloquear direcciones IP y un largo etcétera.
- Cómo se implementan los scripts.
Para utilizar los scripts en MikroTik debemos loguearnos al equipo a través de Winbox o SSH. Si lo hacemos por Winbox, debemos hacer clic donde marca la captura de abajo:
Una vez entramos, nos aparece una ventana como esta:
Al añadir un script (botón azul con forma de cruz) podemos crear un script nuevo. En esta nueva ventana (captura abajo), debemos rellenar los siguientes parámetros:
Color rojo: Nombre con el que identificaremos al script.
Color verde: El script en sí mismo (código).
El recuadro de color azul muestra el propietario del script, que pertenece al usuario creador. Por otro lado, el recuadro amarillo informa de la fecha de la última ejecución del script y el número de veces que se ha ejecuado.
- Tipos de variables
Globales: Accesibles por cualquier script creado por el usuario (únicamente el usuario que las crea).
Locales: Accesibles únicamente por el script que las contenga.
- Tipos de operadores
Tenemos los siguientes operadores para poder usar en nuestros scripts más abajo:
Aritméticos:
- Suma: +. Ejemplo: put (3+4)
- Resta: -. Ejemplo: put(4-2)
- Multiplicación: *. Ejemplo: put(2*3)
- División: /. Ejemplo: put(10/2)
- Operación: %. Ejemplo put(10%3)
- Negación unaria: -. Ejemplo: { :local a 1; :put (-a); }
Relacionales:
- Menor que: <. Ejemplo: put(3<4)
- Mayor que: >. Ejemplo: put(4>3)
- Igual: =. Ejemplo: put(3=3)
- Menor o igual: <=
- Mayor o igual: >=
- No es igual: !=
Lógicos:
!: No lógico
&& y and: Y lógico
|| y or: O lógico
in: Ejemplo: :put (1.1.1.1/32 in 1.0.0.0/8);
Bit a bit (bitwise):
“~”: Inversión de bit
“|”: Ejecuta un OR en cada par correspondientes de bits. En cada par el resultado es 1 si uno de los bits o los dos son 1. En caso contrario devuelve 0.
“^”: XOR. Igual a OR, pero el resultado en cada posición es 1 si los dos bits no son iguales y 0 si los bits son iguales.
“&”: AND. En cada par el resultado es 1 si el primer y el segundo bit es 1. De lo contrario, el resultado es 0.
“<<”: Desplazamiento a la izquierda de bits. No es compatible con ipv6.
“>>”: Desplazamiento a la derecha de bits. No es compatible con ipv6.
- Variables reservadas
Los scripts en MikroTik al igual que otros lenguajes de programación tiene variables (nombres) que están reservadas. Los nombres de estas variables son:
/: Te lleva al menú raíz.
.. :Vuelve un nivel para atrás.
? : Lista de todas las variables del menú de comandos con descripciones breves.
global: Define una variable global.
local: Define una variable local.
beep: Hace que el altavoz interno suene.
delay: Hace una pausa por un periodo de tiempo determinado.
put: Pone el argumento en la consola.
len: Devuelve el tamaño de la cadena o el número de elementos de un array.
typeof: Devuelve el tipo de variable.
pick: Devuelve un rango de elementos o subcadenas. Si la posición final no se especifica, devolverá solo un elemento del array.
Log: Escribe el mensaje especificado en el log del sistema. Hay varios tipos: debug, error, info y warning.
Time: Devuelve el intervalo de tiempo que tardó en ejecutar un comando.
Set: Asigna un valor a una variable declarada.
Find: Devuelve la posición de un elemento del array.
Environment: Devuelve la información de las variables.
Terminal: Comandos relacionados con el terminal.
Error: Genera un error en la consola y para la ejecución del script.
Execute: Ejecuta el script en segundo plano. El resultado se puede almacenar en un archivo usando el parámetro file.
Parse: Revisa (parsea) una cadena de texto y devuelve los comandos de consola. Puede ser usado como una función.
Resolve: Devuelve la dirección IP de un hostname.
Toarray: Convierte una variable en un array.
Tobool: Convierte un valor en 0 o 1 (verdadero o falso).
Toid: Convierte un valor en un ID interno.
Toip: Convierte una variable en una dirección IP.
Toip6: Convierte una variable en una dirección IP Ipv6.
Tonum: Convierte una variable en un número entero.
Tostr: Convierte una variable en una cadena de texto.
Totime: Convierte una variable en tiempo.
Es posible ver información más detallada sobre comandos, variables, etc.; en la página web de la Wiki de MikroTik.
- Ejemplos de scripts.
- Revisar si una dirección IP ha cambiado:
:global currentIP;
:local newIP [/ip address get [find interface=”ether1″] address];
:if ($newIP != $currentIP) do={
:put “ip address $currentIP changed to $newIP”;
:set currentIP $newIP;
}
- Revisa ancho de banda y añade limitaciones:
:foreach i in=[/interface find] do={
/interface monitor-traffic $i once do={
:if ($”received-bits-per-second” > 0 ) do={
:local tmpIP [/ip address get [/ip address find interface=$i] address];
# :log warning $tmpIP;
:for j from=( [:len $tmpIP] – 1) to=0 do={
:if ( [:pick $tmpIP $j] = “/”) do={
/queue simple add name=$i max-limit=256000/256000 dst-address=[:pick $tmpIP 0 $j] ;
}
}
}
}
También es posible programar estos scripts para que se ejecuten en una fecha/hora determinada. Para hacer esto, debemos ir al menú system y hacer clic sobre scheduler:
Nos aparecerá ahora una ventana con este aspecto:
Para añadir una tarea programada, debemos hacer clic en el botón “+” de color azul. Una vez hacemos clic, nos lleva a otra ventana nueva donde podemos poner los parámetros de la nueva tarea que vamos a crear:
Pongamos como ejemplo, que vamos a necesitar que se ejecute un script que hará copias de seguridad y que previamente ya hemos incluído en “System->Scripts”.
Name: Nombre de la tarea programada.
Start Date: Fecha en la que la tarea empezó a ejecutarse.
Start Time: Hora a la que se ejecutará el script.
Interval: Intervalo de tiempo en el que se ejecutará el script. En este caso de la imagen es cada día (a las cinco y media de la madrugada).
Owner: Propietario de la tarea programada.
Policy: Política de permisos que tiene la tarea programada. Por ejemplo, si marcamos la casilla “sniff”, la tarea programada y por ende el script tendrá permisos para esnifar tráfico.Con “write”, tendrá permisos de escritura en el equipo, etc.
Run count: Las veces que se ha ejecutado la tarea programada desde su creación.
Next Run: La próxima vez que se ejecutará la tarea programada.
On Event: Aquí llamamos al script previamente creado. En este caso, backup2ftp. Podemos sacar el nombre que se debe usar de la lista de scripts que tengamos creados:
- Revisar si una dirección IP ha cambiado:
De esta forma, podrás realizar algunas de las configuraciones que ofrece Mikrotik de forma programada. En Bandalibre nos encargamos de llevar a cabo dichas tareas con comandos y variables más complejas para conseguir sacarle el máximo provecho a los routers Mikrotik.