phpDNSAdmin – DNS Administration Frontend

Wer viel mit DNS arbeitet weiß, dass Bind Zone files bei größeren Zonen recht umständlich zu verwalten sind. Da ich sowohl beruflich als auch privat viel mit DNS-Servern arbeite, habe ich mich daher nach Möglichkeiten umgesehen, dieses Problem zu lösen. Ein Finding bei dieser Suche war PowerDNS, eine Datenbankbasierte Lösung für DNS-Server, der außerdem noch DNSSEC unterstützt. Gleichzeitig war aber kein vernünftiges UI-Tool zu finden, welches den Anforderungen gerecht wurde. Es gibt viele Alternativen zu Bind (neben PowerDNS z. B. auch MyDNS etc.), aber man muss sich anscheinend zusammen mit den DNS-Server auch entscheiden, welche GUI-Features man haben möchte. Viele GUIs unterstützen z. B. nicht alle vom Server bereitgestellten Resource-Record-Types. So kam ich auf die Idee, ein neues webbasiertes GUI-Projekt ins Leben zu rufen: phpDNSAdmin.  Ziel hier ist es, ein Frontend bereitzustellen, welches unabhängig vom eingesetzten DNS-Daemon alle möglichen RRTypes und Funktionen zur Verfügung stellt. Durch eine Modul-Struktur können leicht neue RRTypes, DNS-Dameons, Authentifizierungs-Methoden etc. hinzugefügt werden. Geschrieben wurde das Tool in PHP, als Frontend-Framework kommt ExtJS zum Einsatz.

Zu finden ist das Projekt auf GitHub: https://github.com/MatthiasLohr/phpDNSAdmin

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.