(WS11-01a) Generisches SNMP-UPnP-Mapping

Aus Verteilte Systeme - Wiki
Zur Navigation springen Zur Suche springen

Einleitung

Dieses Projekt wurde durch Iwan Berger B.Sc. im Wintersemester 2011/12 Rahmen des Praktikums zur Master-Vertiefung IT-Management für Software-Entwickler unter Leitung von Dipl.-Inform. (FH), M.Sc. Jan Schäfer und Dr. Markus Schmid an der Hochschule RheinMain durchgeführt.

Ziel war die Implementierung eines generischen Adapters, welcher SNMP-Geräte über UPnP verfügbar macht. Hierdurch soll ermöglicht werden, dass legacy SNMP-managed Geräte (wie z.B. Drucker oder Switches) über das inzwischen in breitem Einsatz befindliche UPnP-Protokoll überwacht bzw. gesteuert werden können. Folgendes Schema verdeutlicht diesen Zusammenhang:

Architektur.png

Die eigentlich auf einem SNMP-Agenten verfügbaren Funktionalitäten werden über ein generisches UPnP Device anderen UPnP Control Points angeboten.

Simple Network Management Protocol (SNMP)

Adressierung
über IP
Agent
läuft auf zu überwachendem Gerät
Manager
kann Datensätze anfordern bzw. verändern
Datenpakete
GET, GETNEXT, GETBULK, SET, RESPONSE und TRAP

Snmp.png

Management Information Base (MIB)

  • Hierarchische Verwaltung von Managed Objects
  • Identifizierung über Object Identifier
  • definiert u.a.
  • Name
  • Datentyp
  • Zugriffsrechte

Mib tree.png

Universal Plug and Play (UPnP)

Herstellerübergreifende Ansteuerung von Geräten

  • Control-Points steuern Devices
  • Kommunikation über etablierte Protokolle und Formate (TCP/IP, HTTP, XML, und SOAP)

Beispielverwendung:

  • für Anwendungen Ports auf Router freigeben
  • Verteilung von Multimediainhalten (UPnP-MediaServer / UPnP-MediaRenderer)

Phasen

Addressing
Über IP
Discovery
Mittels UDP Multicast können Control Points automatisch verfügare Devices auffinden
Description
XML Beschreibung
Device
  • Hersteller
  • Produkt
  • Seriennummer
  • ...
Service
  • Aktionen
  • Variablen mit Datentypen
Control
Aktionen an Steuerungs-URL des UPnP Devices
Event notification
Benachrichtigung durch UPnP Device
Presentation
Alternativer Zugriff über Webbrowser


UPnP Protocol stack.png

Problemanalyse

Architektur

Um Zugriff auf unbequemes SNMP über einfaches UPnP zu ermöglichen werden drei Kernkomponenten benötigt:

SNMP Manager
für Zugrif auf SNMP-Gerät
UPnP Device
um eigene Aktionen anderen UPnP Control Points anzubieten
Bridge Logik
zur Übersetzung zwischen SNMP und UPnP Funktionalitäten

Ablauf

Es ergibt sich folgender Ablauf:


Snmp2upnpAblauf.png

Aktionen definieren

Die Service Control Protocol Definition (SCPD) eines UPnP services enthält angebotene Actions. Zum definieren anzubietender UPnP actions müssen entsprechende SNMP Funktionalitäten übersetzt werden.

1. Ansatz Actions aus MIB generieren.
In MIBs sind verfügbare OIDs für SNMP Aktionen definiert. Dieser Ansatz bringt folgende Probleme:
  • Häufig keine MIB vorhanden
  • Mehrere MIBs je Gerät
  • Nicht jede OID aus MIB genutzt
2. Ansatz Lesbare OIDs und Datentypen über SNMPwalk
Durch Abfolge von GETNEXT Befehlen kann der gesamte OID-Baum eines SNMP-Geräts durchlaufen werden. Dieser Ansatz bringt folgende Probleme:
  • Nutzerfeindliche Bezeichnungen (nur numerische Darstellung)
  • unbekannte Zugriffsrechte (man weiß nur, dass READABLE, nicht ob auch WRITABLE.)

Konzept

Im folgenden werden die benötigten Funktionalitäten der einzelnen Komponenten aufgeführt.

SNMP Funktionalitäten

Der SNMP Manager benötigt Funktionalität zum

  • Senden von GET und SET Befehlen
  • Ablaufen (GETNEXT) des OID-Baums
  • Verarbeiten von Traps

MIB Funktionalitäten

Zum Verarbeiten der MIBs werden folgende Funktionalitäten benötigt:

  • Übersetzen einer OID in beutzerfreundliche Bezeichner
  • Bestimmen der Zugriffsrechte zu einer OID
  • Bestimmen des Datentyps der OID

UPnP Funktionalitäten

Zum Erstellen eines generischen UPnP Devices werden folgende Funktionalitäten benötigt:

  • Erstellen einer (leeren) XML service description
  • Hinzufügen von actions und state Variablen
  • Übersetzen von SNMP-Datentypen in UPnP-Datentypen
  • Validieren erzeugter XML service descriptions

Zum Betrieb des generischen UPnP Devices werden folgende Funktionalitäten benötigt:

  • Übersetzen empfangener UPnP actions in SNMP Befehle
  • Anbieten der UPnP Web-Präsentation

Realisierung

Programmiersprache/Bibliotheken

Das Projekt wurde mit Java 1.6 unter Verwendung folgender Bibliotheken erstellt:

  • SNMP4J für SNMP Funktionalitäten
  • Mibble zum Verarbeiten von MIBs
  • kXML XML pull parser/writer für Mibble
  • CyberLinkForJava für UPnP Funktionalitäten
  • ini4 zum Lesen von Konfigurationsdateien
  • log4j für Logging-Funktionalität

Testumgebung

SNMP agent

Als SNMP Gerät wurde Linux Mint verwendet. (Ubuntu sollte analog funktionieren). Zum installieren und starten des SNMP Daemons können folgende Aufrufe verwendet werden:

aptitude install snmpd
service snmpd start

Anschliessend sollte ein snmpwalk vom gleichen Rechner Ergebnisse anzeigen:

snmpwalk -v2c -c public localhost

Um auch Anfragen anderer Rechner anzunehmen, muss die agentAddress in der Datei /etc/snmp/snmpd.conf folgendermaßen angepasst werden:

#  Listen for connections from the local system only
#agentAddress  udp:127.0.0.1:161
#  Listen for connections on all interfaces (both IPv4 *and* IPv6)
agentAddress udp:161,udp6:[::1]:161

Um auch Schreibzugriffe zu erlauben, kann die read-only community in eine read-write community geändert werden:

#rocommunity public  default    -V systemonly
rwcommunity public  default    -V systemonly

Manche OID Werte sind fest in der /etc/snmp/snmpd.conf definiert, auskommentieren dieser ermöglicht auch Schreibzugriffe:

#  Note that setting these values here, results in the corresponding MIB objects being 'read-only'
#  See snmpd.conf(5) for more details
#sysLocation    Sitting on the Dock of the Bay

UPnP Control Point

Als UPnP Control Point wurde der Device Spy aus den Intel Developer Tools for UPnP Technologies verwendet. Nach dem Start werden verfügbare UPnP Devices im Netzwerk aufgelistet. Die Devices enthalten service descriptions (und optionale sub-devices). In der service description aufgeführte Actions können ausgeführt werden und werden an das entsprechende Device gesendet.

Bedienungsanleitung

Es gibt drei ausführbare Einheiten:

CreateServiceByWalking
Diese Einheit generiert eine service description für ein generisches UPnP Device indem der gesamte lesbare OID-Baum eines SNMP Agenten durchlaufen wird.
Das SNMP Target wird in der Datei snmp.cfg im Ordner cfg/ definiert. Die Konfiguration umfasst den Hostnamen (bzw. die IP-Adresse), den UDP-Port auf dem der Agent läuft, welche SNMP community für die Zugriffe verwendet wird, wie viele Verbindungsversuche maximal unternommen werden und nach welchem Timeout (in ms) ein erneuter Verbindungsversuch unternommen wird.
Die erstellte service description welche UPnP Actions und StateVariablen für den Zugriff definiert landet in description/service/snmp/description.xml .
SNMP_2_UPnP
Diese Einheit bildet den eigentlichen generischen SNMP auf UPnP Adapter.
Beim Start wird die statische UPnP device description aus description/description.xml sowie die vorher generierte service description aus description/service/snmp/description.xml gelesen. Für die SNMP Konfiguration welche die Verbindungsparameter zum SNMP Agenten definiert wird die gleiche Datei wie in der Einheit CreateServiceByWalking gelesen.
Die von einem UPnP Control Point ausführbaren Actions werden in entsprechende SNMP Befehle übersetzt. Die SNMP Antwort wird als Rückgabewert der Action zurück an den UPnP Control Point gesendet.
PimpMyService
Diese Einheit versucht anhand von MIBs die Bezeichnungen angebotener Actions in benutzerfreundlichere Bezeichner zu konvertieren, sowie bei vorhandenen Schreibrechten eine entsprechende Action zur service description hinzuzufügen.
Zu durchsuchende MIBs können über die Datei mib.cfg im Ordner cfg/ als Semikolon getrennte Werte des Schlüssels mib_files definiert werden. Hierzu wird der Dateiname entweder relativ oder absolut angegeben. Standard IANA/IETF MIBs sind bereits enthalten. Bei diesen reicht es den Namen der MIB anzugeben. Zusätzlich können weitere Verzeichnisse angegeben werden in denen MIBs anhand ihres Namens gesucht werden.
Änderungen der service description (andere Action-Bezeichner bzw. zusätzliche Actions) werden an der Originaldatei vorgenommen.

Fazit

Folgende Funktionalitäten wurden erfolgreich implementiert:

  • Das definieren verfügbarer SNMP Aktionen und entsprechender Datentypen über SNMPwalk funktioniert.
  • Die generische Erstellung von UPnP actions analog SNMP-GET Befehlen funktioniert.
  • Benutzerfreundliche Bezeichner für OIDs können ebenso wie Zugriffsrechte aus der entsprechenden MIB gelesen werden.
  • Sofern in einer MIB definiert, können die UPnP actions nachträglich mit benutzerfreundliche Bezeichnern versehen werden und bei entsprechenden Zugriffsrechten um eine UPnP action analog des SNMP-SET Befehls ergänzt werden.

Um folgende Funktionalitäten kann das Projekt erweitert werden:

  • Empfangen von UPnP Traps und erzeugen einer entsprechenden UPnP Event Notification.
  • Unterstützung weiterer Datentypen ausser String und Ganzzahlen.
  • Intuitivere Darstellung von SNMP-Tabellen. Hier könnte bspw. je Spalte ein eigener UPnP Service angeboten werden.
  • Anbieten mehrerer SNMP-Geräte als Sub-Devices.
  • Als UPnP Web-Präsentation könnte bspw. die HTML formatierte Ausgabe eines aktuellen SNMPwalks verwendet werden.

Literatur

BRIDGING METHOD FOR INTEGRATION THE UPNP DOMAIN AND THE LEGACY SNMP DOMAIN
Pusik Park, KiTaeg Lim, KwangHo Choi
International Conference WWW/Internet 2003

http://wiki.ubuntuusers.de/SNMP - Anleitung für SNMP unter Ubuntu

Libraries:

Bilder aus: