Entwicklung eines Parsers von BINDKonfigurationsdateien zur Migration in eine MySQL-Datenbank Markus Dienstknecht Seminarvortrag 15.01.2015 Inhaltsverzeichnis 1. Motivation 2. Domain Name System (DNS) a. Domain Name b. Nameserver c. Anfrage an den Nameserver 3. Migration a. b. c. d. e. f. Anforderungen Ruby Datenbank Migrationsablauf Probleme Optimierung 4. Ausblick 5. Fazit Entwicklung eines Parser von BIND-Konfigurationsdateien zur Migration in eine MySQL-Datenbank Markus Dienstknecht | 15.01.2016 Motivation Motivation Bisher: • • • • Komplettes System vom Hostmaster manuell verwaltet P E-Mail bei Änderungen -> entsprechende Dateien anpassen P Keine automatische Validierung P Keine automatische Versionskontrolle P Ziele: • • • • • Kompletten Datenbestand in MySQL-Datenbank migrieren Einfache Verwaltung Nutzerschnittstelle mit Rechteverwaltung anbieten Web-Portal zur Vereinfachung Versionskontrolle bei Export Entwicklung eines Parser von BIND-Konfigurationsdateien zur Migration in eine MySQL-Datenbank Markus Dienstknecht | 15.01.2016 Domain Name System (DNS) Domain Name System (DNS) • 1983 von Paul Mockapetris entwickelt • Hauptaufgabe: Domain Namen in IP-Adressen übersetzen Einfach zu merken Einfache Änderungen • Einer der wichtigsten Diensten in heutigen Netzwerken DNS www.rwth-aachen.de 137.226.107.63 Entwicklung eines Parser von BIND-Konfigurationsdateien zur Migration in eine MySQL-Datenbank Markus Dienstknecht | 15.01.2016 Domain Name System (DNS) - Domain Name • Name zu einer IP-Adresse • Korrekte Schreibweise: fully qualified domain name (FQDN) Endet immer mit einem Punkt Subdomains durch Punkte getrennt • Baumstruktur mit Domains Top-Level Domain geografisch oder organisatorisch Second-Level Domain beginnt eigentliche Namensgebung Gegebenenfalls weitere Subdomains Zur Vereinheitlichung auf Dienst enden . heise de org fh-aachen rwth-aachen com uk www Entwicklung eines Parser von BIND-Konfigurationsdateien zur Migration in eine MySQL-Datenbank Markus Dienstknecht | 15.01.2016 org org Domain Name System (DNS) - Nameserver • Für Namensverwaltung zuständig Nameserver • Konfigurationsdatei und Zonendateien Konfigurationsdatei • Master- und Slavezonen Masterzonen selbst verwaltet Slavezonen werden „kopiert“ Zone Zone Zone Zone Record Record Record Record Record Record Record Record Record Record Record Record Record Record Record Record Record Record Record Record Record Record Record Record Entwicklung eines Parser von BIND-Konfigurationsdateien zur Migration in eine MySQL-Datenbank Markus Dienstknecht | 15.01.2016 Domain Name System (DNS) – Nameserver - Konfigurationsdatei • Einstellungen für Nameserver (BIND) • Import anderer Dateien • Rechnernamen • Sichten • Zonen Zonentyp Pfad Benachrichtigungen Entwicklung eines Parser von BIND-Konfigurationsdateien zur Migration in eine MySQL-Datenbank Markus Dienstknecht | 15.01.2016 Domain Name System (DNS) – Nameserver - Zonendateien • Für Namensauflösung benötigt • Beinhaltet beliebig viele Records • Wird bei Fehlern nicht geladen • Komplexe Syntax Entwicklung eines Parser von BIND-Konfigurationsdateien zur Migration in eine MySQL-Datenbank Markus Dienstknecht | 15.01.2016 Domain Name System (DNS) – Nameserver – Resource Records • Nötige Informationen zur Übersetzung • Aufbau immer gleich Zu übersetzender Domain Name Optionale Time to live Optionale Protokollgruppe Recordtyp Recorddaten Domain Name TTL Klasse Typ Daten www.test.de. 1234 IN A 192.168.178.1 Entwicklung eines Parser von BIND-Konfigurationsdateien zur Migration in eine MySQL-Datenbank Markus Dienstknecht | 15.01.2016 Domain Name System (DNS) – Anfrage an den Nameserver • Autoritative Antwort Antwort ist dem Nameserver bekannt Schnelle Antwort • Nicht-Autoritative Antwort Antwort liegt auf unbekanntem Nameserver Antwort dauert länger Anfrage Client nicht-autoritative Antwort Nameserver nicht bekannt autorative Antwort Entwicklung eines Parser von BIND-Konfigurationsdateien zur Migration in eine MySQL-Datenbank Markus Dienstknecht | 15.01.2016 bekannt Cache Migration Migration • Erstellen eines Parsers • Mehrere Monate täglich laufen Parallelsystem Fehlerfrei und stabil • Parser schafft Grundvoraussetzung DNS Parser SQL Entwicklung eines Parser von BIND-Konfigurationsdateien zur Migration in eine MySQL-Datenbank Markus Dienstknecht | 15.01.2016 Migration ns1 aktueller Nameserver Cronjob Kopierscript halo Maschine, auf der gearbeitet wird komdb Server mit MySQLDatenbank Migrationsscript Exportscript ns3 noc-backend BackendMaschine zur Verwaltung Git Repository Entwicklung eines Parser von BIND-Konfigurationsdateien zur Migration in eine MySQL-Datenbank Markus Dienstknecht | 15.01.2016 neuer Nameserver ns4 neuer Nameserver Migration - Anforderungen • Komplett neue Struktur für Rechtesystem • Automatische Erstellung von PTR Records • Direkte Fehlerprüfung mit Abschlusslog • 12 verschiedene Recordtypen beachten • Automatisch erstellte Records in jeder Zone Entwicklung eines Parser von BIND-Konfigurationsdateien zur Migration in eine MySQL-Datenbank Markus Dienstknecht | 15.01.2016 Migration - Ruby • Dynamische und freie Programmiersprache • Einfach anzuwenden und produktiv einzusetzen • Leicht verständliche Syntax • Anbindung an Frontend Entwicklung eines Parser von BIND-Konfigurationsdateien zur Migration in eine MySQL-Datenbank Markus Dienstknecht | 15.01.2016 Migration - Datenbank • Hostnamen in Baumstruktur • Polymorphische Beziehung für Records • PTR Records zu Adressrecords zuteilen • Unterscheidung von Zonen zwischen Master und Slave • Beliebig viele Records für Zonen Entwicklung eines Parser von BIND-Konfigurationsdateien zur Migration in eine MySQL-Datenbank Markus Dienstknecht | 15.01.2016 Migration - Migrationsablauf • Kopieren des aktuellen Datenbestands • Anlegen der Logdatei • Datenbank zurücksetzen • Konfigurationsdatei einlesen und entsprechende Zonen anlegen • Zonen einzeln initialisieren und importieren • Logdatei mit Fehlern per E-Mail senden Entwicklung eines Parser von BIND-Konfigurationsdateien zur Migration in eine MySQL-Datenbank Markus Dienstknecht | 15.01.2016 Migration - Probleme • Records in falscher Zone • Nicht beachtete Recordtypen • TXT Records über mehrere Zeilen • CERT Records haben keinen Domain Namen Entwicklung eines Parser von BIND-Konfigurationsdateien zur Migration in eine MySQL-Datenbank Markus Dienstknecht | 15.01.2016 Migration - Optimierung • Single Mass Insert für Records Lokal speichern ID Zähler Validierungen vorher abfragen • Neuer Datenbankserver • Single Mass Insert Hostnamen und Zonen Komplizierte Umstellung wegen Validierungen Entwicklung eines Parser von BIND-Konfigurationsdateien zur Migration in eine MySQL-Datenbank Markus Dienstknecht | 15.01.2016 Ausblick Ausblick • DNS-Admin Rechtesystem Zugriff auf verschiedene Zonen und Recordtypen Bestätigen der Änderungen Entwicklung eines Parser von BIND-Konfigurationsdateien zur Migration in eine MySQL-Datenbank Markus Dienstknecht | 15.01.2016 Fazit Fazit • Parser wichtiger Bestandteil für Umstellung • Frontend für Nutzer • Hostmaster entlastet • Einfach erweiterbar • Neue Möglichkeiten Entwicklung eines Parser von BIND-Konfigurationsdateien zur Migration in eine MySQL-Datenbank Markus Dienstknecht | 15.01.2016 Vielen Dank für Ihre Aufmerksamkeit