Scripting Mikrotik
Scripting Mikrotik
Scripting Mikrotik
Scripting en RouterOS
Scripting en RouterOS
MUM Madrid 2016
Flix Calvo
felix@nunsys.com
RouterOS desde versin 3.20
MTCNA
MTCRE
MTCWE
MTCTCE
ndice
1. Qu esperamos de RouterOS?
2. Scripting, el siguiente nivel.
3. Scripting en RouterOS
4. Ejemplos prcticos de aplicacin
5. Ruegos y preguntas
1. Qu esperamos de RouterOS?
Qu esperamos de RouterOS?
Podemos hacerlo todo con Winbox?
Qu esperamos de RouterOS?
Casi todo, sin duda.
Pero qu hacer cuando no llegamos con Winbox?
Necesito ejecutar una accin si ocurre
Necesito que me avise enviando un correo si
Necesito desactivar una reglas si el trfico supera
3. Scripting en RouterOS
Scripting
10
Scripting
Un script, se puede desarrollar y ejecutar desde la consola.
11
12
Scripting
o Aprovechemos las ayudas dentro de cada nivel
Scripting
13
Scripting
o Aprovechemos las ayudas dentro de cada nivel
Y nos indicara de forma visual, si existe algn error de composicin.
14
Scripting
Algunos comandos importantes
15
Scripting
Algunos comandos importantes
put
o Muestra en consola el valor especificado
log
o Escribe sobre el registro de eventos del sistema
16
Scripting
Algunos comandos importantes
get
o Obtiene el valor especificado
set
o Modifica el valor seleccionado
find
o Busca dentro de la cadena definida
17
Scripting
Algunos comandos importantes
len
o Especifica la cantidad de caracteres de una cadena
pick
o Obtiene el/los caracteres seleccionados
resolve
o Resuelve la IP de un dominio
18
Scripting
Algunos comandos importantes
Print
o Podemos imprimir los datos y cantidades de una lista.
19
Scripting
Algunos comandos importantes
Print
o Hay otros comandos que consiguen un efecto similar y nos
permiten exportar informacin a un archivo .txt
20
Scripting
Los datos
21
Scripting
Podemos definir tipos de datos/variables.
Numricas
Alfanumricas
Lgicas
Cadenas
22
Scripting
o Variables
IPV4 y 6
Identificadores
Fecha y hora
23
Scripting
El Entorno.
24
Scripting
o mbitos de aplicacin (Scopes)
Local y Global.
Local, se restringe al entorno en el que se desarrolla dentro del
Script, fuera de el, no existe.
25
Scripting
o mbitos (Scopes)
Global, se almacena dentro del apartado enviroment en la
memoria voltil del mkt y puede ser modificado y usado por
otros scripts.
26
Scripting
Operaciones
27
Scripting
o Operaciones
Aritmticas
Relacionales
Lgicas
Sobre IPv4 y 6
Concatenaciones
28
Scripting
Bucles.
29
Scripting
o Bucles
(while) Ejecuta accin hasta cumplir condicin.
30
Scripting
31
Bucles
(foreach) Ejecuta accin en todos los elementos que encuentra
en una lista.
Scripting
Condiciones.
32
Scripting
o Condiciones
(if) Ejecuta accin si se cumple la condicin o condiciones
definidas.
33
Scripting
o Condiciones
(else) A continuacin de la condicin afirmativa, podemos
definir tambin, la negativa.
34
Scripting
35
Scripting
Se agrupan en un apartado especifico, dentro del nivel de sistema,
en el que encontramos 3 pestaas.
36
Scripting
Scripts.
Es la raz donde se agrupan.
Jobs.
Podemos ver los que se estn ejecutando
37
Scripting
Y Enviroment.
Podemos ver las variables denominadas.
38
Scripting
Cmo se ejecutan?
39
Scripting
Pueden ser llamados (ejecutados), desde distintos apartados de
RouterOS
VRRP, DHCP, HOTSPOT, Netwatch, Trafic Monitor
40
Scripting
41
Scheduler
Podemos automatizar, definiendo:
Da y hora de ejecucin.
En cada reinicio.
Intervalos, horas, minutos y segundos.
Polticas.
Tiene un contador de ejecuciones.
Un aviso de prxima ejecucin y estado.
Podemos aadir comentarios.
Scripting
Recomendaciones y buenas practicas.
42
Scripting
o Recomendaciones y buenas practicas.
Introducir comentarios.
Utilizaremos # para introducir comentarios de seguimiento.
43
Scripting
o Recomendaciones y buenas practicas.
No introducir cdigo fuera de un script.
No se puede probar/ejecutar desde consola.
44
Scripting
o Recomendaciones y buenas practicas.
Mantener la lnea de lectura.
45
Scripting
o Recomendaciones y buenas practicas.
Introducir puntos de control visibles.
46
Scripting
o Recomendaciones y buenas practicas.
Paso a paso, un descanso no esta de mas.
47
Scripting
Very slowly
48
Scripting
49
o Very slowly
Veamos paso a paso la ejecucin de un Script.
Escenario:
Tenemos 2 WANs y realizamos balanceo y control de trfico.
Nuestro ISP, nos asigna las IPs por DHCP y cambia la IP publica y
la puerta de enlace, de forma aleatoria.
Problema:
Al cambiar las GWs, perdemos la conexin y dejan de funcionar
las marcas de enrutado.
Solucin:
Un Script que revise el DHCP-CLIENT y modifique las GWs si
detecta cambios.
Scripting
o Very slowly
Definimos variables del GW actual del DHCP-CLIENT.
global GW1aCt [ip dhcp-client get number=1 gateway ]
delay (10ms);
global GW2aCt [ip dhcp-client get number=0 gateway ]
50
Scripting
51
o Very slowly
Definimos variables del GW que hay en la tabla de enrutado.
global GW1aNt [/ip route get [find comment="Enruta Wan1"] gateway]
delay (10ms);
global GW2aNt [/ip route get [find comment="Enruta Wan2"] gateway]
Scripting
52
o Very slowly
Comparamos GW1 actual con GW1 de tabla de enrutamiento.
Si no coinciden, cambia las rutas y apunta resultado en log.
Si coinciden, aplica el contrario (else) y no hagas nada.
if ($GW1aCt != $GW1aNt) do={\
/ip route set [find static=yes gateway=$GW1aNt] gateway=$GW1aCt;
log error message="Cambio rutas de salida WAN1 IP anterior= $GW1aNt \
IP actual= $GW1aCt";
} else={\
put "GW1 coinciden, no hago nada"}
En este caso GW1aCt y GW1aNt, coinciden, por lo que no hace nada.
Scripting
o Very slowly
Comparamos GW2 actual con GW2 de tabla de enrutamiento.
Si no coinciden, cambia las rutas y apunta resultado en log.
Si coinciden, aplica el contrario (else) y no hagas nada.
if ($GW2aCt != $GW2aNt) do={\
/ip route set [find static=yes gateway=$GW2aNt] gateway=$GW2aCt;
log error message="Cambio rutas de salida WAN2 IP anterior= $GW2aNt \
IP actual= $GW2aCt";
} else={\
put "GW2 coinciden, no hago nada"}
53
54
Casos prcticos.
55
56
Casos prcticos.
INTERNET
ADSL 2
X
ADSL 1
Casos prcticos.
Programar un da en concreto para realizar una accin
Necesitamos reiniciar contadores el da 15 de cada mes.
Este Script modifica el Scheduler, rectificando el da en el que debe
volver a producirse el evento.
Observar que no existe intervalo de repeticin, es el Script el que
modifica la fecha segn los parmetros configurados.
57
Casos prcticos.
Monitorizar un interfaz WAN
Tenemos problemas con nuestra VoIP y necesitamos saber si existen
microcortes, por lo que necesitamos monitorizar nuestra WAN.
Una forma seria lanzando un ping continuo y esperar a ver si se
pierde alguna traza ICMP.
Este script, lanza un ping contra una IP (un DNS o servidor de VoIP
por ejemplo) y si pierde mas paquetes que el limite definido, nos
enva un correo con los resultados, en caso contrario, no hace nada.
58
Casos prcticos.
Modificar colas simples
Imaginemos este escenario:
1.579 colas simples
3 Perfiles 10Mb, 4Mb y 2Mb
Queremos cambiar la velocidad de los que tienen 2Mb, pero
tenemos nada menos que 1.544 colas
59
Casos prcticos.
Modificar colas simples
Cambiar las colas una a una, seria una tarea imposible, pero en un
script, con una simple lnea, lo tendramos resuelto:
/queue simple set max-limit=9500k/9500k burst-limit=9900k/9900k burstthreshold=9200k/9200k burst-time=200/300 [find max-limit="2M/2M"]
Si queremos restaurar la velocidad anterior, la operacin seria
inversa:
60
Casos prcticos.
Comprobar tneles VPN
Tenemos una VPN, en el que el tnel no cursa trfico, pero pese a
ello, aparece el flag R de Runing, por lo que no se restaura la
conexin.
Este script, comprueba si existe conectividad realizando un ping al
otro extremo del tnel y lo restaura si hay 100% de perdida
61
Casos prcticos.
62
Casos prcticos.
Filtro de dominios por L7 con actualizacin centralizada.
63
Casos prcticos.
Cambio de frecuencia por bajo SNR.
Tenemos valores bajos de SNR en nuestros clientes.
Con este script, se calcula la media de SNR de los clientes
conectados.
Si valor por debajo del umbral, cambia la frecuencia.
Pasados 5 minutos vuelve a calcular el SNR.
Si mejora, se mantiene, sino, vuelve a cambiar de frecuencia.
Marcamos un SNR mnimo de 30dB
64
65
5. Preguntas
66