PowerDNS Master/Slave unter Debian 7 (Wheezy) einrichten

Ein eigener Nameserver ist ein weiterer Schritt zur Unabhängigkeit. Mit PowerDNS ist dies sehr schnell und einfach umzusetzen. Für die Redundanz benötigen wir zwei Debian 7 Server mit unterschiedlichen IP-Adressen.

Auf die Frage: „Wie richte ich meine Nameserver Domain ein?“, bitte ich den jeweiligen Domain Name Registrar zum Thema Glue Records zu befragen.

Beispiel:
ns1.example.com -> 192.168.1.10 (Node 1)
ns2.example.com -> 192.168.2.10 (Node 2)

Punkt 1: PowerDNS Pakete installieren (Node 1)

Zuerst installieren wir die nötigen PowerDNS Pakete auf der Master Node 1. Ich gehe davon aus, dass bereits ein funktionierende MySQL-Server installiert ist.

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

Punkt 2: MysSQL Datenbank und Benutzer anlegen

Öffne die MySQL Shell und erstelle die Datenbank inklusive einem Benutzer mit allen Rechten, bitte ersetze DEIN_PASSWORT.

mysql -u root -p
CREATE DATABASE powerdns character set utf8;
GRANT ALL ON powerdns.* TO 'poweradmin'@'localhost' IDENTIFIED BY 'DEIN_PASSWORT';
FLUSH PRIVILEGES;

Punkt 3: Tabellenstruktur erstellen

In der noch offenen MySQL Shell erstellen wir die Tabellenstruktur.

USE powerdns;

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)
);
CREATE UNIQUE INDEX name_index ON domains(name);
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)
);
CREATE INDEX rec_name_index ON records(name);
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
CREATE TABLE supermasters (
 ip VARCHAR(25) NOT NULL,
 nameserver VARCHAR(255) NOT NULL,
 account VARCHAR(40) DEFAULT NULL
);

Punkt 4: Konfiguration der Node 1

Jetzt ist der MySQL Server gefüttert und bereit für den Input, wir erstellen also die Konfigurationsdatei /etc/powerdns/pdns.d/pdns.local mit unseren Daten. (andere Dateien in diesem Ordner vorher löschen!)

# MySQL Configuration
#
# Launch gmysql backend
launch=gmysql

# gmysql parameters
gmysql-host=localhost
gmysql-port=3306
gmysql-user=powerdns
gmysql-password=DEIN_PASSWORT
gmysql-dbname=powerdns
gmysql-dnssec=no

Nun kommen wir zur Hauptkonfiguration der Node 1 in der Datei /etc/powerdns/pdns.conf.
(Default Werte liste ich nicht auf)

# allow-axfr-ips    If enabled, restrict zonetransfers to originate from these IP addresses
allow-axfr-ips=192.168.2.10
# allow-recursion       List of netmasks that are allowed to recurse
allow-recursion=127.0.0.1
# launch        Which backends to launch and order to query them in
launch=gmysql
# local-address Local IP address to which we bind
local-address=0.0.0.0
# master        Act as a master
master=yes

# webserver     Start a webserver for monitoring
webserver=yes
# webserver-address     IP Address of webserver to listen on
webserver-address=192.168.1.10
# webserver-port        Port of webserver to listen on
webserver-port=8081

Die Installation der Node 1 ist abgeschlossen, der Dienst kann neu gestartet werden.

/etc/init.d/pdns restart

Punkt 5: PowerDNS Pakete installieren (Node 2)

Auf der zweiten Node, dem AXFR Slave, setzen wir auf SQLite um den Arbeitsaufwand gering zu halten.

apt-get update && apt-get upgrade
apt-get install pdns-server pdns-backend-sqlite3

Punkt 6: SQLite3 Datenbank anlegen

Wir beginnen mit der Erstellung der SQLite3 Datenbank auf Node2.

sqlite3 /var/spool/powerdns/pdns.sqlite3

Und geben die Tabellenstruktur ein, beenden die Eingabe mit <enter> .quit.

create table domains (
  id                INTEGER PRIMARY KEY,
  name              VARCHAR(255) NOT NULL COLLATE NOCASE,
  master            VARCHAR(128) DEFAULT NULL,
  last_check        INTEGER DEFAULT NULL,
  type              VARCHAR(6) NOT NULL,
  notified_serial   INTEGER DEFAULT NULL, 
  account           VARCHAR(40) DEFAULT NULL
);

CREATE UNIQUE INDEX name_index ON domains(name);

CREATE TABLE records (
  id              INTEGER PRIMARY KEY,
  domain_id       INTEGER DEFAULT NULL,
  name            VARCHAR(255) DEFAULT NULL, 
  type            VARCHAR(10) DEFAULT NULL,
  content         VARCHAR(65535) DEFAULT NULL,
  ttl             INTEGER DEFAULT NULL,
  prio            INTEGER DEFAULT NULL,
  change_date     INTEGER DEFAULT NULL
);

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

create table supermasters (
  ip          VARCHAR(64) NOT NULL, 
  nameserver  VARCHAR(255) NOT NULL COLLATE NOCASE, 
  account     VARCHAR(40) DEFAULT NULL
);

CREATE UNIQUE INDEX ip_nameserver_pk ON supermasters(ip, nameserver);
.quit

Punkt 7: Konfiguration der Node 2

Wir erstellen wieder zuerst die Konfigurationsdatei /etc/powerdns/pdns.d/pdns.local. (andere Dateien in diesem Ordner vorher löschen!)

# Here come the local changes the user made, like configuration of
# the several backends that exist.

default-soa-name=a.ns2.example.com
slave=yes
#webserver=yes
launch=gsqlite3
gsqlite3-database=/var/spool/powerdns/pdns.sqlite3

Die Hauptkonfiguration /etc/powerdns/pdns.conf der Node 2 schaut wie folgt aus.
(Default Werte liste ich nicht auf)

# allow-axfr-ips    If enabled, restrict zonetransfers to originate from these IP addresses
allow-axfr-ips=192.168.1.10
# allow-recursion       List of netmasks that are allowed to recurse
allow-recursion=127.0.0.1
# local-address Local IP address to which we bind
local-address=0.0.0.0

# webserver     Start a webserver for monitoring
webserver=yes
# webserver-address     IP Address of webserver to listen on
webserver-address=192.168.2.10
# webserver-port        Port of webserver to listen on
webserver-port=8081

Die Installation der Node 2 ist abgeschlossen, der Dienst kann neu gestartet werden.

/etc/init.d/pdns restart

 

-Dominion

Dominion

Dominion

Linux Systemadministrator

Das könnte Dich auch interessieren …

13 Antworten

  1. Avatar Marcel sagt:

    Wie kommt man dann auf das Panel?

  2. Avatar Anonymer Interessent sagt:

    Welche IP Adresse verwende ich in der Konfiguration der /etc/powerdns/pdns.conf? Meine öffentliche?

  3. Avatar Anonymer Interessent sagt:

    Ich möchte vorerst nur einen master nutzen und in 1-2 Monaten den Node 2 einrichten. Ist das auch möglich? Und was muss ich dazu anders machen?

  4. Avatar Sandra sagt:

    Vielen Dank für diese Tolle Anleitung. Nach solanger Zeit hätte ich doch auch noch zwei Fragen und würde mich freuen wenn du mir weiterhelfen könntest. Ich gehe nun damit es leichter ist von deinen Daten hier aus. Wenn ich das nun so Online nutzen würde, was muss ich bei den Nameservern bei der verwendeten Domain nutzen die ich ausschliesslich für NS nutzen würde? Die haben ja dann kein NS? Einfach ns1.example.com oder die IP 192.168.1.10 / 192.168.2.10?
    Du schreibst für Node2 folgendes: „default-soa-name=a.ns2.example.com“ woher kommt das a, wenn der NS ns2.example.com heisst, und muss ich für Node1 nicht irgendwo auch einen Eintrag für ns1.example.com haben?

  5. Avatar Phillip sagt:

    Wie Lange dauert es i.d.r. bis auf Master & Slave die DNS-Einträge synchron laufen ?

    habe vor 2 stunden alles eingerichtet und es läuft einfach nicht mit der sqlite datenbank…

  6. Avatar Martin sagt:

    Ich bin der Anleitung gefolgt, allerdings mit Debian Stretch. Kein Erfolg

  7. Avatar Phillip sagt:

    Hallo Dominion,

    Ich habe für dieses Setup eine Proxmox VM Erstellt.

    Ist es Möglich den Master & den Sklaven auf einem Server zu Hosten ?

    Der Server hat zwei Unterschiedliche IPs aus komplett verschiedenen Netzen.

    LG

    • Dominion Dominion sagt:

      Ja sicher ist es möglich, die IP-Adressen sollten sich jedoch nicht zu sehr ähneln. Aber ob dies Sinn macht, beide DNS auf einem Host zu betreiben möchte ich ebenfalls kurz erwähnen 😉

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.