=====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://www.powerdns.com/content/home-powerdns.html| Power DNS]] gestoßen. Hier auch ein Beispiel mit PostgreSQL auf dem [[raspberry:pidora_power_dns|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 [[https://www.poweradmin.org/trac/|Poweradmin]] oder das [[https://github.com/kennethkalmer/powerdns-on-rails|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 => [[dba:install_rac_linux_12c|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.
* Oracle Linux als minimales System installieren, siehe => [[linux:linux_7_system_grundeinstellungen_oracle_datenbank_rac|Ein Oracle Linux 7 Basis System als Grundlagen für eine Oracle Clusterware und Datenbank Installation vorbereiten]]
* 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====
https://doc.powerdns.com/md/appendix/compiling-powerdns/
=== 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 [[prog:oracle_apex_install_windows_12c|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 [[dba:start_db_linux|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 ====
PowerDNS
* https://doc.powerdns.com/md/authoritative/backend-oracle/
* https://doc.powerdns.com/md/authoritative/domainmetadata/#allow-axfr-from