Inhaltsverzeichnis
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.
- Oracle Linux als minimales System installieren, siehe ⇒ 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
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 .-)!