Skip to content

SNMPd Docker : monitorer ton réseau simplement

Brandon Visca
Date de publication:

💡 TL;DR

  • SNMPd transforme n’importe quelle machine en agent de monitoring réseau standardisé, exploitable par Zabbix, LibreNMS ou un simple script.
  • Dockerisé, il se déploie en 2 minutes, isole sa config du système hôte et fonctionne sur toutes les architectures.
  • Un docker-compose.yml de 25 lignes + un snmpd.conf minimal = monitoring réseau fonctionnel sans toucher au système.

Tu as un switch, un routeur ou un petit serveur dont tu veux récupérer les métriques réseau, températures ou uptime, mais tu ne veux pas installer trois tonnes de métrologie dessus ? SNMP reste le protocole le plus simple et universel pour ça. Il est supporté nativement par quasiment tous les équipements réseau, et quand c’est pas le cas, tu peux l’ajouter en quelques secondes avec snmpd.

Dans cet article, je te montre comment faire tourner un agent SNMP dans un conteneur Docker. Zéro pollution système, zéro dépendance sur l’hôte, et une config qui suit le conteneur partout où tu le balances. Si tu cherches une solution de monitoring complète pour agréger toutes ces données, j’ai aussi publié un guide Zabbix sous Docker qui s’intègre parfaitement avec SNMP.

Qu’est-ce que SNMP et pourquoi l’utiliser en Docker ?

SNMP (Simple Network Management Protocol) est un protocole de supervision réseau vieux de 35 ans et toujours d’actualité. Son principe est simple :

Les avantages de SNMP sont son universalité et sa légèreté : pas de client lourd, pas de base de données locale, juste un démon qui répond à des requêtes UDP sur le port 161.

Pourquoi Docker ? Parce que la configuration native de snmpd sur Linux est pénible. Fichiers de config éparpillés dans /etc/snmp/, droits compliqués sur les MIBs, et si tu te plantes, tu pollues le système. Avec Docker, tu as un snmpd.conf propre, versionné, et tu peux le copier sur n’importe quel hôte en deux secondes. Si tu débutes avec Docker, mon guide des services Docker pour débutants couvre les bases indispensables.

Architecture et vocabulaire en 30 secondes

Avant de copier-coller du YAML, quelques termes à connaître :

L’agent snmpd n’a besoin de rien d’autre que d’un port UDP ouvert et d’un fichier de configuration. C’est son travail d’interroger le système hôte pour les métriques réseau et de les exposer.

Prérequis

Tu as besoin de très peu de choses :

Contrairement à un agent monitoring classique, snmpd ne nécessite pas de base de données ni de dashboard. Il se contente de répondre aux questions.

Docker Compose complet

Crée un dossier snmpd et un fichier docker-compose.yml :

services:
  snmpd:
    image: polinux/snmpd:latest
    container_name: snmpd
    restart: unless-stopped
    # Mode réseau host indispensable pour accéder aux interfaces réelles
    network_mode: host
    cap_add:
      - NET_RAW
    volumes:
      - ./snmpd.conf:/etc/snmp/snmpd.conf:ro
      - /proc:/host/proc:ro
    environment:
      - SNMPD_EXTRA_FLAGS=-Lsd -Lf /dev/null -p /var/run/snmpd.pid

Quelques explications sur les choix techniques :

⚠️ Note : network_mode: host ne fonctionne que sous Linux. Sur macOS ou Windows, snmpd en Docker ne peut pas voir les interfaces hôte. Pour ces OS, installe snmpd nativement.

Le fichier snmpd.conf minimaliste

Crée un snmpd.conf dans le même dossier. Voici une config SNMPv2c fonctionnelle pour un homelab (à durcir ensuite) :

# Emplacement : ./snmpd.conf
# Agent écoute sur toutes les interfaces UDP 161
agentAddress udp:161

# Informations système
sysLocation    "Homelab"
sysContact     "[email protected]"
sysServices    72

# Community string par défaut (à CHANGER !)
rocommunity tonsecret 127.0.0.1
rocommunity tonsecret 192.168.1.0/24

# Ne pas exposer tout le système, juste les bases
# Accès limité aux OID système standard
view   systemonly  included   .1.3.6.1.2.1.1
view   systemonly  included   .1.3.6.1.2.1.2
view   systemonly  included   .1.3.6.1.2.1.25

# Désactiver les services inutiles pour réduire la surface d'attaque
dontLogTCPWrappersConnects yes

Paramètres clés à adapter :

Lance le conteneur :

docker compose up -d

Passer à SNMPv3 (recommandé en production)

SNMPv2c envoie la community string en clair sur le réseau. Pour un homelab isolé ce n’est pas critique, mais si tes métriques passent sur un VLAN partagé ou un lien WiFi, préfère SNMPv3.

Voici une config SNMPv3 à remplacer dans snmpd.conf :

agentAddress udp:161

sysLocation    "Homelab Securise"
sysContact     "[email protected]"

# Créer un utilisateur SNMPv3
# Syntaxe : createUser <user> SHA <authpass> AES <privpass>
createUser monuser SHA "monmotdepasse" AES "macleprivee"

# Droits en lecture seule pour cet utilisateur
rouser monuser authPriv .1.3.6.1.2.1

⚠️ Important : la directive createUser doit être faite dans un fichier lu au démarrage. Avec l’image Docker, elle est prise en compte au premier lancement. Si tu changes le mot de passe, supprime le conteneur (docker compose down) et relance (docker compose up -d) pour que la création d’utilisateur soit reprise.

Pour tester en SNMPv3 depuis un client :

snmpwalk -v3 -u monuser -l authPriv -a SHA -A "monmotdepasse" -x AES -X "macleprivee" 192.168.1.10 1.3.6.1.2.1.1

Tester ton agent SNMP

Si tu as un client snmp sur ta machine locale ou une autre machine du réseau, voici les commandes de base.

Récupérer l’uptime (SNMPv2c) :

snmpget -v2c -c tonsecret 192.168.1.10 1.3.6.1.2.1.1.3.0

Lister toutes les interfaces réseau (SNMPv2c) :

snmpwalk -v2c -c tonsecret 192.168.1.10 1.3.6.1.2.1.2.2.1.2

Récupérer le load average (SNMPv2c) :

snmpwalk -v2c -c tonsecret 192.168.1.10 1.3.6.1.4.1.2021.10.1.3.1

Depuis un conteneur client SNMP temporaire (pratique si tu n’as pas de client installé) :

docker run --rm -it polinux/snmp:latest snmpwalk -v2c -c tonsecret 192.168.1.10 1.3.6.1.2.1.1

Si tu obtiens des réponses avec des OID et des valeurs, ton agent est opérationnel.

Les métriques les plus utiles à surveiller

Voici les OID incontournables pour un monitoring réseau basique :

MétriqueOIDDescription
Uptime1.3.6.1.2.1.1.3.0Temps depuis le dernier reboot
Nom système1.3.6.1.2.1.1.5.0Hostname de la machine
Description1.3.6.1.2.1.1.1.0OS et version du kernel
Interfaces1.3.6.1.2.1.2.2.1.2.XNom de l’interface X
Octets IN1.3.6.1.2.1.2.2.1.10.XTotal octets reçus sur interface X
Octets OUT1.3.6.1.2.1.2.2.1.16.XTotal octets émis sur interface X
État interface1.3.6.1.2.1.2.2.1.8.X1=up, 2=down, 3=testing
Load average1.3.6.1.4.1.2021.10.1.3.1Charge CPU (1 min) via UCD-SNMP
RAM totale1.3.6.1.4.1.2021.4.5.0Mémoire physique totale
RAM utilisée1.3.6.1.4.1.2021.4.6.0Mémoire physique utilisée

Remplace X par l’index de l’interface (généralement 1, 2, 3…). Tu peux lister les index avec :

snmpwalk -v2c -c tonsecret 192.168.1.10 1.3.6.1.2.1.2.2.1.1

Ces métriques suffisent à alimenter un dashboard simple ou à déclencher des alertes sur l’état de tes liens réseau.

Intégration avec un manager SNMP

SNMPd sans manager, c’est comme un téléphone sans interlocuteur. Voici comment brancher ton agent à une solution existante.

Avec Zabbix

Si tu utilises déjà Zabbix pour superviser ton infrastructure, l’intégration SNMP est native. Crée un hôte dans Zabbix, ajoute l’interface SNMP avec l’IP de ta machine Docker, utilise la community string (ou les credentials v3), et associe le template “Template Net Network Generic Device SNMP” ou “Template OS Linux SNMP”. Les items se peuplent automatiquement.

Avec LibreNMS

LibreNMS détecte automatiquement les hôtes SNMP. Ajoute simplement l’IP de ta machine, le protocole SNMP et la community. LibreNMS va découvrir les interfaces, les graphs de débit, et les alertes de port down sans que tu touches à quoi que ce soit.

Avec un script personnalisé

Un simple script Python avec pysnmp ou easysnmp suffit pour récupérer une valeur et l’envoyer vers InfluxDB, Prometheus Pushgateway ou une API maison. SNMP est un protocole texte : pas besoin de SDK complexe.

Si tu cherches une solution de monitoring plus moderne et ultra-légère, mon article sur Beszel Docker couvre une approche agentless par SSH qui complète bien SNMP pour les métriques système.

Sécuriser ton agent SNMP

SNMPv1/v2c a une réputation de protocole peu sûr à juste titre. Quelques règles d’hygiène :

  1. Change la community string immédiatement. public et private sont les premières valeurs testées par les scanners.
  2. Restreins par IP avec rocommunity suivi d’un CIDR. Jamais sans restriction.
  3. Préfère SNMPv3 dès que possible, surtout sur un réseau WiFi ou partagé.
  4. Ferme le port 161 sur ton pare-feu externe. SNMP est un protocole LAN, pas WAN.
  5. Désactive les modules inutiles dans snmpd.conf pour réduire la surface d’attaque (d’où les view limités dans l’exemple).

Sur un VPS cloud exposé à Internet, tu ne dois jamais exposer SNMP sans restriction d’IP et sans SNMPv3. Point barre.

Dépannage courant

SymptômeCause probableSolution
Timeout: No ResponsePort 161 filtré ou conteneur downVérifie docker ps, teste avec nc -vu IP 161 depuis le client
Cannot find moduleMIBs manquantes côté clientInstalle snmp-mibs-downloader sur le client
Community string refuséeMauvaise IP source ou typoVérifie le CIDR dans rocommunity et la casse
Valeurs système videsPas accès à /procVérifie le volume /proc:/host/proc:ro dans le compose
Interfaces absentesPas de network_mode: hostPasse en mode host ou --net=host

Si tu es sur un NAS Synology ou un routeur OpenWrt, snmpd est souvent préinstallé mais limité. L’image Docker te donne un snmpd complet et à jour sans toucher au firmware.

Conclusion

SNMPd en Docker, c’est la solution la plus rapide pour rendre une machine Linux monitorable sans l’alourdir. Un fichier Compose, un snmpd.conf de 10 lignes, et tu peux brancher n’importe quel outil de supervision dessus. Que tu sois sur Zabbix, LibreNMS ou un simple script Python, le protocole est universel.

La force de cette approche, c’est l’isolation : ta config SNMP vit dans un fichier versionné, transportable d’une machine à l’autre, sans laisser de traces sur le système hôte. Pour un homelab, c’est l’idéal.

Prochaine étape : brancher ton agent à un manager. Si tu cherches une solution complète, je te recommande de jeter un oeil à mon tutoriel Zabbix sous Docker pour orchestrer la supervision de tous tes agents SNMP depuis une seule interface.

Next
Polkit Linux : comprendre et configurer les autorisations