PDNS konfigurieren
PDNS (PowerDNS) mit MySQL-Backend konfigurieren - HOWTO
(hier: Version 2.9.17 und 2.9.18) - Link zum Hersteller: http://www.powerdns.com
1. In der MySQL-Datenbank den Benutzer "pdns" anlegen. (phpMyAdmin, "Privileges"). Passwort vergeben!
2. Eine eigene MySQL-Datenbank für PDNS anlegen. Datenbankname: "pdns". Darin dann die Tabellen anlegen, wie in der Doku beschrieben:
create table domains ( id INT auto_increment, name VARCHAR(255) NOT NULL, master VARCHAR(20) 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) )type=InnoDB; 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) )type=InnoDB; 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 ); GRANT SELECT ON supermasters TO pdns; GRANT ALL ON domains TO pdns; GRANT ALL ON records TO pdns;
3. Die Datenbank füllen:
Zuerst die Domain eintragen...
INSERT INTO domains ('id', 'name', 'master', 'last_check', 'type', 'notified_serial', 'account') \
VALUES (, 'line5.tv', NULL, NULL, , NULL, NULL);
... und dann die SOA, NS, A und MX Records:
// SOA
INSERT INTO records SET domain_id='1', name='line5.tv', type='SOA', content=concat \
('ns1.line5.tv. registrar.line-5.de. ',UNIX_TIMESTAMP(),' 12000 1800 604800 86400'), \
ttl='3600';
// 3 Nameserver
INSERT INTO `records` ( `id` , `domain_id` , `name` , `type` , `content` , `ttl` , `prio` , `change_date` ) \
VALUES (``, '1', 'line5.tv', 'NS', 'ns1.line5.tv', '3600', NULL , NULL );
INSERT INTO `records` ( `id` , `domain_id` , `name` , `type` , `content` , `ttl` , `prio` , `change_date` ) \
VALUES (``, '1', 'line5.tv', 'NS', 'ns2.line5.tv', '3600', NULL , NULL );
INSERT INTO `records` ( `id` , `domain_id` , `name` , `type` , `content` , `ttl` , `prio` , `change_date` ) \
VALUES (``, '1', 'line5.tv', 'NS', 'ns3.line5.tv', '3600', NULL , NULL );
// 2 A-Records
INSERT INTO `records` ( `id` , `domain_id` , `name` , `type` , `content` , `ttl` , `prio` , `change_date` ) \
VALUES (``, '1', 'line5.tv', 'A', '81.169.153.104', '3600', NULL , NULL );
INSERT INTO `records` ( `id` , `domain_id` , `name` , `type` , `content` , `ttl` , `prio` , `change_date` ) \
VALUES (``, '1', '*.line5.tv', 'A', '81.169.153.104', '3600', NULL , NULL );
// 2 MX-Records
INSERT INTO `records` ( `id` , `domain_id` , `name` , `type` , `content` , `ttl` , `prio` , `change_date` ) \
VALUES (``, '1', 'line5.tv', 'MX', 'mail.line5.tv', '3600', '10' , NULL );
INSERT INTO `records` ( `id` , `domain_id` , `name` , `type` , `content` , `ttl` , `prio` , `change_date` ) \
VALUES (``, '1', 'line5.tv', 'MX', 'mail2.line5.tv', '3600', '20' , NULL );
Nach diesem Muster ggf. weitere Domains / Records hinzufügen.
4. PDNS installieren (Quelle: http://www.powerdns.com); bei vielen Distributionen als pdns oder powerdns enthalten.
5. Konfigurationsdatei anpassen: Meist zu finden unter /etc/powerdns/pdns.conf. Es kann alles bei den Standardeinstellungen belassen werden, bis auf folgendes:
# Mitteilen, dass MySQL verwendet wird launch=gmysql # IP-Adresse: (X ersetzen!) local-address=XXX.XXX.XXX.XXX #MySQL-Zugriffsdaten eingeben gmysql-host=localhost gmysql-user=pdns gmysql-dbname=pdns gmysql-password= passwort
6. PDNS neu starten
Testen mit:
dig line5.tv @meinhostname ANY
Verbesserungsvorschläge? Schreiben Sie uns! mail at line5 dot tv
Mehrere PDNS-Server mit Supermaster und Superslave konfigurieren
1. Auf dem Masterserver in der Konfigurationsdatei /etc/powerdns/pdns.conf die "master"-Funktion einschalten und die IP-Adressen der Slave-Server eintragen:
master=yes allow-axfr-ips=XXX.XXX.XXX.XXX YYY.YYY.YYY.YYY
2. Auf den Slaveservern dieselbe Datenbank erstellen wie weiter oben für den Masterserver... allerdings _ohne Inhalte_! PDNS füllt die Datenbank selbstständig.
3. In die Tabelle "supermasters" den Master-Server eintragen:
ip: IP-Adresse des Master-Nameservers nameserver: Hostname des Master-Nameservers account: Der hier eingegebene Name erscheint neben jeder domain in der Tabelle "domains".
4. Testen: Sobald ein Record auf dem Master-Server verändert wird, schickt dieser eine Benachrichtigung an die Slave-Server. Diese holen daraufhin per AXFR ein Update.
Aus der Praxis (= Fehler, die wir schon für Sie gemacht haben): Der PDNS Supermaster benötigt übrigens Schreibrechte (UPDATE) in der MySQL-Datenbank... Ansonsten schickt er keine Benachrichtigungen los. Ausserdem sollte man in der pdns.conf die eigene IP-Adresse eintragen, da der Supermaster ansonsten ständig versucht, sich selbst zu benachrichtigen.
# Die local-address sollte nicht 0.0.0.0 sein, da sich der Supermaster sonst u.U. selbst benachrichtigt. local-address=81.XXX.XXX.XXX