netconf: protocole de configuration réseau ( né dans les années 2000 alors que les opérateurs réseaux sont confrontés à la multiplication des équipements et services à superviser).
Problématique:
Nécessité croissante de normalisation. IETF via la délégation IAB (Internet Architecture Board) constate l'insuffisance des technologies et protocoles de gestion qui à l'époque n'atteignaient pas un niveau jugé satisfaisant (résumé par la RFC3535).
Quelques besoins ( confère RFC3535 et RFC3139):
Pour répondre à ces besoins l'IETF propose NETCONF. NETCONF: protocole de gestion ou supervision des réseaux qui permet de manipuler les différentes données de configuration sur un équipement réseau physique ou virtuel. Il est décrit dans de nombreuses RFC dont la RFC 6241.
Il s'appuie sur des technologies existantes:
La session NETCONF commence avec l'échange de messages “Hello” permettant de définir les fonctionnalités disponibles à la fois côté client et serveur. Un identifiant de session est alors fournit par le serveur.
Généralités sur l'initialisation d'une connexion.
Les messages Hello contiennent entre autre l'espace de nommage, c'est à dire la définition des éléments de configuration utilisables/manipulable. L'espace de nommage utilise des définitions de base et peut être complété.
Pour réaliser des opérations NETCONF à besoin de s'appuyer sur un langage capable de définir différents types de données. NETCONF permet de manipuler des données mais le les définit pas.
Le modèle de données est définit par le langage YANG (RFC 6020). C'est YANG qui décrit et hiérarchise les différents éléments que NETCONF peut manipuler.
YANG permet de hiérarchiser les données.
Pour hiérarchiser les données plusieurs éléments (Nodes) sont disponibles:
Les feuilles (leaf):
Pour assembler et hiérarchiser les feuilles YANG propose les conteneurs et les listes:
Quelques mot clés largement utilisés:
Définition et utilisation d'une feuille.
Définition dans YANG | Utilisation par NETCONF |
---|---|
leaf port{ type inet:port-number; default 22; config true; description "port to listen to"; } | <port>2202</port> |
Définition et utilisation d'une leaf-list:
Définition dans YANG | Utilisation par NETCONF |
---|---|
leaf-list allow-user{ type string; mandatory true; } | <allow-user>admin</allow-user> <allow-user>root</allow-user> <allow-user>nagios</allow-user> |
Utilisation d'un node de type list. On notera que les feuilles ip et port ne sont pas obligatoires et peuvent ne pas être spécifiées dans le fichier de configuration NETCONF.
Définition dans YANG | Utilisation par NETCONF |
---|---|
list server{ key "name"; leaf name{type string;} leaf ip{type inet:ip-address;} leaf port{type inet:port-number;} } | <serveur> <name>http</name> <ip>192.168.0.1</ip> <port>8080</port> </serveur> <serveur> <name>ftp</name> <port>2121</port> </serveur> |
Dernier exemple, définition d'un container system. On notera ici l'utilisation du mot clé presence dans la définition du container ssh qui apporte une sémantique au container. Sa présence dans le fichier de configuration NETCONF activera le service SSH.
Définition dans YANG | Utilisation par NETCONF |
---|---|
container system{ container services{ container "ssh"{ presence "Enables SSH" } } } | <system> <services> </ssh> </services> </system> |
Pour résumer C'est le langage YANG qui modélise les différentes données d'état ou de configuration qui seront ensuite utilisées par le protocole netconf.