linux:power_dns
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
linux:power_dns [2016/10/02 15:05] – gpipperr | linux:power_dns [2016/10/02 15:30] (aktuell) – [PowerDNS 4.x - Ein Alternative für BIND - Mit einer Oracle Datenbank im Backend einsetzen] gpipperr | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | =====PowerDNS 4.x - Die Alternative für BIND - Mit einer Oracle Datenbank im Backend einsetzen===== | ||
+ | |||
+ | Auf der Suche nach einer Benutzeroberfläche für einen Name Server bin ich schon vor längeren auf DNS Server [[http:// | ||
+ | |||
+ | |||
+ | Die Besonderheit diese DNS Servers ist das Speichern der DNS Konfiguration in einem relationalen Datendaten Modell. | ||
+ | |||
+ | Für die Datenhaltung kommen verschieden relationale Datenbank in Frage, wie Oracle, PostgreSQL und MySQL. | ||
+ | |||
+ | Aufgrund der Datenhaltung in einer Datenbank ist das Erstellen einer Konfigurationsoberfläche dann relativ einfach. | ||
+ | |||
+ | Es gibt im Netz mehrere Varianten wie [[https:// | ||
+ | |||
+ | Ziel ist es hier Oracle APEX später für die Verwaltung der DNS Einträge zu verwenden. | ||
+ | |||
+ | Die Anleitung für PowerDNS unter: http:// | ||
+ | |||
+ | Features: | ||
+ | |||
+ | * Trennung von Authoritative Server und Recursor Server (für recursive Abfragen) | ||
+ | * Webserver Interface für Monitoring (http:// | ||
+ | * Datenhaltung in einer relationalen Datenbank | ||
+ | |||
+ | |||
+ | Benötigt wird das Ganze für eine Oracle Cluster Installation | ||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | ==== Installation des Primärer PowerDNS Nameserver mit einer Oracle Datenbank==== | ||
+ | |||
+ | ====Grundsystem aufsetzen==== | ||
+ | |||
+ | Als Linux kommt Oracle Linux in der Version 7.2 zum Einsatz. | ||
+ | |||
+ | * Oracle Linux als minimales System installieren, | ||
+ | * DNS Tools installieren (DIG und nslookup) mit:< | ||
+ | * FW einrichten (HTTP/HTTPS und DNS + SSH freischalten) bzw FW deaktivieren | ||
+ | * yum repostiory für PowerDNS Packete einrichten <code bash> | ||
+ | vi / | ||
+ | |||
+ | [pdns-MIND] | ||
+ | name=PowerDNS server packages for RHEL7 and friends. | ||
+ | baseurl=https:// | ||
+ | gpgcheck=0 | ||
+ | enabled=1 | ||
+ | |||
+ | # | ||
+ | rpm --import https:// | ||
+ | rpm -Uvh https:// | ||
+ | rpm -Uvh http:// | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ===PowerDNS aus Repository installieren=== | ||
+ | |||
+ | |||
+ | Nur zur Info - wir übersetzen das später selber! | ||
+ | |||
+ | <code bash> | ||
+ | yum install protobuf-lite pdns pdns-tools | ||
+ | </ | ||
+ | |||
+ | |||
+ | Leider gibt es das Oracle Backend zum installieren als RPM nicht, hier muss nun PowerDNS direkt dem Source Code aufgesetzt werden. | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ====Oracle Datenbank Software 12c installieren und eine Datenbank anlegen==== | ||
+ | |||
+ | Eine normale Standard Edition wird als kleine Datenbank auf dem System unter dem User Oracle angelegt. | ||
+ | |||
+ | Backup anlegen etc. | ||
+ | |||
+ | Alles Default, Installation wie immer, keine besonderen Funktionen/ | ||
+ | |||
+ | Die Installation muss vor dem Übersetzen des Sourcecodes erfolgen, damit beim Übersetzen die notwendigen OCI Libraries gefunden werden können! | ||
+ | |||
+ | |||
+ | |||
+ | ===User pdns auf der DB anlegen=== | ||
+ | |||
+ | User pdns auf der Datenbank anlegen: | ||
+ | <code sql> | ||
+ | Create USER " | ||
+ | |||
+ | -- QUOTAS | ||
+ | ALTER USER " | ||
+ | |||
+ | -- ROLES | ||
+ | ALTER USER " | ||
+ | |||
+ | -- Rights | ||
+ | grant execute on DBMS_CRYPTO to pdns; | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | |||
+ | ==== PowerDNS aus dem Source übersetzen==== | ||
+ | |||
+ | https:// | ||
+ | |||
+ | |||
+ | === Git installieren === | ||
+ | <code bash> | ||
+ | yum install git | ||
+ | </ | ||
+ | |||
+ | === Boost + Abhängigkeiten für den Compile installieren === | ||
+ | |||
+ | <code bash> | ||
+ | yum install boost | ||
+ | yum install boost-devel | ||
+ | yum install autoconf | ||
+ | yum install automake | ||
+ | yum install libtool | ||
+ | yum install bison | ||
+ | yum install flex | ||
+ | yum install openssl-devel | ||
+ | yum install ragel | ||
+ | </ | ||
+ | |||
+ | === Auschecken === | ||
+ | |||
+ | Sourcecode von Git laden: | ||
+ | <code bash> | ||
+ | cd /srv | ||
+ | |||
+ | git clone git:// | ||
+ | </ | ||
+ | |||
+ | Abhängigkeiten konfigurieren | ||
+ | < | ||
+ | cd pdns | ||
+ | |||
+ | ./bootstrap | ||
+ | |||
+ | </ | ||
+ | |||
+ | Configure: | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | export ORACLE_HOME=/ | ||
+ | |||
+ | #Nur Oracle Modul | ||
+ | ./configure --with-modules=' | ||
+ | |||
+ | </ | ||
+ | |||
+ | Übersetzen und installieren | ||
+ | <code bash> | ||
+ | make | ||
+ | make install | ||
+ | </ | ||
+ | |||
+ | |||
+ | === Erster Test Aufruf === | ||
+ | Testweise aufrufen ob die Libs auch gefunden werden: | ||
+ | <code bash> | ||
+ | |||
+ | #Umgebung setzen! | ||
+ | |||
+ | export ORACLE_HOME=/ | ||
+ | export LD_LIBRARY_PATH=$ORACLE_HOME/ | ||
+ | |||
+ | pdns_server | ||
+ | |||
+ | Sep 28 19:17:33 Unable to open / | ||
+ | |||
+ | # an der Stelle ok, das müssen wir ja noch konfigurieren! | ||
+ | |||
+ | </ | ||
+ | |||
+ | Tritt der Fehler <fc # | ||
+ | |||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | |||
+ | ==== Oracle Schema für PowerDNS anlegen ==== | ||
+ | |||
+ | Ein Script " | ||
+ | |||
+ | |||
+ | |||
+ | <code bash> | ||
+ | cd / | ||
+ | |||
+ | |||
+ | $ORACLE_HOME/ | ||
+ | |||
+ | @schema.oracle.sql | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | Siehe auch https:// | ||
+ | |||
+ | === Daten hinterlegen=== | ||
+ | |||
+ | |||
+ | Für das Datumsformat die Epoch Linux Zeit mit "date +' | ||
+ | |||
+ | |||
+ | Ist das Modell komplett vorhanden, kann nun per SQL die ersten Domain angelegt werden: | ||
+ | <code sql> | ||
+ | |||
+ | |||
+ | Insert into zones (ID, | ||
+ | |||
+ | #Metadaten | ||
+ | Insert into ZONEMETADATA (ZONE_ID, | ||
+ | Insert into ZONEMETADATA (ZONE_ID, | ||
+ | |||
+ | # Allow Dig to grep the complete record from the local host for debug! | ||
+ | Insert into ZONEMETADATA (ZONE_ID, | ||
+ | |||
+ | commit; | ||
+ | |||
+ | # als erstes ist ein SOA Record notwendig! | ||
+ | Insert into records (ID, | ||
+ | |||
+ | #DNS | ||
+ | Insert into records (ID, | ||
+ | |||
+ | #Rac Knoten 1 | ||
+ | |||
+ | Insert into records (ID, | ||
+ | Insert into records (ID, | ||
+ | Insert into records (ID, | ||
+ | Insert into records (ID, | ||
+ | |||
+ | #Rac Knoten 2 | ||
+ | Insert into records (ID, | ||
+ | Insert into records (ID, | ||
+ | Insert into records (ID, | ||
+ | Insert into records (ID, | ||
+ | |||
+ | #Scan Listener | ||
+ | Insert into records (ID, | ||
+ | Insert into records (ID, | ||
+ | Insert into records (ID, | ||
+ | |||
+ | #ISCSI Storage | ||
+ | INSERT INTO records (ID, | ||
+ | INSERT INTO records (ID, | ||
+ | INSERT INTO records (ID, | ||
+ | |||
+ | |||
+ | commit; | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | siehe auch => https:// | ||
+ | |||
+ | |||
+ | Reverse Lookup hinterlegen: | ||
+ | <code sql> | ||
+ | INSERT INTO zones (ID, | ||
+ | VALUES (zones_id_seq.nextval,' | ||
+ | |||
+ | --Metadaten | ||
+ | INSERT INTO ZONEMETADATA (ZONE_ID, | ||
+ | INSERT INTO ZONEMETADATA (ZONE_ID, | ||
+ | --Allow Dig TO grep the complete record FROM the LOCAL host FOR debug! | ||
+ | INSERT INTO ZONEMETADATA (ZONE_ID, | ||
+ | |||
+ | commit; | ||
+ | |||
+ | #SOA und NS | ||
+ | INSERT INTO records (ID, | ||
+ | VALUES (records_id_seq.nextval,' | ||
+ | INSERT INTO records (ID, | ||
+ | VALUES (records_id_seq.nextval,' | ||
+ | commit; | ||
+ | |||
+ | |||
+ | Insert into records (ID, | ||
+ | Insert into records (ID, | ||
+ | Insert into records (ID, | ||
+ | Insert into records (ID, | ||
+ | Insert into records (ID, | ||
+ | Insert into records (ID, | ||
+ | Insert into records (ID, | ||
+ | Insert into records (ID, | ||
+ | |||
+ | INSERT INTO records (ID, | ||
+ | INSERT INTO records (ID, | ||
+ | INSERT INTO records (ID, | ||
+ | |||
+ | |||
+ | commit; | ||
+ | |||
+ | |||
+ | INSERT INTO zones (ID, | ||
+ | VALUES (zones_id_seq.nextval,' | ||
+ | |||
+ | --Metadaten | ||
+ | INSERT INTO ZONEMETADATA (ZONE_ID, | ||
+ | INSERT INTO ZONEMETADATA (ZONE_ID, | ||
+ | --Allow Dig TO grep the complete record FROM the LOCAL host FOR debug! | ||
+ | INSERT INTO ZONEMETADATA (ZONE_ID, | ||
+ | |||
+ | --SOA und NS | ||
+ | INSERT INTO records (ID, | ||
+ | VALUES (records_id_seq.nextval,' | ||
+ | INSERT INTO records (ID, | ||
+ | VALUES (records_id_seq.nextval,' | ||
+ | commit; | ||
+ | |||
+ | INSERT INTO records (ID, | ||
+ | INSERT INTO records (ID, | ||
+ | INSERT INTO records (ID, | ||
+ | INSERT INTO records (ID, | ||
+ | |||
+ | commit; | ||
+ | |||
+ | |||
+ | </ | ||
+ | ---- | ||
+ | |||
+ | ==== PowerDNS konfigurieren ==== | ||
+ | |||
+ | ===pdns.conf === | ||
+ | |||
+ | |||
+ | Datei / | ||
+ | <code bash > | ||
+ | |||
+ | ln -s / | ||
+ | |||
+ | vi / | ||
+ | |||
+ | .. | ||
+ | |||
+ | launch=oracle | ||
+ | |||
+ | oracle-home=/ | ||
+ | oracle-sid=GPIDB | ||
+ | |||
+ | oracle-master-database=GPI | ||
+ | oracle-master-username=pdns | ||
+ | oracle-master-password=pdns | ||
+ | |||
+ | oracle-pool-database=GPI | ||
+ | oracle-pool-username=pdns | ||
+ | oracle-pool-password=pdns | ||
+ | |||
+ | oracle-session-min=2 | ||
+ | oracle-session-max=10 | ||
+ | oracle-session-inc=1 | ||
+ | |||
+ | oracle-nameserver-name=pdns_pipperr_local | ||
+ | |||
+ | |||
+ | .. | ||
+ | </ | ||
+ | |||
+ | <fc # | ||
+ | Sep 28 20:46:08 OracleFactory: | ||
+ | Sep 28 20:46:08 Caught an exception instantiating a backend: OCIEnvCreate | ||
+ | Sep 28 20:46:08 Cleaning up | ||
+ | </ | ||
+ | |||
+ | Bin verwirrt! | ||
+ | |||
+ | Erst nach dem Eintrag der Parameter oracle-home und oracle-sid bin ich nun weiter gekommen! | ||
+ | Das hieße aber das die DB nicht über TNS erreichbar ist und die DB Local auf dem gleichen Server liegen muss! | ||
+ | |||
+ | |||
+ | |||
+ | === DNS Forwarding einrichten === | ||
+ | |||
+ | Datei / | ||
+ | <code bash> | ||
+ | recursor=212.114.152.1 | ||
+ | </ | ||
+ | |||
+ | === Monitoring einrichten === | ||
+ | siehe http:// | ||
+ | Datei / | ||
+ | <code bash> | ||
+ | webserver=yes | ||
+ | webserver-address=10.10.10.100 | ||
+ | webserver-password=powerdns1234 | ||
+ | webserver-port=8081 | ||
+ | |||
+ | # Nur in Testumgebungen | ||
+ | webserver-print-arguments=yes | ||
+ | |||
+ | </ | ||
+ | |||
+ | webserver-print-arguments nur in Test Umgebungen verwenden! Alle Parameter inkl. Passwort werden angezeigt! | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | ==== DNS testen ==== | ||
+ | |||
+ | Abfragen mit mit "host -l" oder dig: | ||
+ | |||
+ | <code bash> | ||
+ | host -l pipperr.local | ||
+ | ns1.pipperr.local has address 10.10.10.100 | ||
+ | rac01cluster.pipperr.local has address 10.10.10.200 | ||
+ | ..... | ||
+ | racdb02-priv.pipperr.local has address 10.1.1.194 | ||
+ | racdb02-vip.pipperr.local has address 10.10.10.192 | ||
+ | |||
+ | dig @10.10.10.100 -tAXFR pipperr.local | ||
+ | |||
+ | ; <<>> | ||
+ | ; (1 server found) | ||
+ | ;; global options: +cmd | ||
+ | pipperr.local. | ||
+ | ns1.pipperr.local. | ||
+ | rac01cluster.pipperr.local. 1440 IN | ||
+ | ... | ||
+ | racdb02-priv.pipperr.local. 1440 IN | ||
+ | racdb02-vip.pipperr.local. 1440 IN A | ||
+ | racdb02.pipperr.local. | ||
+ | pipperr.local. | ||
+ | ;; Query time: 25 msec | ||
+ | ;; SERVER: 10.10.10.100# | ||
+ | ;; WHEN: Sat Oct 01 18:05:40 CEST 2016 | ||
+ | ;; XFR size: 14 records (messages 3, bytes 507) | ||
+ | |||
+ | </ | ||
+ | |||
+ | Falls <fc # | ||
+ | <code sql> | ||
+ | #Nur ein Host | ||
+ | Insert into ZONEMETADATA (ZONE_ID, | ||
+ | |||
+ | #Ein Ganzes Netz | ||
+ | Insert into ZONEMETADATA (ZONE_ID, | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | Reverse Einträge testen: | ||
+ | <code bash> | ||
+ | |||
+ | dig -x 10.10.10.190 | ||
+ | |||
+ | |||
+ | dig @10.10.10.100 -tAXFR 10.10.10.in-addr.arpa | ||
+ | |||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ====PDNS Service überwachen ==== | ||
+ | |||
+ | Ist der Webserver aktiviert kann über die URL: http:// | ||
+ | |||
+ | ===API verwenden=== | ||
+ | |||
+ | |||
+ | siehe https:// | ||
+ | |||
+ | JQuery tool installieren: | ||
+ | <code bash> | ||
+ | yum install jq | ||
+ | </ | ||
+ | |||
+ | Conf anpassen in / | ||
+ | <code bash> | ||
+ | ## API | ||
+ | api=yes | ||
+ | api-key=pipperrdns | ||
+ | |||
+ | </ | ||
+ | |||
+ | Abfragen: | ||
+ | |||
+ | <code bash> | ||
+ | curl -H ' | ||
+ | |||
+ | </ | ||
+ | Leider unterstützt das Oracle Backend nur Abfragen, anlegen ist nicht möglich .-( . | ||
+ | |||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ====Apex Admin Oberfläche einrichten==== | ||
+ | |||
+ | |||
+ | Apex mit Tomcat aufsetzen ähnlich wie [[prog: | ||
+ | |||
+ | Und nun kann die Entwicklung einer APEX Admin Oberfläche beginnen . | ||
+ | |||
+ | Wird wohl aber noch etwas dauern .-) . | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | ==== Autostart aller Komponenten einrichten ==== | ||
+ | |||
+ | In folgender Reihenfolge müssen nun die beteiligten Services starten: | ||
+ | |||
+ | * Oracle Listener | ||
+ | * Oracle Datenbank | ||
+ | * PowerDNS Server | ||
+ | |||
+ | |||
+ | D.h. es muss ein Autostart mit Abhängigkeiten angelegt werden. | ||
+ | |||
+ | === DB Auto Start=== | ||
+ | |||
+ | Für die Datenbank siehe als erstes [[dba: | ||
+ | |||
+ | Nach dem die DB erfolgreich nach einem Reboot wieder automatisch starten nun das Startscript für PDNS anlegen. | ||
+ | |||
+ | |||
+ | === PDNS Autostart === | ||
+ | |||
+ | |||
+ | Und es müssen die Oracle Parameter ORACLE_HOME und LD_LIBRARY_PATCH bei Start von PDNS gesetzt werden! | ||
+ | |||
+ | Datei / | ||
+ | |||
+ | <code bash> | ||
+ | vi / | ||
+ | |||
+ | ORACLE_HOME="/ | ||
+ | export ORACLE_HOME | ||
+ | LD_LIBRARY_PATH=$ORACLE_HOME/ | ||
+ | export LD_LIBRARY_PATH | ||
+ | </ | ||
+ | |||
+ | ==Start Script anlegen== | ||
+ | **User root** | ||
+ | |||
+ | <code bash> | ||
+ | vi / | ||
+ | |||
+ | #!/bin/sh | ||
+ | |||
+ | # edit the oracle home and user to your needs | ||
+ | . / | ||
+ | |||
+ | |||
+ | ############################## | ||
+ | # PowerDNS starten oder Stoppen | ||
+ | |||
+ | case " | ||
+ | start) | ||
+ | # wait for the DB to be ready | ||
+ | sleep 100 | ||
+ | / | ||
+ | echo " | ||
+ | ;; | ||
+ | stop) | ||
+ | / | ||
+ | echo " | ||
+ | ;; | ||
+ | reload|restart) | ||
+ | $0 stop | ||
+ | $0 start | ||
+ | ;; | ||
+ | *) | ||
+ | echo " | ||
+ | exit 1 | ||
+ | esac | ||
+ | exit 0 | ||
+ | |||
+ | </ | ||
+ | |||
+ | == Service anlegen == | ||
+ | **User root** | ||
+ | |||
+ | Datei "/ | ||
+ | <code bash> | ||
+ | |||
+ | vi / | ||
+ | |||
+ | [Unit] | ||
+ | Description=PowerDNS Service | ||
+ | After=syslog.target network.target dbora.service | ||
+ | |||
+ | [Service] | ||
+ | Type=simple | ||
+ | RemainAfterExit=yes | ||
+ | ExecStart=/ | ||
+ | ExecStop=/ | ||
+ | |||
+ | [Install] | ||
+ | WantedBy=multi-user.target | ||
+ | </ | ||
+ | |||
+ | |||
+ | Link anlegen: | ||
+ | |||
+ | <code bash> | ||
+ | ln -s / | ||
+ | </ | ||
+ | |||
+ | Reload systemd | ||
+ | <code bash> | ||
+ | systemctl daemon-reload | ||
+ | </ | ||
+ | |||
+ | |||
+ | Starten und einschalten des Service: | ||
+ | <code bash> | ||
+ | #Starten | ||
+ | systemctl start pdns.service | ||
+ | |||
+ | #Auto Start aktivieren | ||
+ | systemctl enable pdns.service | ||
+ | |||
+ | #Status prüfen | ||
+ | |||
+ | systemctl status pdns.service -l | ||
+ | |||
+ | |||
+ | #Stoppen | ||
+ | |||
+ | systemctl stop pdns.service | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | prüfen ob die Reichenfolge auch passt: | ||
+ | <code bash> | ||
+ | systemd-analyze critical-chain pdns.service | ||
+ | |||
+ | pdns.service @6min 53.596s | ||
+ | └─dbora.service @6.873s | ||
+ | └─network.target @6.872s | ||
+ | └─network.service @6.568s +303ms | ||
+ | └─NetworkManager.service @642ms +130ms | ||
+ | |||
+ | ... | ||
+ | </ | ||
+ | |||
+ | Nun mit einem Reboot testen ob alles klappt! | ||
+ | |||
+ | |||
+ | Nun gleich eine Sicherung von der Maschine anlegen .-)! | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | ==== Quellen ==== | ||
+ | |||
+ | |||
+ | PowerDNS | ||
+ | |||
+ | * https:// | ||
+ | * https:// | ||
linux/power_dns.txt · Zuletzt geändert: 2016/10/02 15:30 von gpipperr