PDNS konfigurieren

Aus Line5 Wiki
Wechseln zu: Navigation, Suche

PDNS (PowerDNS) mit MySQL-Backend konfigurieren - HOWTO

(hier: Version 2.9.17 und 2.9.18) - Link zum Hersteller: http://www.powerdns.com

<adsense>a</adsense>

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