Principe

SNMP (Simple Network Management Protocol) est un protocole permettant d'interagir avec des équipements réseau. À Grenode, il sert principalement à remonter des informations jusqu'à gaffe, pour surveiller et monitorer les systèmes de Grenode et/ou de ses membres.

Certains membres (le besoin est apparu en premier chez Rézine pour ne pas les nommer) ont eu le besoin d'interroger des équipements via snmp pour remonter des informations, mais ces équipements ne sont pas directement accessibles depuis gaffe.

La solution décrite ici pour remédier à ce problème consiste à faire transiter les requêtes snmp via une machine passerelle (entre gaffe et les équipements à surveiller) qui fait alors office de serveur mandataire pour le snmp.

Mise en œuvre

Installation de paquets

Sur le serveur faisant office de relai, il faut installer snmpd (par exemple sur debian) :

apt-get install snmpd

Configuration

Base snmpd

Dans le cas où le serveur relai n'est pas déjà utilisé pour répondre à des requêtes snmp, la configuration peut être tout à fait minimale. Les deux lignes suivantes définissent l'adresse d'écoute, ainsi que la communauté snmp (en lecture seule) par défaut :

agentAddress udp:161,udp6:[::1]:161
rocommunity grenode     default

Si le serveur snmpd est déjà configuré, passer au point suivant.

Proxy snmp

On configure alors le proxy snmp :

  • Créer une vue (proxyview) qui permettra d'inclure tout ce qui est sous l'OID .1.3.6.1 :

    view    proxyview   included    .1.3.6.1
    
  • Autoriser ProxyUser sur la communauté utilisée (cf. ci-dessus) :

    com2sec ProxyUser   default grenode
    
  • Créer un groupe ProxyGroup et y affecter ProxyUser :

    group   ProxyGroup  v1  ProxyUser
    group   ProxyGroup  v2c ProxyUser
    
  • Autoriser ProxyGroup à accéder aux objets de la vue proxyview :

    access  ProxyGroup  ""  any noauth  exact   proxyview   none    none
    
  • Pour chaque équipement vers lequel on relaie, il faut définir un contexte et une communauté (le contexte se définit avec le -Cn, le dernier champ définit la communauté qu'il faudra demander au proxy snmp lors d'une interrogation) :

    com2sec -Cn rtr-marteau     ProxyUser   default     marteau
    com2sec -Cn rtr-rabot       ProxyUser   default     rabot
    com2sec -Cn rtr-scie        ProxyUser   default     scie
    
  • Autoriser ProxyGroup à accéder aux contextes commençant par rtr (noter le prefix pour stipuler « tout ce qui commence par ») :

    access  ProxyGroup  rtr     any noauth  prefix  proxyview   none    none
    
  • Enfin, faire correspondre le contexte à la communauté utilisée sur l'équipement distant (on suppose public ici), en spécifiant son IP ou nom de domaine :

    proxy   -Cn rtr-marteau -v 2c   -c  public      10.10.0.254     .1.3
    proxy   -Cn rtr-rabot   -v 2c   -c  public      10.10.1.254     .1.3
    proxy   -Cn rtr-scie    -v 2c   -c  public      10.10.2.254     .1.3
    

Tests

On peut alors récupérer l'arborescence snmp du routeur marteau :

snmpwalk -v2c -c marteau <nom du relai snmp>

ou obtenir un item spécifique en spécifiant un OID (.1.3.6.1.2.1.1.1.0 est l'OID contenant l'équivalent de uname -a sur GNU/Linux) :

snmpwalk -v2c -c rabot <nom du relai snmp> .1.3.6.1.2.1.1.1.0
snmpget -v2c -c scie <nom du relai snmp> .1.3.6.1.2.1.1.1.0