Powerdns

PowerDNS to DNS trzymający informacje w bazie danych, dzięki temu można używać wygodnego interfejsu webowego do bazy danych!

PowerDNS i inicjacja bazy danych

Najpierw musimy stworzyć bazę danych, w tym przypadku MySQL:

create table domains (
 id    SERIAL PRIMARY KEY,
 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
);

CREATE UNIQUE INDEX name_index ON domains(name);

CREATE TABLE records (
id SERIAL PRIMARY KEY,
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,
CONSTRAINT domain_exists
FOREIGN KEY(domain_id) REFERENCES domains(id)
ON DELETE CASCADE
);

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 domains_id_seq TO pdns;
GRANT ALL ON records TO pdns;
GRANT ALL ON records_id_seq TO pdns;

Supermaster

PowerDNS może pracować w bardzo ciekawym trybie. Otóż moze istnieć serwer nazywany supermaster, dla którego dana instancja serwera PowerDNS automatycznie przyjmuje role slave DNS, czyli jeżeli na masterze ustawimy jakąś domene, wskazemy dany serwer jako serwer DNS to ten DNS automatycznie przyjme rolę serwera DNS dla tej domeny i samodzielnie pobierze informacje o domenie a następnie wstawi ją do swojej bazy danych. Skonfigurowanie serwera w roli slave posiadającego supermastera wymaga wpisu do tabeli supermasters. Tabela ta posiada 3 kolumny: ip (adres IP serwera DNS, który jest supermasterem), name (nazwa domenowa w rekordzie NS, pod którą ten DNS będzie wpisany dla danej domeny) oraz acount (nie jest wymagane, pozwala lepiej logować zmiany).

Oct 22 22:19:25 multi pdns[6129]: Received NOTIFY for ziutus.waw.pl from 195.26.22.67 for which we are not authoritative
Oct 22 22:19:26 multi pdns[6125]: AXFR started for 'ziutus.waw.pl', transaction started
Oct 22 22:19:26 multi pdns[6125]: AXFR done for 'ziutus.waw.pl', zone committed

Po stonie serwera będzie to wyglądało w sposób podobny:

Oct 23 00:18:26 terminal-3-67 pdns[10859]: Notification request to host 193.239.204.8 for domain 'ziutus.waw.pl' received
Oct 23 00:18:28 terminal-3-67 pdns[10859]: AXFR of domain 'ziutus.waw.pl' initiated by 193.239.204.8
Oct 23 00:18:28 terminal-3-67 pdns[10859]: gmysql Connection succesful
Oct 23 00:18:28 terminal-3-67 pdns[10859]: AXFR of domain 'ziutus.waw.pl' to 193.239.204.8 finished
Oct 23 00:18:28 terminal-3-67 pdns[10859]: Removed from notification list: 'ziutus.waw.pl' to 193.239.204.8 (was acknowledged)

Slave

Oct 23 00:06:41 terminal-3-67 pdns[10859]: AXFR of domain 'ziutus.waw.pl' initiated by 193.239.204.8
Oct 23 00:06:41 terminal-3-67 pdns[10859]: AXFR of domain 'ziutus.waw.pl' to 193.239.204.8 finished

Ja napisałem własny interfejs, więc nie umowie innych dostępnych na rynku.

Dodaj komentarz