Exemples de Scripts
Exemple 1 - Introduction - Retrouver l'IP de www.google.be
Introduction :
Les scripts (microprogrammes) font partie du contexte system scripts (Menu System/Script de Winbox). Ils vous permettent de programmer le routeur pour qu’il exécute les tâches spécifiques dont vous avez besoin.
Un script est identifié par son nom et est composé d’une série d’instructions exécutées lignes après lignes.
Le script peut être exécuté à intervalles réguliers ou en fonction d’évènements. L’exécution à intervalles réguliers est programmée via le menu System/Scheduler de Winbox.
Les lignes du script ou le script en entier peuvent aussi être exécuté de façon interactive dans une fenêtre terminal (Menu New Terminal dans Winbox pour ouvrir une session Terminal).
Syntaxe des scripts :
Un commentaire est une ligne qui commence par un dièse :
# Ceci est un commentaire
La structure générale d’une ligne de commande est la suivante :
[préfixe] [contexte] commande [paramètre= [valeur]] .. [paramètre= [valeur]] ;
Le [préfixe] est utilisé pour indiquer si la ligne est soit une action (:) soit une ligne de commande de RouterOS faisant appel à un contexte du routeur (/).
Une ligne de commande se termine par un ; ou un passage à la ligne.
Exemples de lignes de scripts :
# Emettre un son de 1000 Hz pendant 100 ms
: beep frequency=1000 length=100ms ;
# Ajout de l’adresse 192.168.1.10 dans une liste d’adresses du contexte ip firewall address-list
/ ip firewall address-list add address=192.168.1.10 list=Ordinateurs ;
Exemple d’un script très simple (GoogleIP) :
# Début du script
# Retrouver l’IP de Google et l’affecter à la variable locale ResolvedIP
:local ResolvedIP [:resolve "www.google.be"];
# afficher le résultat dans les log
:log info ("IPdeGoogle=".$ResolvedIP)
# Fin du script
Explications:
:local ResolvedIP [:resolve "www.google.be"];
La présence des crochets dans la partie [:resolve "www.google.be"] indique qu’il s’agit d’une commande imbriquée dans une autre commande. On affecte à la variable locale le résultat de la commande resolve.
:log info ("IPdeGoogle=".$ResolvedIP)
On indique dans les log le texte "IPdeGoogle=" concaténé (.) avec la valeur de la variable ResolvedIP ($ResolvedIP)
# Vérifier que l'interface ether1 est "running" et stocker le résultat yes/no dans une variable
:local Eth1Run;
:set Eth1Run [/interface get ether1 value-name=running];
Explications :
set Eth1Run (affecter à la variable Eth1Run) [/interface get ether1 value-name=running] (trouver si la variable running de l'interface est sur yes ou no et renvoyer la valeur).
Vous pouvez aussi tester l'état de la connectivité d'une interface ethernet :
:local Ether1Status
/interface ethernet monitor ether1 once do={:set Ether1Status $status};
Cette commande renvoie le status (link-ok/no-link/unknown) de l'interface ether1 dans la variable Ether1Status
Les scripts (microprogrammes) font partie du contexte system scripts (Menu System/Script de Winbox). Ils vous permettent de programmer le routeur pour qu’il exécute les tâches spécifiques dont vous avez besoin.
Un script est identifié par son nom et est composé d’une série d’instructions exécutées lignes après lignes.
Le script peut être exécuté à intervalles réguliers ou en fonction d’évènements. L’exécution à intervalles réguliers est programmée via le menu System/Scheduler de Winbox.
Les lignes du script ou le script en entier peuvent aussi être exécuté de façon interactive dans une fenêtre terminal (Menu New Terminal dans Winbox pour ouvrir une session Terminal).
Syntaxe des scripts :
Un commentaire est une ligne qui commence par un dièse :
# Ceci est un commentaire
La structure générale d’une ligne de commande est la suivante :
[préfixe] [contexte] commande [paramètre= [valeur]] .. [paramètre= [valeur]] ;
Le [préfixe] est utilisé pour indiquer si la ligne est soit une action (:) soit une ligne de commande de RouterOS faisant appel à un contexte du routeur (/).
Une ligne de commande se termine par un ; ou un passage à la ligne.
Exemples de lignes de scripts :
# Emettre un son de 1000 Hz pendant 100 ms
: beep frequency=1000 length=100ms ;
# Ajout de l’adresse 192.168.1.10 dans une liste d’adresses du contexte ip firewall address-list
/ ip firewall address-list add address=192.168.1.10 list=Ordinateurs ;
Exemple d’un script très simple (GoogleIP) :
# Début du script
# Retrouver l’IP de Google et l’affecter à la variable locale ResolvedIP
:local ResolvedIP [:resolve "www.google.be"];
# afficher le résultat dans les log
:log info ("IPdeGoogle=".$ResolvedIP)
# Fin du script
Explications:
:local ResolvedIP [:resolve "www.google.be"];
La présence des crochets dans la partie [:resolve "www.google.be"] indique qu’il s’agit d’une commande imbriquée dans une autre commande. On affecte à la variable locale le résultat de la commande resolve.
:log info ("IPdeGoogle=".$ResolvedIP)
On indique dans les log le texte "IPdeGoogle=" concaténé (.) avec la valeur de la variable ResolvedIP ($ResolvedIP)
# Vérifier que l'interface ether1 est "running" et stocker le résultat yes/no dans une variable
:local Eth1Run;
:set Eth1Run [/interface get ether1 value-name=running];
Explications :
set Eth1Run (affecter à la variable Eth1Run) [/interface get ether1 value-name=running] (trouver si la variable running de l'interface est sur yes ou no et renvoyer la valeur).
Vous pouvez aussi tester l'état de la connectivité d'une interface ethernet :
:local Ether1Status
/interface ethernet monitor ether1 once do={:set Ether1Status $status};
Cette commande renvoie le status (link-ok/no-link/unknown) de l'interface ether1 dans la variable Ether1Status
Exemple 2 - Connexion distante sans tunnel VPN
Exemple d'une alternative à l'utilisation d'un tunnel VPN pour l'accès à un service distant. Le script décrit ci-après mets à jour l'adresse IP du client dans une address-list donnant accès a un serveur de l'entreprise. Ce script doit être exécuté régulièrement via une tâche programmée. Attention les échanges ne sont pas cryptés et les mots de passe sont donc transmis en clair.
La règle de Firewall et la programmation de la tâche ne sont pas décrites ici.
La règle de Firewall et la programmation de la tâche ne sont pas décrites ici.
# ------------------ HEADER ---------------------
#Update IP in address-lists function of DNS resolution
#
#Script by Philippe Vernin from NSE sprl, Belgium
# philippe.vernin@nseonline.com
#
# Version 1.1 - Tested - april2018
#
# ------------------ HEADER ---------------------
# ------------------ SCRIPT ---------------------
#Variables
:local AddressListIP
:local DynDNSIP
:local ListName "MyDynIP"
#Find Dyn IP and store result in DynDNSIP local variable
:set DynDNSIP [:resolve "client.dyndns-at-home.com"];
#Find actual IP in address-lists specified by ListName
:set AddressListIP [/ip firewall address-list get [/ip firewall address-list find list=$ListName] address]
#Update IP if different
:if ($DynDNSIP != $AddressListIP) do={
#Change IP in address-lists;
/ip firewall address-list set [/ip firewall address-list find list=$ListName] address=$DynDNSIP;
#Show in log info
:log info ("DynIP Client changed from ".$AddressListIP." to ".$DynDNSIP);
}
# ------------------ SCRIPT ---------------------
#Update IP in address-lists function of DNS resolution
#
#Script by Philippe Vernin from NSE sprl, Belgium
# philippe.vernin@nseonline.com
#
# Version 1.1 - Tested - april2018
#
# ------------------ HEADER ---------------------
# ------------------ SCRIPT ---------------------
#Variables
:local AddressListIP
:local DynDNSIP
:local ListName "MyDynIP"
#Find Dyn IP and store result in DynDNSIP local variable
:set DynDNSIP [:resolve "client.dyndns-at-home.com"];
#Find actual IP in address-lists specified by ListName
:set AddressListIP [/ip firewall address-list get [/ip firewall address-list find list=$ListName] address]
#Update IP if different
:if ($DynDNSIP != $AddressListIP) do={
#Change IP in address-lists;
/ip firewall address-list set [/ip firewall address-list find list=$ListName] address=$DynDNSIP;
#Show in log info
:log info ("DynIP Client changed from ".$AddressListIP." to ".$DynDNSIP);
}
# ------------------ SCRIPT ---------------------