PowerDNS (PDNS) mit MySQL-Backend

PowerDNS

Heute will ich euch Demonstrieren, wie einfach es ist PowerDNS (PDNS) mit MySQL-Backend auf einem Debian Server zu installieren. Dies kann sinnvoll sein wenn man seine Domains nicht in Fremde Hände geben will oder für seine eigene Kunden.

Voraussetzung

  • Root Zugang
  • Eine MySQL Datenbank

Datenbank/User anlegen

Wir legen die Datenbank und den User „pdns“ an und geben Ihm die Rechte auf die Datenbank. Entweder via phpMyAdmin oder der Console.

PowerDNS installieren

Wir installieren die benötigten Packete via Console. Die Installation sollte selbsterklärend sein.

aptitude install pdns-server pdns-backend-mysql

PowerDNS Datenbank fĂĽllen

Wir erstellen einige Tabellen, sofern noch nicht geschehen und füllen diese. In unserem Beispiel nehmen wir die Domain fragz.de so wie dazugehörige Subdomains die wir auf die IP 132.132.132.132 leiten.

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;

Jetzt tragen wir die Domain ein.

INSERT INTO domains ('id', 'name', 'master', 'last_check', 'type', 'notified_serial', 'account') \ 
VALUES (, 'fragz.de', NULL, NULL, , NULL, NULL);

und die SOA, NS, A und MX Records.

// SOA
INSERT INTO records SET domain_id='1', name='fragz.de', type='SOA', content=concat \
 ('ns1.fragz.de. registrar.fragz.de. ',UNIX_TIMESTAMP(),' 12000 1800 604800 86400'), \
 ttl='3600';

// 2 Nameserver
INSERT INTO `records` ( `id` , `domain_id` , `name` , `type` , `content` , `ttl` , `prio` ,  `change_date` ) \
VALUES (``, '1', 'fragz.de', 'NS', 'ns1.fragz.de', '3600', NULL , NULL );

INSERT INTO `records` ( `id` , `domain_id` , `name` , `type` , `content` , `ttl` , `prio` ,  `change_date` ) \
VALUES (``, '1', 'fragz.de', 'NS', 'ns2.fragz.de', '3600', NULL , NULL );

// 2 A-Records
INSERT INTO `records` ( `id` , `domain_id` , `name` , `type` , `content` , `ttl` , `prio` ,  `change_date` ) \
VALUES (``, '1', 'fragz.de', 'A', '132.132.132.132', '3600', NULL , NULL );

INSERT INTO `records` ( `id` , `domain_id` , `name` , `type` , `content` , `ttl` , `prio` ,  `change_date` ) \
VALUES (``, '1', '*.fragz.de', 'A', '132.132.132.132', '3600', NULL , NULL );

// 2 MX-Records
INSERT INTO `records` ( `id` , `domain_id` , `name` , `type` , `content` , `ttl` , `prio` ,  `change_date` ) \
VALUES (``, '1', 'fragz.de', 'MX', 'mail.fragz.de', '3600', '10' , NULL );

INSERT INTO `records` ( `id` , `domain_id` , `name` , `type` , `content` , `ttl` , `prio` ,  `change_date` ) \
VALUES (``, '1', 'fragz.de', 'MX', 'mail2.fragz.de', '3600', '20' , NULL );

PowerDNS Konfigurieren

Wir öffnen die Datei /etc/powerdns/pdns.d/pdns.local.gmysql.conf und tragen unsere MySQL Zugangsdaten ein.

# MySQL Configuration
#
# Launch gmysql backend
launch+=gmysql
local-address=132.132.132.132

# gmysql parameters
gmysql-host=localhost
gmysql-port=
gmysql-dbname=pdns
gmysql-user=pdns
gmysql-password=passwort
gmysql-dnssec=yes
# gmysql-socket=

Jetzt starten wir den PowerDNS Server neu.

/etc/init.d/pdns restart

PowerDNS-Server mit Supermaster und Superslave

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

Auf den Slaveservern dieselbe Datenbank erstellen wie weiter oben fĂĽr den Masterserver. Allerdings ohne Inhalte!
In die Tabelle „supermasters“ die IP und den Hostname des Master-Servers eintragen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.