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