III.1. Les messages du superviseur SNMP vers l'agent SNMP 56
III.2. Les messages de l'agent SNMP vers le superviseur SNMP
56
III.3. Les messages entre agents SNMP 57
Le protocole SNMP a commencé à émerger dans
les années 1980 et a évolué en plusieurs versions.
XV. Architecture globale
Les buts du protocole SNMP sont de :
· connaître l'état global d'un
équipement (actif, inactif, partiellement opérationnel...) ;
· gérer les évènements exceptionnels
(perte d'un lien réseau, arrêt brutal d'un
équipement...).
· analyser différents métriques afin
d'anticiper les problèmes futurs (engorgement réseau...).
· agir sur certains éléments de la
configuration des équipements.
Les différents éléments que l'on peut
identifier avec le protocole SNMP sont synthétisés par le
schéma ci-dessous.
- Figure 1 : Architecture SNMP globale
-
· Les agents SNMP : ce sont les équipements
(réseau ou serveur) qu'il faut superviser.
· Le superviseur SNMP : c'est une machine centrale
à partir de laquelle un opérateur humain peut superviser en temps
réel toute son infrastructure, diagnostiquer les problèmes et
finalement faire intervenir un technicien pour les résoudre.
· Le protocole SNMP : c'est le protocole utilisé par
les agents SNMP et leur superviseur pour communiquer entre eux.
· La MIB : ce sont les informations dynamiques
instanciées par les différents agents SNMP et remontées en
temps réel au superviseur.
· Les outils SNMP. Ce sont les différents
utilitaires utilisés par le superviseur pour l'aider à
diagnostiquer un problème. Ces différents outils sont aussi
utilisés lors de la configuration du superviseur pour prendre en compte
les spécificités de l'infrastructure.
XVI. Les messages SNMP
Les messages du superviseur SNMP vers l'agent
SNMP
Les messages envoyés par le superviseur SNMP vers
l'agent SNMP sont :
· Message "Get Request" : ce message
permet au superviseur d'interroger un agent sur les valeurs d'un ou de
plusieurs objets de la MIB.
· Message "Get Next Request" : ce
message permet au superviseur d'interroger un agent pour obtenir la valeur de
l'objet suivant dans l'arbre des objets de l'agent. Ce message permet de
balayer des objets indexés de type tableau.
· Message "Get Bulk Request" :
introduite avec la version 2 du protocole SNMP, ce message permet de mixer les
messages "Get Request" et "Get Next Request"
pour obtenir des blocs entiers de réponses de la part de l'agent.
· Message "Set Request" : ce message
permet au superviseur de positionner ou modifier la valeur d'un objet dans
l'agent.
Les messages de l'agent SNMP vers le superviseur SNMP
Les messages envoyés par l'agent SNMP vers le superviseur SNMP
sont :
· Message "Get Response" : ce message
est utilisé par l'agent pour répondre aux messages "Get
Request", "Get Next Request" et "Get Bulk
Request" envoyés par le superviseur ;
· Message "Trap" : ce message est
envoyé par l'agent à son superviseur de manière asynchrone
pour signaler un événement, un changement d'état ou un
défaut. L'agent n'attend pas d'acquittement de la part du
superviseur.
· Message "Notification" : introduit
avec la version 2 du protocole SNMP, ce message est similaire au message
"Trap". Il est envoyé par l'agent à son
superviseur de manière asynchrone pour signaler un
événement, un changement d'état ou un défaut.
L'agent n'attend pas d'acquittement de la part du manager.
· Message "Inform" : introduit avec
la version 2 du protocole SNMP, ce message est envoyé par l'agent
à son superviseur de manière asynchrone pour signaler un
événement, un changement d'état ou un défaut.
L'agent attend un acquittement de la part du superviseur et il y aura une
retransmission en cas de non réponse. Ce message peut aussi être
utilisé pour un dialogue superviseur - superviseur.\
Les messages entre agents SNMP
Le seul message envoyé entre les agents SNMP est :
· Message "Report" : introduit avec
la version 2 du protocole SNMP mais jamais implémenté, ce message
permet aux différents agents de communiquer entre eux (principalement
pour remonter des problèmes de traitement des messages SNMP).
XVII. La MIB [3]
II.19. Vue générale
Comme on a commencé à le voir dans le
paragraphe précédent, SNMP définit deux choses, le
protocole, c'est-à-dire la façon dont est transportée
l'information et les informations dynamiques, fournies par les
différents agents SNMP. Ces informations sont spécifiées
dans ce que l'on appelle la MIB (Management Information Base).
La MIB est un ensemble structuré d'informations
organisé sous la forme d'un arbre hiérarchisé de la
même manière que l'arborescence des domaines Internet. Chaque
information dans cette hiérarchie est identifiée par son OID
(Object Identifier). Par exemple, l'objet ifDescr est identifié par son
OID 1.3.6.1.2.1.2.2.1.2.
Comme on peut le voir dans l'exemple, un OID est une
séquence de nombres séparés par le caractère "."
(Point).
Le début de l'arborescence des OID défini dans les
différentes RFC est le suivant :
- Figure 2 : La MIB
De même que pour le DNS, les différentes parties
de la MIB sont définies dans différents fichiers MIB. Chaque
fichier MIB a la responsabilité d'une branche particulière de la
MIB. Ainsi, on trouve par exemple les fichiers MIB suivants :
· SNMP - SMI: RFC 1155 - Defines
the Structure of Management Information (SMI).
· MIB-I : RFC 1156 - Historically
used with CMOT , not to be used with SNMP ;
· SNMPv2-SMI : RFC 2578 - Structure
of Management Information Version 2 (SMIv2).
· MIB-II: RFC 1213 - Management
Information Base for Network Management of TCP/IP-based internets.
· SNMPv2-MIB: RFC 3418 - Management
Information Base (MIB) for the Simple Network Management Protocol (SNMP).
· TCP-MIB: RFC 4022 - Management
Information Base for the Transmission Control Protocol (TCP).
· UDP-MIB: RFC 4113 - Management
Information Base for the User Datagram Protocol (UDP).
· IP-MIB : RFC 4293 - Management
Information Base for the Internet Protocol (IP) ;
· IF-MIB: RFC 2863 - The Interfaces
Group MIB.
· ENTITY-MIB: RFC 4133 - Entity MIB
(Version 3).
· ENTITY-STATE-MIB : RFC 4268 -
Entity State MIB.
· ALARM-MIB : RFC 3877 - Alarm
Management Information Base (MIB).
· FC-MGMT-MIB : RFC 4044 Fibre
Channel Management MIB.
· FIBRE-CHANNEL-FE-MIB : RFC 2837
Definitions of Managed Objects for the Fabric Element in Fibre Channel
Standard.
· HPR-IP-MIB: RFC 2584 -
Definitions of Managed Objects for APPN/HPR in IP Networks.
· et beaucoup d'autres MIB encore.
Il y a une petite particularité à signaler dans
l'arbre de la MIB, il s'agit de la branche "private
entreprises" (OID 1.3.6.1.4.1). Cette branche permet aux
différentes entreprises de gérer leurs MIB spécifiques.
Chaque entreprise se voit attribuer un OID unique et elles ont ensuite le droit
de décrire leurs OID spécifiques en dessous de leur OID
d'entreprise. La gestion de la
branche d'une entreprise est entièrement laissée
à cette entreprise. Les différents OID d'entreprises sont
alloués par l'IANA. On retrouve par exemple :
· Cisco avec un OID 1.3.6.1.4.1.9.
· HP avec 1.3.6.1.4.1.11.
· Novell avec 1.3.6.1.4.1.23.
· et beaucoup d'autres entreprises encore.
II.20. Les fichiers MIB
Comme on a pu le voir dans le paragraphe
précédent, la MIB est organisée sous la forme d'un arbre
hiérarchisé qui contient des informations et chaque portion de
l'arbre est décrite par un fichier MIB particulier. Tâchons de
voir maintenant ce qu'est un fichier MIB.
Tout d'abord, un fichier MIB est un fichier texte. Il contient
la spécification de différents OID. Pour chaque OID, cette
spécification comprend :
· un OID unique, dans l'arbre des OID. Par exemple
1.3.6.1.2.1.1.3.
· un nom générique. Par exemple sysUpTime
;
· une description de cet OID. Par exemple, "The time (in
hundredths of a second) since the network management portion of the system was
last re-initialized.".
· son type. Par exemple TimeTicks. Il existe
différents types possibles de données qui permettent de couvrir
tous les besoins ;
· son statut. Par exemple mandatory. Les différents
statuts possibles sont "mandatory", "optional", "obsolete".
· son mode d'accès. Par exemple read-only. Les
différents accès sont "read-only", "read-write", "write-only",
"not-accessible".
Quelques difficultés courantes avec les MIB :
· Disponibilité du fichier MIB. S'il n'est pas
nécessaire de disposer de la MIB d'un équipement pour le
superviser, il est parfois difficile voire impossible de comprendre le
rôle des OID de cet agent ou de deviner à la suite de quel
événement va être envoyé un message "Trap" au
superviseur. La seule référence reste le fichier MIB de
l'équipement et ce fichier est parfois difficile à trouver.
· Erreur de syntaxe. Il est très courant de
trouver des fichiers MIB comportant des erreurs de syntaxe. Le dernier exemple
que j'ai vécu, est la ligne suivante tirée du fichier d'un
équipementier réseau qui faisait planter le compilateur de MIB.
Il y avait un double commentaire (le double caractère '-'), et la norme
ASN.1 est très claire à ce
sujet : un commentaire commence avec le double
caractère '-' et se termine à la fin de la ligne ou alors au
double caractère '-' suivant présent sur la même ligne. En
conclusion, il n'est pas exclu de trouver des erreurs de syntaxe dans un
fichier MIB (même écrit par un équipementier réseau
renommé). Complétude du fichier MIB. Parfois aussi, on trouve des
MIB dont la description textuelle des OID est vide, ce qui n'aide pas beaucoup
à leur compréhension. De même, il est souvent impossible de
connaître de manière fiable la liste des OID (on parle des
varbinds) portés par un message "Trap". Il faut alors avoir recours
à un analyseur de protocole pour connaître cette liste.
XVIII. Les agents SNMP
Un agent SNMP est un logiciel implanté sur un
équipement à superviser. Il s'agit souvent d'un équipement
réseau (switch, hub, routeur...) mais on trouve aussi des agents sur des
serveurs.
Le rôle d'un agent SNMP est :
· d'instancier les différentes variables de la MIB
spécifiques à cet équipement ;
· de mettre à jour les valeurs dynamiques de ces
différentes variables ;
· de recevoir les requêtes SNMP envoyées par
le superviseur SNMP et d'y répondre ;
· d'envoyer les messages SNMP "Trap" ou "Inform" au
superviseur SNMP pour le prévenir d'un événement
exceptionnel sur l'équipement ;
· de gérer la sécurité des
accès aux variables de la MIB conformément au modèle de
sécurité mis en place.
Un agent SNMP ne connaît pas et n'a pas besoin de
connaître son fichier MIB. Il sait quelles variables MIB il doit
instancier, leur type et comment les mettre à jour. C'est soit
codé en dur dans le code, soit cela fait partie d'un fichier de
configuration annexe qui n'a rien à voir avec un fichier MIB.
XIX. Les outils SNMP
Lorsque l'on commence à s'intéresser au protocole
SNMP, il est tôt ou tard nécessaire d'utiliser différents
outils spécifiques pour déboguer son environnement SNMP :
? Ping : outil de test de la connectivité
réseau.
· Traceroute : un autre outil de test de
connectivité réseau qui affiche en plus la route empruntée
;
· La suite d'outils
Net-SNMP. Il s'agit d'une collection de petits
outils rigoureusement indispensables qui permettent d'envoyer ou de recevoir
des requêtes SNMP. On trouve, entre autres, l'excellent outil "snmpwalk"
qui permet d'interroger un équipement pour connaître tous les OID
gérés par celui-ci. Ces outils ont été
portés dans de nombreux environnements ;
· SnmpB. Il s'agit d'un
outil qui permet de lire et d'afficher sous forme graphique un fichier MIB. De
plus, il est doté de l'équivalent "snmpwalk" pour afficher les
OID gérés par un équipement quelconque. Il est de plus
capable de recevoir les trap SNMP.
· Wireshark : il s'agit d'un
analyseur de protocoles très complet qui permet, entre autres,
d'analyser très finement les trames protocolaires SNMP.
· Getif : il s'agit d'un outil
graphique gratuit fonctionnant sous environnement Microsoft regroupant
plusieurs outils d'aide à l'analyse des problèmes réseau
(ping, traceroute, nslookup...). Il dispose aussi d'outils orientés
SNMP.
· OidView : il s'agit d'un outil
graphique payant fonctionnant sous environnement Microsoft. Il dispose des
principaux outils SNMP et aussi d'un MIB Browser.
· iREASONING : il s'agit d'un
éditeur de logiciels (avec donc des solutions payantes) qui dispose de
beaucoup d'outils SNMP.
· SNMP4J : il s'agit d'une API et
d'une librairie SNMP open source sous licence apache v2 pour
environnement Java.
· Java SNMP Package : il s'agit
d'une autre API et d'une librairie SNMP gratuite pour environnement Java. Il
semble qu'elle soit un peu à l'abandon.
· libsmi : il s'agit d'une
bibliothèque "open source" qui permet de gérer les fichiers
MIB.