PowerDNS unter Ubuntu

PowerDNS ist ein Open Source Projekt unter der GPLv2. Entwickelt wurde PowerDNS mit C++ und es unterstützt viele gängige Datenbanken wie MariaDB, MySQL, Oracle, PostgreSQL und mehr. In diesem kleinen „Tutorial“ möchte ich euch die Installation von PowerDNS unter Ubuntu 14.04 LTS Server zeigen. Allerdings sollte sich die Installation unter anderen Debian / Ubuntu Distributionen nur geringfügig unterscheiden.

Zu Beginn sollten wir zunächst dafür sorgen das unser Server gesichert ist (falls hier schon andere Dienste laufen oder wichtige Dateien darauf liegen) und eine Aktualisierung anstoßen.

sudo apt-get update && sudo apt-get upgrade -y

Nun sollten wir, falls nicht schon vorhanden, eine der unterstützten Datenbanken installieren und einrichten. In diesem Fall werde ich MySQL installieren.

sudo apt-get install mysql-server mysql-client

Weitere Hinweise zur Installation der jeweiligen Datenbanken, lassen sich schnell und einfach mit Google finden.

So, nun kommen wir zur Installation von PowerDNS. Beachtet beim folgenden Befehl das richtige Backend-Paket für eure Datenbank auszuwählen!

sudo apt-get install pdns-server pdns-backend-mysql

Nun sollten einige Dialoge zur Einrichtung der Datenbank folgen. Anschließend müssen wir die Datenbank und unseren Datenbank-Benutzer erstellen, falls dies nicht durch die Dialoge abgedeckt worden ist. Hier das Vorgehen für MySQL. Zunächst wechseln wir zum MySQL-Terminal:

sudo mysql -u root -p

Nun legen wir die Datenbank an:

CREATE DATABASE powerdns;

Jetzt noch den Benutzer anlegen und dessen Rechte festlegen (Passwort sollte entsprechend ersetzt werden!):

CREATE USER ‚powerdns’@’localhost‘ IDENTIFIED BY ‚your_password‚;
GRANT ALL ON powerdns.* TO ‚powerdns’@’localhost‘ IDENTIFIED BY ‚your_password‚;

Nun noch ein paar Befehle zum Abschluss und zur Datenbank wechseln.

FLUSH PRIVILEGES;
USE powerdns;

Jetzt müssen wir die Tabellen anlegen. Als erstes die „domains“-Tabelle.

CREATE TABLE domains (
id INT auto_increment,
name VARCHAR(255) NOT NULL,
master VARCHAR(128) DEFAULT NULL,
last_check INT DEFAULT NULL,
type VARCHAR(6) NOT NULL,
notified_serial INT DEFAULT NULL,
account VARCHAR(40) DEFAULT NULL,
primary key (id)
);

Nun noch den Unique-Index anlegen.

CREATE UNIQUE INDEX name_index ON domains(name);

Und weiter geht es mit der „record“-Tabelle.

CREATE TABLE records (
id INT auto_increment,
domain_id INT DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(6) DEFAULT NULL,
content VARCHAR(255) DEFAULT NULL,
ttl INT DEFAULT NULL,
prio INT DEFAULT NULL,
change_date INT DEFAULT NULL,
primary key(id)
);

Auch hier legen wir anschließend ein paar Indizes an.

CREATE INDEX rec_name_index ON records(name);
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);

Weiter geht es mit der „supermasters“-Tabelle.

CREATE TABLE supermasters (
ip VARCHAR(25) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) DEFAULT NULL
);

Nun können wir das MySQL-Terminal wieder verlassen.

quit;

Jetzt sollten wir uns der Konfiguration von PowerDNS annehmen. Zunächst einmal löschen wir die bestehende Konfiguration (oder verschieben diese).

sudo rm /etc/powerdns/pdns.d/*.*

Nun legen wir die Konfiguration für unsere Datenbank, in diesem Fall MySQL, wieder an.

sudo nano /etc/powerdns/pdns.d/pdns.local.gmysql.conf

Und fügen hier folgenden Inhalt ein (Daten entsprechend der vorherigen Schritte anpassen!):

# MySQL Configuration
#
# Launch gmysql backend
launch=gmysql

# gmysql parameters
gmysql-host=localhost
gmysql-dbname=powerdns
gmysql-user=powerdns
gmysql-password=your_password

Nun noch den PowerDNS Dienst neustarten und dann kann das Testen auch schon beginnen.

sudo service pdns restart

Testen können wir mit z.B. folgendem Befehl:

sudo dig @127.0.0.1

Die Ausgabe hierbei sollte so ähnlich aussehen wie folgende:

; <<>> DiG 9.9.5-3ubuntu0.2-Ubuntu <<>> @127.0.0.1
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 389
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 2800
;; QUESTION SECTION:
;.                              IN      NS

;; Query time: 2 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Jun 22 18:00:08 CEST 2015
;; MSG SIZE  rcvd: 29

Nun ist es evtl. an der Zeit eine Administrationsoberfläche wie PowerAdmin zu installieren – andernfalls muss das Administrieren über die Datenbank direkt erfolgen.