TP 5 : MikroTik CHR (v7) – Introduction à l'API RESTful
Module : 2 – Fondamentaux des API REST et de l’embarqué
Durée indicative : 2h
Prérequis : partie théorique du Module 2, Python 3, pip install requests python-dotenv, une VM MikroTik CHR (v7) accessible
Objectifs
- Découvrir l’API RESTful native de RouterOS v7.
- Réaliser les opérations CRUD (adressage IP, interfaces, routage statique) en Python.
- Sécuriser les identifiants avec un fichier
.env.
Contexte
Vous automatisez la configuration réseau d’un routeur MikroTik CHR à partir d’un script Python, en remplacement de la configuration manuelle via WinBox ou la CLI.
Étape 1 – Préparation
- Démarrez la VM MikroTik CHR et activez l’API REST (
/ip service enable www-sslouwwwselon le TLS disponible). - Créez un utilisateur API dédié :
/user add name=api-user password=... group=full. - Créez un fichier
.env:
DEVICE_HOST=192.168.88.1
DEVICE_USER=api-user
DEVICE_PASSWORD=motdepasse- Ajoutez
.envau.gitignoredu dépôt (lien avec le Module 1).
Étape 2 – Lecture (GET)
import os
import requests
from dotenv import load_dotenv
load_dotenv()
BASE_URL = f"https://{os.getenv('DEVICE_HOST')}/rest"
AUTH = (os.getenv('DEVICE_USER'), os.getenv('DEVICE_PASSWORD'))
resp = requests.get(f"{BASE_URL}/ip/address", auth=AUTH, verify=False, timeout=5)
resp.raise_for_status()
print(resp.json())Étape 3 – Création (POST)
Ajoutez une adresse IP sur ether2 :
payload = {"address": "192.168.20.1/24", "interface": "ether2"}
resp = requests.post(f"{BASE_URL}/ip/address", json=payload, auth=AUTH, verify=False, timeout=5)
resp.raise_for_status()
print(resp.json())Étape 4 – Modification (PATCH) et suppression (DELETE)
- Récupérez le
.idde l’adresse créée via unGETfiltré. - Modifiez son commentaire avec
PATCHsur/ip/address/<.id>. - Supprimez-la avec
DELETEsur la même URL.
Étape 5 – Routage statique
Écrivez un script configure_router.py qui, à partir d’une liste Python de routes (destination, gateway), crée toutes les routes statiques manquantes via POST /ip/route, en vérifiant d’abord par GET qu’elles n’existent pas déjà (idempotence).
Le pattern “vérifier avant de créer” : relancer le script ne doit jamais produire de doublon.
Rendu attendu
- Script(s) Python versionnés dans un dépôt Git (
.envexclu). - Un
README.mdexpliquant comment lancer les scripts. - Une capture de
/ip/address printsur le routeur confirmant les changements.
Points de vérification
- Aucun identifiant en dur dans le code (uniquement via
.env). - Les 4 opérations CRUD ont été réalisées avec succès.
- Le script de routage ne crée pas de doublon si relancé (idempotence).