Benutzer-Werkzeuge

Webseiten-Werkzeuge


linux:power_dns

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 Power DNS gestoßen. Hier auch ein Beispiel mit PostgreSQL auf dem Raspberry PI als DNS Applicance für PowerDNS.

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 Poweradmin oder das powerdns-on-rails Projekt.

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://doc.powerdns.com/

Features:

  • Trennung von Authoritative Server und Recursor Server (für recursive Abfragen)
  • Webserver Interface für Monitoring (http://doc.powerdns.com/monitoring.html)
  • Datenhaltung in einer relationalen Datenbank

Benötigt wird das Ganze für eine Oracle Cluster Installation ⇒ Anmerkungen zu Installation des Oracle Real Application Cluster 12c R1 auf einem Oracle Linux 7


Installation des Primärer PowerDNS Nameserver mit einer Oracle Datenbank

Grundsystem aufsetzen

Als Linux kommt Oracle Linux in der Version 7.2 zum Einsatz.

  • DNS Tools installieren (DIG und nslookup) mit:
    yum install net-tools bind-utils
  • FW einrichten (HTTP/HTTPS und DNS + SSH freischalten) bzw FW deaktivieren
  • yum repostiory für PowerDNS Packete einrichten
    vi /etc/yum.repos.d/pdns-server.el7.repo
     
    [pdns-MIND]
    name=PowerDNS server packages for RHEL7 and friends.
    baseurl=https://www.monshouwer.eu/download/3rd_party/pdns/el7/$basearch/
    gpgcheck=0
    enabled=1
     
    #zusätzlich für protobuf lib
    rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
    rpm -Uvh https://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm
    rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm

PowerDNS aus Repository installieren

Nur zur Info - wir übersetzen das später selber!

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/Einstellungen notwendig

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:

CREATE USER "PDNS" DEFAULT TABLESPACE "USERS" TEMPORARY TABLESPACE "TEMP" ACCOUNT UNLOCK ;
 
-- QUOTAS
ALTER USER "PDNS" QUOTA UNLIMITED ON USERS;
 
-- ROLES
ALTER USER "PDNS" DEFAULT ROLE "CONNECT","RESOURCE";
 
-- Rights
GRANT EXECUTE ON DBMS_CRYPTO TO pdns;

PowerDNS aus dem Source übersetzen

Git installieren

yum install git

Boost + Abhängigkeiten für den Compile installieren

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:

cd /srv
 
git clone git://github.com/PowerDNS/pdns

Abhängigkeiten konfigurieren

cd pdns

./bootstrap

Configure:

export ORACLE_HOME=/opt/oracle/products/12.1.0.2/dbhome_1/
 
#Nur Oracle Modul
./configure --with-modules='oracle'  --without-lua

Übersetzen und installieren

make 
make install

Erster Test Aufruf

Testweise aufrufen ob die Libs auch gefunden werden:

#Umgebung setzen!
 
export ORACLE_HOME=/opt/oracle/products/12.1.0.2/dbhome_1/
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
 
pdns_server
 
Sep 28 19:17:33 Unable to open /usr/local/etc/pdns.conf
 
# an der Stelle ok, das müssen wir ja noch konfigurieren!

Tritt der Fehler pdns_server: error while loading shared libraries: libclntsh.so.12.1: cannot open shared object file: No such file or directory auf, ist der LD_LIBRARY_PATH nicht gesetzt!


Oracle Schema für PowerDNS anlegen

Ein Script „schema.oracle.sql“ um das Datenmodell anzulegen liegt unter „/modules/oraclebackend“.

cd /srv/pdns/modules/oraclebackend
 
 
$ORACLE_HOME/bin/sqlplus pdns/pdns@gpi
 
@schema.oracle.sql

Siehe auch https://doc.powerdns.com/md/authoritative/backend-oracle/

Daten hinterlegen

Für das Datumsformat die Epoch Linux Zeit mit „date +'%s'“ auslesen!

Ist das Modell komplett vorhanden, kann nun per SQL die ersten Domain angelegt werden:

 
INSERT INTO zones (ID,NAME,TYPE,LAST_CHECK,REFRESH,SERIAL,NOTIFIED_SERIAL) VALUES (zones_id_seq.nextval,'pipperr.local','MASTER',NULL,'28800','2000081401','1');
 
#Metadaten
INSERT INTO ZONEMETADATA (ZONE_ID,META_TYPE,META_IND,META_CONTENT) VALUES ('1','NSEC3PARAM','1',NULL);
INSERT INTO ZONEMETADATA (ZONE_ID,META_TYPE,META_IND,META_CONTENT) VALUES ('1','ALLOW-AXFR-FROM','1','AUTO-NS');
 
# Allow Dig TO grep the complete record FROM the LOCAL host FOR debug!
INSERT INTO ZONEMETADATA (ZONE_ID,META_TYPE,META_IND,META_CONTENT) VALUES ('1','ALLOW-AXFR-FROM','2','10.10.10.0/24');
 
commit;
 
# als erstes ist ein SOA Record notwendig!
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'1','pipperr.local',' ',' ','1440','SOA','ns1.pipperr.local. racdb01.pipperr.local. 2000081401 28800 7200 604800 86400','1475330688','1');
 
#DNS
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'1','ns1.pipperr.local',' ',' ','1440','A','10.10.10.100','1475330688','1');
 
#Rac Knoten 1
 
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'1','racdb01.pipperr.local','',' ','1440','A','10.10.10.190','1475330688','1');
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'1','racdb01-vip.pipperr.local',' ',' ','1440','A','10.10.10.192','1475330688','1');
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'1','racdb01-priv.pipperr.local',' ',' ','1440','A','10.1.1.190','1475330688','1');
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'1','racdb01-haip.pipperr.local',' ',' ','1440','A','10.1.1.191','1475330688','1');
 
#Rac Knoten 2
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'1','racdb02.pipperr.local',' ',' ','1440','A','10.10.10.196','1475330688','1');
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'1','racdb02-vip.pipperr.local',' ',' ','1440','A','10.10.10.192','1475330688','1');
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'1','racdb02-priv.pipperr.local',' ',' ','1440','A','10.1.1.194','1475330688','1');
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'1','racdb02-haip.pipperr.local',' ',' ','1440','A','10.1.1.195','1475330688','1');
 
#Scan Listener 
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'1','rac01cluster.pipperr.local',' ',' ','1440','A','10.10.10.200','1475330688','1');
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'1','rac01cluster.pipperr.local',' ',' ','1440','A','10.10.10.210','1475330688','1');
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'1','rac01cluster.pipperr.local',' ',' ','1440','A','10.10.10.220','1475330688','1');
 
#ISCSI Storage
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'1','storage01.pipperr.local',' ',' ','1440','A','10.10.10.180','1475330688','1');
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'1','storage02.pipperr.local',' ',' ','1440','A','10.10.10.182','1475330688','1');
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'1','nfsstorage01.pipperr.local',' ',' ','1440','A','10.10.10.110','1475330688','1');
 
 
commit;

siehe auch ⇒ https://doc.powerdns.com/md/authoritative/backend-oracle/ für die Erklärung des Modells.

Reverse Lookup hinterlegen:

INSERT INTO zones (ID,NAME,TYPE,LAST_CHECK,REFRESH,SERIAL,NOTIFIED_SERIAL) 
VALUES (zones_id_seq.nextval,'10.10.10.in-addr.arpa','MASTER',NULL,'28800','2000081401','1');
 
--Metadaten
INSERT INTO ZONEMETADATA (ZONE_ID,META_TYPE,META_IND,META_CONTENT) VALUES ('2','NSEC3PARAM','1',NULL);
INSERT INTO ZONEMETADATA (ZONE_ID,META_TYPE,META_IND,META_CONTENT) VALUES ('2','ALLOW-AXFR-FROM','1','AUTO-NS');
--Allow Dig TO grep the complete record FROM the LOCAL host FOR debug!
INSERT INTO ZONEMETADATA (ZONE_ID,META_TYPE,META_IND,META_CONTENT) VALUES ('2','ALLOW-AXFR-FROM','2','10.10.10.0/24');
 
commit;
 
#SOA und NS
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) 
VALUES (records_id_seq.nextval,'2','10.10.10.in-addr.arpa',' ',' ','1440','SOA','ns1.pipperr.local. pipperr.local. 2000081401 28800 7200 604800 86400','1475330688','1');
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) 
VALUES (records_id_seq.nextval,'2','10.10.10.in-addr.arpa',' ',' ','1440','NS','ns1.pipperr.local','1475330688','1');
commit;
 
 
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'2','100.10.10.10.in-addr.arpa',' ',' ','1440','PTR','ns1.pipperr.local','1475330688','1');
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'2','190.10.10.10.in-addr.arpa',' ',' ','1440','PTR','racdb02.pipperr.local','1475330688','1');
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'2','192.10.10.10.in-addr.arpa',' ',' ','1440','PTR','racdb01-vip.pipperr.local'  ,'1475330688','1');
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'2','196.10.10.10.in-addr.arpa',' ',' ','1440','PTR','racdb02.pipperr.local'      ,'1475330688','1');
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'2','192.10.10.10.in-addr.arpa',' ',' ','1440','PTR','racdb02-vip.pipperr.local'  ,'1475330688','1');
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'2','200.10.10.10.in-addr.arpa',' ',' ','1440','PTR','rac01cluster.pipperr.local' ,'1475330688','1');
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'2','210.10.10.10.in-addr.arpa',' ',' ','1440','PTR','rac01cluster.pipperr.local' ,'1475330688','1');	
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'2','220.10.10.10.in-addr.arpa',' ',' ','1440','PTR','rac01cluster.pipperr.local' ,'1475330688','1');	
 
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'2','180.10.10.10.in-addr.arpa',' ',' ','1440','PTR','storage01.pipperr.local','1475330688','1');
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'2','182.10.10.10.in-addr.arpa',' ',' ','1440','PTR','storage02.pipperr.local','1475330688','1');
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'2','110.10.10.10.in-addr.arpa',' ',' ','1440','PTR','nfsstorage01.pipperr.local','1475330688','1');
 
 
commit;
 
 
INSERT INTO zones (ID,NAME,TYPE,LAST_CHECK,REFRESH,SERIAL,NOTIFIED_SERIAL) 
VALUES (zones_id_seq.nextval,'1.1.10.in-addr.arpa','MASTER',NULL,'28800','2000081401','1');
 
--Metadaten
INSERT INTO ZONEMETADATA (ZONE_ID,META_TYPE,META_IND,META_CONTENT) VALUES ('3','NSEC3PARAM','1',NULL);
INSERT INTO ZONEMETADATA (ZONE_ID,META_TYPE,META_IND,META_CONTENT) VALUES ('3','ALLOW-AXFR-FROM','1','AUTO-NS');
--Allow Dig TO grep the complete record FROM the LOCAL host FOR debug!
INSERT INTO ZONEMETADATA (ZONE_ID,META_TYPE,META_IND,META_CONTENT) VALUES ('3','ALLOW-AXFR-FROM','2','10.10.10.0/24');
 
--SOA und NS
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) 
VALUES (records_id_seq.nextval,'3','1.1.10.in-addr.arpa',' ',' ','1440','SOA','ns1.pipperr.local. pipperr.local. 2000081401 28800 7200 604800 86400','1475330688','1');
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) 
VALUES (records_id_seq.nextval,'3','1.1.10.in-addr.arpa',' ',' ','1440','NS','ns1.pipperr.local','1475330688','1');
commit;
 
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'2','194.1.1.10.in-addr.arpa',' ',' ','1440','PTR','racdb02-priv.pipperr.local','1475330688','1');
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'2','190.1.1.10.in-addr.arpa',' ',' ','1440','PTR','racdb01-priv.pipperr.local','1475330688','1');
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'2','195.1.1.10.in-addr.arpa',' ',' ','1440','PTR','racdb02-haip.pipperr.local','1475330688','1');
INSERT INTO records (ID,ZONE_ID,FQDN,REVFQDN,FQDNHASH,TTL,TYPE,CONTENT,LAST_CHANGE,AUTH) VALUES (records_id_seq.nextval,'2','191.1.1.10.in-addr.arpa',' ',' ','1440','PTR','racdb01-haip.pipperr.local','1475330688','1');
 
commit;

PowerDNS konfigurieren

pdns.conf

Datei /etc/pdns/pdns.conf bearbeiten

ln -s /etc/pdns/pdns.conf /usr/local/etc/pdns.conf
 
vi /etc/pdns/pdns.conf
 
..
 
launch=oracle
 
oracle-home=/opt/oracle/products/12.1.0.2/dbhome_1
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
 
 
..

Problem:

Sep 28 20:46:08 OracleFactory: OCIEnvCreate
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 /etc/pdns/pdns.conf

recursor=212.114.152.1

Monitoring einrichten

siehe http://doc.powerdns.com/monitoring.html Datei /etc/pdns/pdns.conf

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:

host -l pipperr.local  | sort
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
 
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.3 <<>> @10.10.10.100 -tAXFR pipperr.local
; (1 server found)
;; global options: +cmd
pipperr.local.          1440    IN      SOA     ns1.pipperr.local. pipperr.local. 2000081401 28800 7200 604800 86400
ns1.pipperr.local.      1440    IN      A       10.10.10.100
rac01cluster.pipperr.local. 1440 IN     A       10.10.10.200
...
racdb02-priv.pipperr.local. 1440 IN     A       10.1.1.194
racdb02-vip.pipperr.local. 1440 IN      A       10.10.10.192
racdb02.pipperr.local.  1440    IN      A       10.10.10.196
pipperr.local.          1440    IN      SOA     ns1.pipperr.local. pipperr.local. 2000081401 28800 7200 604800 86400
;; Query time: 25 msec
;; SERVER: 10.10.10.100#53(10.10.10.100)
;; WHEN: Sat Oct 01 18:05:40 CEST 2016
;; XFR size: 14 records (messages 3, bytes 507)

Falls „; Transfer failed.“ muss folgender Eintrag in der Tabelle ZONEMETADATA existieren, damit das auch erlaubt ist!„

#Nur ein Host
INSERT INTO ZONEMETADATA (ZONE_ID,META_TYPE,META_IND,META_CONTENT) VALUES ('1','ALLOW-AXFR-FROM','2','10.10.10.100');
 
#Ein Ganzes Netz
INSERT INTO ZONEMETADATA (ZONE_ID,META_TYPE,META_IND,META_CONTENT) VALUES ('1','ALLOW-AXFR-FROM','2','10.10.10.0/24');

Reverse Einträge testen:

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://nameserver_ip:8081/ die Monitoring Oberfläche aufgerufen werden.

API verwenden

siehe https://doc.powerdns.com/md/httpapi/README/

JQuery tool installieren:

yum install jq

Conf anpassen in /etc/pdns/pdns.conf:

## API
api=yes
api-key=pipperrdns

Abfragen:

curl -H 'X-API-Key: pipperrdns' http://10.10.10.100:8081/api/v1/servers/localhost/zones/pipperr.local | jq

Leider unterstützt das Oracle Backend nur Abfragen, anlegen ist nicht möglich .-( .


Apex Admin Oberfläche einrichten

Apex mit Tomcat aufsetzen ähnlich wie Oracle Apex 5.0.4 mit der Oracle Datenbank 12c - Installation

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 Datenbank unter Linux 6 und Linux 7 automatisch starten

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 /etc/default/pdns anlegen als root:

vi /etc/default/pdns
 
ORACLE_HOME="/opt/oracle/product/12.1.0.2/dbhome_1"
export ORACLE_HOME
LD_LIBRARY_PATH=$ORACLE_HOME/lib
export LD_LIBRARY_PATH
Start Script anlegen

User root

vi /srv/startStopPDNS.sh
 
#!/bin/sh
 
# edit the oracle home and user to your needs
. /etc/default/pdns
 
 
##############################
# PowerDNS starten oder Stoppen
 
case "$1" in
    start)
        # wait for the DB to be ready
        sleep 100
        /usr/local/sbin/pdns_server &
        echo "OK"
        ;;
    stop)
        /usr/local/bin/pdns_control quit
        echo "OK"
        ;;
    reload|restart)
        $0 stop
        $0 start
        ;;
    *)
        echo "Usage: $0 start|stop|restart|reload"
        exit 1
esac
exit 0
Service anlegen

User root

Datei “/lib/systemd/system/pdns.service„ anlegen:

vi /lib/systemd/system/pdns.service
 
[Unit]
Description=PowerDNS Service
After=syslog.target network.target dbora.service
 
[Service]
Type=simple
RemainAfterExit=yes
ExecStart=/srv/startStopPDNS.sh start 
ExecStop=/srv/startStopPDNS.sh stop
 
[Install]
WantedBy=multi-user.target

Link anlegen:

 ln -s /lib/systemd/system/pdns.service /etc/systemd/system/pdns.service

Reload systemd

systemctl daemon-reload

Starten und einschalten des Service:

#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:

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

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
"Autor: Gunther Pipperr"
linux/power_dns.txt · Zuletzt geändert: 2016/10/02 15:30 von gpipperr