SwitchDB

Mein erstes Projekt an der Universität, bzw. das Projekt, wofür ich ursprünglich eingestellt wurde, war die SwitchDB.

Das Netzwerk der Universität besteht aus über 200 Switches, zusammen über 6.000 Ethernet-Ports besitzen. Jeder dieser Ports muss Standort- und nutzungsabhängig konfiguriert werden. Da es verschiedene Abteilungen gibt, die jeweils unterschiedliche Berechtigungen haben sollen (z. B. sollte der IT-Beauftragte der Informatik nur die dort lokalisierten Switches konfigurieren können, aber nur mit den VLANs, die zur Informatik gehören – und nicht die der z. B. Mathematik). Desweiteren gab es Rollen, die Ports nur aktivieren/deaktivieren können sollen, ohne weitere Einstellungen zu verändern; außerdem welche, die globalen (oder auch limitierten) reinen Lesezugriff haben sollten. Kurzum: Das Rechtemodell war sehr umfangreich und komplex und keine uns bekannte Lösung hatte bei Projektstart die erforderlichen Funktionen, um dies entsprechend abzubilden.

Daher wurde die Entwicklung der SwitchDB beschlossen: Ein webbasiertes, in PHP geschriebenes Tool zur Verwaltung des kompletten Universitätsnetzwerkes. Als Datenspeicher diente eine MySQL-Datenbank, die Verbindung zu den Switches wurde über das SNMPv2-Protokoll umgesetzt.

Änderungen werden direkt per SNMP an Switches übertragen, damit ist auch der Erfolg oder eventuelle Fehler bei der Konfiguration direkt kontrollierbar. Umfangreiche Cronjobs scannen in regelmäßigen Abständen das gesamte Netzwerk, um den aktuellen Zustand in der Datenbank abbilden und darauf aufbauend detaillierte Informationen zur Verfügung stellen zu können. Später wurden noch zeitbasierte Änderungen (für z. B. terminierte Veranstaltungen) implementiert. Über Das Neighbour Discovery Protocol konnten außerdem neu angeschlossene Switches automatisch erkannt und integriert werden. Ein Dienst zum Empfangen von SNMP-Traps ermöglichte sogar direkte Reaktionen auf gerade aufgetretene Events (z. B. „Endgerät eingesteckt“, „Switch rebooted“, etc.). Über das implementierte Rechtemanagement konnte für jede zu setzende Eigenschaft pro Rolle sowohl gültige Werte als auch bis auf den Port genau Zugriffe geregelt werden.