SNMP: Wie benutze ich eine eigene OID und erstelle eine MIB dazu?

In diesem Blogbeitrag möchte ich euch erklären wie man sich für sein eigenes Gerät oder eigenen Server eine OID zulegt und wie man sich zu dieser OID eine MIB erstellen kann. Dazu werde ich zunächst kurz erläutern was eine OID ist und wie man an eine Eigene gelangen kann. Anschließend geht es darum, wie man mit einem Bash Skript eine OID Anfrage auswertet. Zum Abschluss erstellen wir uns eine eigene MIB zu der OID.
SNMP wird in Version 2 verwendet, NET-SNMP version: 5.7.2.1, und als Betriebssystem wurde Debian 8.10 eingesetzt.

Was ist eine OID?

OID ist die Abkürzung für Object Identifier. Die OIDs sind in einer Baumstruktur aufgeschlüsselt.

Die von Braintower für das SMS Gateway verwendete OID findet sich unter der OID 1.3.6.1.4.1.

Jede OID kann abgefragt werden und liefert entweder die nachfolgenden OIDs oder einen Wert zurück. Im Fall des SMS Gateways kann so zum Beispiel abgefragt werden ob eine Lizenz vorhanden ist oder nicht. Da diese Baumstruktur relativ komplex werden kann und man lediglich die OIDs zur Verfügung hat, gibt es so genannte MIBs auf die ich weiter unten zurückkomme.

Wie legt man sich eine eigene OID zu?

Eine eigene OID muss man bei der IANA beantragen. Dazu muss das Formular https://pen.iana.org/pen/PenApplication.page ausgefüllt werden. Die Anleitung dazu ist zu befolgen.
Nach Erhalt der zweiten Email von IANA und einem Besuch auf dem gesendeten Link ist die eigene OID registriert. Anschließend ist die eigene OID unter https://www.iana.org/assignments/enterprise-numbers/enterprise-numbers zu finden und kann frei verwendet werden.

Wie kann ich die OID nun benutzen?

Um die eigene OID nutzen zu können muss diese dem SNMP Daemon des Betriebssystems mitgeteilt werden. Verwendet wurde NET-SNMP version: 5.7.2.1 auf einem Debain 8.10. Dazu wurde die Konfiguration von Net-Snmp wie folgt ergänzt:

pass .1.3.6.1.4.1.22348 /bin/sh /etc/snmp/snmp.sh

Durch diesen Befehl wird ein SNMP OID Aufruf der entsprechenden OID von Net-Snmp an das hinterlegte Skript weitergereicht. Das Skript übernimmt daher die Aufgabe von Net-Snmp für alle Anfragen auf dieser OID inklusive aller Unterbäume.
Das von uns eingesetzte Skript basiert auf dem Skript von Net-Snmp. (https://sourceforge.net/p/net-snmp/code/ci/master/tree/local/passtest)

#!/bin/sh -f
PLACE=".1.3.6.1.4.1.8072.2.255"

Place muss hier durch die eigene OID ersetzt werden.
REQ="$2"

In REQ wird die abgefragte OID hinterlegt. Falls der Parameter -n mitgesendet wurde muss die nächste gültige OID des Unterbaums ausgegeben werden. Dazu dient die erste if Bedingung. Jede OID mit .1.3.6.4.1.8072.2.255, die ohne Endung ist oder auf .0.* endet, wird bei einer Abfrage mit .1.3.6.4.1.8072.2.255.1 beantwortet.

Bei einer gültigen Abfrage wird der Datentyp und passende Wert zurückgeliefert, in unserem Beispiel wird daher zunächst der Datentyp „String“ abgesendet und anschließend der Wert „Life, the Universe, and Everything“.
Diese Rückgaben können beliebige Werte enthalten und müssen lediglich den korrekten Datentyp zurückgeben.

Was ist eine MIB?

MIB ist die Abkürzung für Management Information Base. Eine MIB dient der Zuordnung von OIDs. In dieser MIB steht die Beschreibung der OID. Zum Beispiel würde die OID 1.3.6.1.4.1.22348.2.1 eine 1 ausgeben. Ohne die zugehörige MIB kann ich mit diesem Wert nicht viel anfangen. In der MIB steht daher beschrieben, dass es sich um die Braintower SMS Gateway Lizenz Nachrichten Routing handelt. Eine MIB ist daher dazu gedacht in einem SNMP Manager verwendet zu werden um ein lesbares und verständliches Format zu erhalten.

Wie lege ich mir eine eigene MIB an?

Eine MIB ist im Grunde genommen eine Textdatei welche die nötigen Definitionen nach https://tools.ietf.org/html/rfc2578 enthält. Daher kann eine eigene MIB mit jedem beliebigem Texteditor erstellt werden. Der MIB Header hat ein festes Format das eingehalten werden muss.

Die Modul Identity wurde im Header bereits mit braintower angegeben. Um nun Unterpunkte hinzuzufügen wird auf diesen verwiesen. Braintower hat damit den Unterpunkt SMSGateway und SMSGateway die Unterpunkte Licenses und Check. Es muss jeweils eine Nummer zum Unterpunkt angegeben werden.

Um nun einen Wert anzugeben, muss dieser genau beschrieben werden. Dazu gibt es OBJECT-Type. Hier wird angegeben welchen Datentyp dieser Wert hat, eine Beschreibung des Wertes und mit DEFVAL kann ein Standardwert angegeben werden.
Den vollständigen Aufbau einer solchen MIB kann aus dem zugehörigen RFC entnommen werden https://tools.ietf.org/html/rfc2578.

Fazit

So kann man mit relativ kleinem Aufwand alle beliebigen Werte via SNMP bereitstellen und diese mittels einem SNMP Manager auslesen. So können im SMS Gateway verschiedenste Metriken über SNMP verfügbar gemacht werden.

Armin Marx

Armin Marx

Application Developer

Armin ist ein waschechter Saarländer mit einer Liebe für Technik, Kampfsport (MMA) und Musik. Besuchte die Mechatronik Vorlesungen bevor er realisierte, dass waschechter Code das coolste daran ist. Gewann einmal den ersten Preis beim Tischfußball und hat das seit dem nie wieder probiert. Studiert z.Z. an der HTW und macht das SMS Gateway jeden Tag ein bisschen besser. Darüber schreibt er auch in diesem Blog.

Gefällt dir der Artikel? Bitte teile ihn!
Share on Facebook
Facebook
0Share on LinkedIn
Linkedin
Email this to someone
email
Tweet about this on Twitter
Twitter