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.
1 2 |
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.
1 2 3 4 |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
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!)
1 2 3 4 5 6 7 8 9 10 11 12 |
# 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)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# 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.
1 |
/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.
1 2 |
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.
1 |
sqlite3 /var/spool/powerdns/pdns.sqlite3 |
Und geben die Tabellenstruktur ein, beenden die Eingabe mit <enter> .quit.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
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!)
1 2 3 4 5 6 7 8 |
# 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)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# 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.
1 |
/etc/init.d/pdns restart |
-Dominion
0