📌 Fiche Résumé – SNMP, NETCONF et RESTCONF
🔹 1. SNMP (Simple Network Management Protocol)
- Protocole historique des ingénieurs réseau.
- Fonctionne en push & pull :
- Polling (interrogation des équipements)
- Traps (alertes)
- Très répandu dans les infrastructures IT.
- ❌ Peu adapté à la configuration des équipements.
🔹 2. NETCONF
- Créé en 2006 pour dépasser les limites de SNMP.
- Normalisé par l’IETF (RFC 6241 – 2011).
- Permet la gestion fiable des configurations.
- Basé sur des modèles YANG.
- Utilisé pour l’automatisation réseau.
🔹 3. RESTCONF
- Protocole dérivé de NETCONF.
- Basé sur REST et HTTP.
- Plus flexible pour les développeurs.
- Facile à intégrer dans les outils d’automatisation.
- Utilise aussi les modèles YANG.
🔹 4. YANG (Modèle de données)
- Langage de modélisation.
- Décrit la structure des données réseau.
- Standardise la lecture et la modification des configurations.
🔹 5. Objectifs du cours
Ce cours permet de :
✅ Comprendre NETCONF et RESTCONF
✅ Comparer leurs différences
✅ Utiliser la librairie Python ncclient
✅ Manipuler les équipements via API
✅ Réaliser des labs pratiques
📊 Comparaison rapide
| Protocole | Fonction | Transport | Configuration | Usage principal |
|---|---|---|---|---|
| SNMP | Supervision | UDP | ❌ Limité | Monitoring |
| NETCONF | Configuration | SSH | ✅ Oui | Automatisation |
| RESTCONF | API | HTTP | ✅ Oui | Développement |
📌 Fiche Résumé – NETCONF Overview
🔹 1. Objectif de NETCONF
- Protocole de gestion réseau nouvelle génération.
- Créé pour corriger les limites de SNMP.
- Orienté gestion transactionnelle.
- Sépare :
- 📄 Configuration data (modifiable)
- 📊 State data (lecture seule)
🔹 2. Types de données
✅ Configuration Data
- Données modifiables.
- Permettent de passer de l’état par défaut à l’état actuel.
- Ex : interfaces, routage, VLAN.
✅ State Data
- Données non modifiables.
- Informations d’état et statistiques.
- Ex : status interface, trafic, erreurs.
🔹 3. Datastores NETCONF
NETCONF stocke les configurations dans des bases appelées datastores :
| Datastore | Rôle |
|---|---|
| running | Config active |
| startup | Config au démarrage |
| candidate | Config en attente |
📌 Candidate Configuration
- Zone de test (staging).
- Modifs non appliquées.
- Application via
<commit>. - Tout est validé d’un coup (transaction).
🔹 4. Pile de protocoles NETCONF
NETCONF repose sur 4 couches :
1️⃣ Transport
- Principalement : SSH
- Connexion persistante
- Sécurisée (authentification, chiffrement)
➡️ Port par défaut : TCP 830
2️⃣ Messages
- Basés sur XML
- Types :
<rpc>(requête)<rpc-reply>(réponse)
- Identifiés par
message-id
3️⃣ Operations
Commandes NETCONF principales :
| Opération | Rôle |
|---|---|
<get> | État + config |
<get-config> | Config uniquement |
<edit-config> | Modifier config |
<copy-config> | Copier datastore |
<delete-config> | Supprimer datastore |
<lock> / <unlock> | Verrouiller |
<close-session> | Fermeture |
<kill-session> | Forcer arrêt |
4️⃣ Content
- Données XML basées sur modèles.
- Souvent dérivées de YANG.
- Transportées dans
<rpc>.
➡️ NETCONF transporte du XML conforme aux modèles.
🔹 5. Filtres NETCONF
Permettent de limiter les données reçues.
Exemple :
<filter type="subtree">
➡️ Récupère uniquement une partie ciblée (ex : interface eth0).
🔹 6. Fonctionnement d’une session NETCONF
Étapes classiques :
1️⃣ Connexion SSH sur port 830
2️⃣ Échange de <hello> (capacités)
3️⃣ Négociation client/serveur
4️⃣ Envoi <rpc>
5️⃣ Réponse <rpc-reply>
📌 Terminaison des messages
Tous les messages finissent par :
]]>]]>
➡️ Marque fin de transmission.
🔹 7. Capacités (Capabilities)
- Envoyées dans
<hello>. - Indiquent les fonctions supportées :
- Version NETCONF
- Validation
- Rollback
- Notifications
- YANG library…
➡️ Client et serveur négocient leurs possibilités.
🔹 8. Exemple de connexion
Connexion SSH :
ssh -p 830 user@device -s netconf
🔹 9. Avantages clés de NETCONF
✅ Transactions atomiques
✅ Séparation config / état
✅ Rollback possible
✅ Automatisation fiable
✅ Standardisé (IETF)
🔹 10. Question Examen Importante
❓ Port NETCONF par défaut ?
✅ TCP 830
🧠 Mémo Ultra-Rapide (Examen)
NETCONF = – SSH (830) – XML – RPC – YANG – Candidate → Commit – Running / Startup / Candidate – Transactionnel
📌 Fiche Résumé – Python ncclient & NETCONF
🔹 1. Qu’est-ce que ncclient ?
- Bibliothèque Python open-source pour NETCONF.
- Permet de communiquer avec des équipements réseau via NETCONF.
- Traduit le XML NETCONF en objets Python.
- Conforme à RFC 4741.
- Simplifie l’automatisation réseau.
👉 Objectif : éviter de manipuler trop de XML à la main.
🔹 2. Rôle principal de ncclient
Ncclient gère automatiquement :
✅ Connexion client/serveur
✅ Authentification
✅ Échange des capacités
✅ Gestion de session
✅ Envoi/Réception RPC
➡️ Le développeur se concentre sur la logique métier.
🔹 3. Installation
pip install ncclient
Dépôt officiel :
👉 https://github.com/ncclient/ncclient
🔹 4. Connexion à un équipement
Import des modules
from ncclient import manager
import lxml.etree as ET
Connexion
device = manager.connect(
host="csr1kv1",
port=830,
username="cisco",
password="cisco",
timeout=90,
hostkey_verify=False
)
Paramètres importants
| Paramètre | Rôle |
|---|---|
| host | Adresse équipement |
| port | Port SSH (830) |
| username/password | Identifiants |
| timeout | Délai |
| device_params | Type d’équipement |
🔹 5. Utilisation des filtres
Les filtres limitent les données retournées.
Exemple :
<filter>
<interfaces>...</interfaces>
</filter>
➡️ Équivalent à un filtre RESTCONF.
🔹 6. Lire la configuration (GET)
Récupérer état + config
reply = device.get(('subtree', get_filter))
Affichage
print(ET.tostring(reply.data_ele, pretty_print=True))
➡️ Équivalent CLI : show interface
🔹 7. Lire la config uniquement (GET-CONFIG)
Depuis le datastore running
response = device.get_config('running', filter)
➡️ Équivalent CLI : show run
🔹 8. Modifier la configuration (EDIT-CONFIG)
Création du XML config
<config>...</config>
Envoi
device.edit_config(
target='running',
config=edit_gig1_conf
)
➡️ Équivalent CLI :
configure terminal
interface ...
description ...
🔹 9. Exemple d’usage typique
Lire interfaces
✔️ get()
Lire config interface
✔️ get_config()
Modifier interface
✔️ edit_config()
Vérifier
✔️ show run / get_config()
🔹 10. Avantages de ncclient
✅ Simple à utiliser
✅ Compatible multi-vendeurs
✅ Moins de XML manuel
✅ Basé sur standards
✅ Idéal pour scripts réseau
🧠 Mémo Ultra-Rapide (Examen)
ncclient =
- Python + NETCONF
- Port 830
- manager.connect()
- get()
- get_config()
- edit_config()
- XML + YANG
🎯 Workflow Classique
1. Connect 2. Filter 3. get / get_config 4. edit_config 5. Verify
🧩 RESTCONF — Fiche Résumé
🔹 1. Définition
RESTCONF est un protocole HTTP permettant de configurer et interroger les équipements réseau via des API REST, basées sur des modèles YANG.
👉 Il est comparable à NETCONF, mais fonctionne avec les méthodes REST classiques.
🔹 2. Caractéristiques principales
✅ Basé sur HTTP / HTTPS
✅ Utilise les modèles YANG
✅ Format JSON ou XML
✅ API via URL
✅ Stateless (sans session persistante)
✅ Écrit directement dans la running-config
❌ Pas de candidate configuration
👉 RESTCONF = version REST simplifiée de NETCONF
🔹 3. RESTCONF vs NETCONF
| Critère | RESTCONF | NETCONF |
|---|---|---|
| Connexion | Stateless | Session persistante |
| Transport | HTTP(S) | SSH |
| Format | JSON / XML | XML |
| Candidate config | ❌ | ✅ |
| Simplicité | ✅ | ⚠️ Plus complexe |
🔹 4. Méthodes HTTP (Opérations)
| Méthode | Rôle |
|---|---|
| GET | Lire une config |
| POST | Créer |
| PUT | Remplacer |
| PATCH | Modifier partiellement |
| DELETE | Supprimer |
⚠️ Très important :
PATCH→ ajoute/modifie sans supprimerPUT→ remplace TOUT ce qui n’est pas déclaré
👉 PUT = configuration déclarative
🔹 5. Correspondance RESTCONF / NETCONF
| RESTCONF | NETCONF |
|---|---|
| GET | <get>, <get-config> |
| POST | <edit-config create> |
| PUT | <edit-config replace> |
| PATCH | <edit-config merge> |
| DELETE | <edit-config delete> |
🔹 6. Formats de données
RESTCONF supporte :
✅ JSON (le plus utilisé)
✅ XML
Exemple Header :
HEADERS = {"Accept": "application/yang-data+json"}
ou
HEADERS = {"Accept": "application/yang-data+xml"}
🔹 7. Utilisation avec Python
RESTCONF fonctionne comme une API web classique.
Exemple simple :
import requests
AUTH = ("cisco","cisco")
HEADERS = {"Accept": "application/yang-data+json"}
response = requests.get(
"https://csr1kv1/restconf/data/...",
auth=AUTH,
headers=HEADERS,
verify=False
)
print(response.text)
👉 On utilise requests comme pour toute API REST.
🔹 8. Structure hiérarchique (JSON/YANG)
Les réponses sont arborescentes :
interface
└── GigabitEthernet
└── ip
└── address
└── primary
➡️ On peut cibler directement une info dans l’URL.
🔹 9. Accès ciblé via URL
Exemple : description de Gi4
/interface=GigabitEthernet/4/description
Adresse IP primaire :
/interface=GigabitEthernet/4/ip/address/primary
👉 L’URL suit exactement la hiérarchie YANG.
🔹 10. PATCH vs PUT (Point clé examen ⚠️)
✅ PATCH = Modification partielle
- Ajoute
- Met à jour
- Ne supprime rien
Exemple :
- Ajouter un réseau OSPF
- Ajouter une IP secondaire
➡️ Safe 👍
❌ PUT = Remplacement total
PUT écrase tout ce qui n’est pas déclaré.
Exemple :
Si tu envoies :
{
"primary": {
"address": "10.1.22.1",
"mask": "255.255.255.0"
}
}
👉 Toutes les IP secondaires sont supprimées 😱
➡️ À utiliser avec prudence.
🔹 11. Concept clé : Configuration déclarative
Avec PUT :
« Voici l’état final que je veux. »
Le routeur :
❌ Supprime le reste
✅ Applique exactement ce que tu déclares
Avantage : cohérence
Risque : suppression involontaire
✅ Récap Express (à mémoriser)
📌 RESTCONF = API REST + YANG
📌 HTTP + JSON/XML
📌 Stateless → running-config direct
📌 GET = lire
📌 PATCH = modifier
📌 PUT = remplacer
📌 URLs = hiérarchie YANG
📌 Très utilisé en automation réseau
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.
