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.
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
Wie kommt man dann auf das Panel?
Der Webserver Port kann in der pdns.conf definiert werden: webserver-port=5533
Gruß Dominion
Welche IP Adresse verwende ich in der Konfiguration der /etc/powerdns/pdns.conf? Meine öffentliche?
Wenn du „local-address=“ meinst, dann ja die öffentliche.
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?
Du kannst auch nur einen DNS Server betreiben, die DENIC sieht aber z.B. mindestens 2 DNS Einträge vor.
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?
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…
Das sollte eigtl. direkt passieren.
Ich habe solch ein Setup noch heute laufen. Der Master sendet den Slaves per AXFR die Zoneninhalte zu. Im Logfile auf den Slaves solltest du dies sehen, oder aber auch Fehlermeldungen erkennnen.
Mhmm dass läuft bei mir Irgendwie nicht so recht..
Ich hab alles so wie hier beschrieben.
Ich bin der Anleitung gefolgt, allerdings mit Debian Stretch. Kein Erfolg
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
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 😉