# Installation und Einrichtung


  1. Installation benötigter Software
  2. Installation von PowerDNS
  3. Konfiguration von PowerDNS

# Installation benötigter Software

Zunächst installieren wir den MariaDB-Datenbank Server und richten diesen ein. Bei der Abfrage, ob wir auf den Unix-Socket für die Authentifizierung umstellen wollen, geben wir ein n ein, um dies nicht zu aktivieren. ALle weiteren Fragen können mir y beantwortet werden. Die Installation starten wir mit dem folgenden Befehl.

apt install mariadb-server mariadb-client -y && mysql_secure_installation

Im nächsten Schritt hinterlegen wir in der Konfiguration des MariaDB-Servers einige Zeilen.

printf "# InnoDB
innodb_log_file_size = 64M
default-storage-engine=INNODB
innodb_buffer_pool_size=1G
innodb_buffer_pool_instances = 2
innodb_autoinc_lock_mode = 2
innodb_doublewrite = 1
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 2
innodb_lock_wait_timeout = 60
innodb_locks_unsafe_for_binlog = 1
innodb_stats_on_metadata = 0
transaction-isolation=READ-COMMITTED" >> /etc/mysql/mariadb.conf.d/50-server.cnf

Danach starten wir den MariaDB-Server neu. Dies ist der letzte Schritt für die Einrichtung des MariaDB-Servers.

service mysql restart

# Installation von PowerDNS

Für die Installation von PowerDNS benötigen wir das Packet curl und gnupg2.

apt install curl gnupg2 -y

Um die neueste Version des PowerDNS Authoritativen Server hinterlegen wir das Repository von PowerDNS und passen die Konfiguration von dem APT-Packetmanager an. Damit werden alle Packete welche mit pdns- beginnen vom Repository von den PowerDNS-Entwicklern.

echo "deb [arch=amd64] http://repo.powerdns.com/debian bullseye-auth-46 main" >> /etc/apt/sources.list
printf "Package: pdns-*
Pin: origin repo.powerdns.com
Pin-Priority: 600" > /etc/apt/preferences.d/pdns

Damit wir das Repository nutzen können muss der PublicKey hinterlegt werden.

curl https://repo.powerdns.com/FD380FBB-pub.asc | sudo apt-key add -

Jetzt kann der PowerDNS-Server mit dem MySQL-Backend installiert werden.

apt-get update && apt-get install pdns-server pdns-backend-mysql -y


# Konfiguration von PowerDNS

Nun wird ein MariaDB-User sowie eine Datenbank erstellt.

create database powerdns;
grant all on powerdns.* to 'pdns'@'localhost' identified by 'secret';
flush privileges;
exit;

Danach wird das Datenbank-Schema von Github runtergeladen und in die Datenbank importiert.

Download the SQL-Dump of PowerDNS and import this

wget https://raw.githubusercontent.com/PowerDNS/pdns/master/modules/gmysqlbackend/schema.mysql.sql
mysql -u root -p powerdns < schema.mysql.sql

Danach werden alle Standard-Konfigurationen gelöscht und die Konfiguration für die Verbindung zu MariaDB angelegt

rm /etc/powerdns/pdns.d/*
rm /etc/powerdns/pdns.conf
printf "# MariaDB Configuration file

launch=gmysql

gmysql-host=localhost
gmysql-dbname=powerdns
gmysql-user=pdns
gmysql-password=secret">/etc/powerdns/pdns.d/pdns.local.gmysql.conf

# Master-DNS-Server

Da im Schritt zuvor die Standard-Konfiguration gelöscht wurde müssen wir diese in der Datei /etc/powerdns/pdns.conf neu anlegen. Hierbei handelt es sich um eine minimal Konfiguration mit den wichtigsten Funktionen.

#################################
# allow-axfr-ips        Allow zonetransfers only to these subnets
#
allow-axfr-ips=127.0.0.0/8,::1, SLAVE-IP

#################################
# disable-axfr  Disable zonetransfers but do allow TCP queries
#
disable-axfr=no

#################################
# include-dir   Include *.conf files from this directory
#
# include-dir=
include-dir=/etc/powerdns/pdns.d

#################################
# launch        Which backends to launch and order to query them in
#
# launch=
launch=

#################################
# master        Act as a primary
#
master=yes

#################################
# primary       Act as a primary
#
primary=yes

#################################
# secondary     Act as a secondary
#
secondary=yes

#################################
# version-string        PowerDNS version in packets - full, anonymous, powerdns or custom
#
version-string=anonymous

#################################
# xfr-cycle-interval    Schedule primary/secondary SOA freshness checks once every .. seconds
#
xfr-cycle-interval=20

Da wir gerade die Konfiguration des PowerDNS-Servers geändert haben müssen wir diesen nun neustarten.

systemctl restart pdns

Damit ist die Einrichtung des Master-DNS-Servers abgeschlossen und dieser kann verwendet werden.


# Slave-DNS-Server

Da im Schritt zuvor die Standard-Konfiguration gelöscht wurde müssen wir diese in der Datei /etc/powerdns/pdns.conf neu anlegen. Hierbei handelt es sich um eine minimal Konfiguration mit den wichtigsten Funktionen.

#################################
# allow-dnsupdate-from  A global setting to allow DNS updates from these IP ranges.
#
allow-dnsupdate-from=127.0.0.0/8,::1, MASTER-IP

#################################
# allow-notify-from     Allow AXFR NOTIFY from these IP ranges. If empty, drop all incoming notifies.
#
allow-notify-from=0.0.0.0/0,::/0

#################################
# autosecondary Act as an autosecondary (formerly superslave)
#
autosecondary=yes

#################################
# disable-axfr  Disable zonetransfers but do allow TCP queries
#
disable-axfr=yes

#################################
# include-dir   Include *.conf files from this directory
#
# include-dir=
include-dir=/etc/powerdns/pdns.d

#################################
# launch        Which backends to launch and order to query them in
#
# launch=
launch=

#################################
# primary       Act as a primary
#
primary=no

#################################
# secondary     Act as a secondary
#
secondary=yes

#################################
# version-string        PowerDNS version in packets - full, anonymous, powerdns or custom
#
version-string=anonymous

#################################
# xfr-cycle-interval    Schedule primary/secondary SOA freshness checks once every .. seconds
#
xfr-cycle-interval=20

Zusätzlich zum erstellen der Konfiguration muss der Master-DNS-Server in der Datenbank hinterlegt werden. Hier muss MASTER-IP mit der IP-Adresse des Master-DNS-Servers ausgetaucht werden und MASTER-DOMAIN mit dem DNS-Namen des Master-DNS-Servers.

insert into powerdns.supermasters (ip, nameserver, account) VALUES ('MASTER-IP', 'MASTER-DOMAIN', 'admin');

Da wir gerade die Konfiguration des PowerDNS-Servers geändert haben müssen wir diesen nun neustarten.

systemctl restart pdns

Damit ist die Einrichtung des Slave-DNS-Servers abgeschlossen und dieser kann verwendet werden.