PowerDNS

Inleiding

De installatie van PowerDNS is gebasseerd op FreeBSD besturingsysteem.

Controle

Controleer of poort 53 al openstaat voor een andere DNS zoals Named

# sockstat -l

Mocht dit het geval zijn dan dien je eerst deze services te stoppen en te verwijderen voordat je PowerDNS kunt installeren en gebruiken.

Installatie

Installeer MySQL Server indien het nog niet op de server aanwezig is. MySQL Client wordt dan meteen mee geïnstalleerd

# pkg install dns/powerdns

To have your system build the port:

# cd /usr/ports/dns/powerdns/ && make install clean

De volgende instellingen moeten ingesteld worden:

Ga naar rc.conf bestand.

# vi /etc/rc.conf

En stel in dat MySQL automatisch opstart na een reboot.

mysql_enable="YES"

Installeer een database voor PowerDNS

Als eerste moet MySQL gestart worden

# /usr/local/etc/rc.d/mysql-server start

Vervolgens moet de root wachtwoord van MySQL ingesteld worden

# mysql -u root
# SET PASSWORD FOR 'root'@'localhost' = PASSWORD('verzin een uniek wachtwoord');
# SET PASSWORD FOR 'root'@'host_name' = PASSWORD('verzin een uniek wachtwoord');

Log in de MySQL client

# mysql -u root -p

Nu moet er een database genaamd ‘PowerDNS’ aangemaakt worden

# CREATE DATABASE pdns;
# use pdns;

Maak nu de benodigde tabellen, kolommen en indexes

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)
) Engine=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(10) DEFAULT NULL,
  content               VARCHAR(64000) DEFAULT NULL,
  ttl                   INT DEFAULT NULL,
  prio                  INT DEFAULT NULL,
  change_date           INT DEFAULT NULL,
  disabled              TINYINT(1) DEFAULT 0,
  ordername             VARCHAR(255) BINARY DEFAULT NULL,
  auth                  TINYINT(1) DEFAULT 1,
  PRIMARY KEY (id)
) Engine=InnoDB;

CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
CREATE INDEX recordorder ON records (domain_id, ordername);


CREATE TABLE supermasters (
  ip                    VARCHAR(64) NOT NULL,
  nameserver            VARCHAR(255) NOT NULL,
  account               VARCHAR(40) NOT NULL,
  PRIMARY KEY (ip, nameserver)
) Engine=InnoDB;


CREATE TABLE comments (
  id                    INT AUTO_INCREMENT,
  domain_id             INT NOT NULL,
  name                  VARCHAR(255) NOT NULL,
  type                  VARCHAR(10) NOT NULL,
  modified_at           INT NOT NULL,
  account               VARCHAR(40) NOT NULL,
  comment               VARCHAR(64000) NOT NULL,
  PRIMARY KEY (id)
) Engine=InnoDB;

CREATE INDEX comments_domain_id_idx ON comments (domain_id);
CREATE INDEX comments_name_type_idx ON comments (name, type);
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);


CREATE TABLE domainmetadata (
  id                    INT AUTO_INCREMENT,
  domain_id             INT NOT NULL,
  kind                  VARCHAR(32),
  content               TEXT,
  PRIMARY KEY (id)
) Engine=InnoDB;

CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);


CREATE TABLE cryptokeys (
  id                    INT AUTO_INCREMENT,
  domain_id             INT NOT NULL,
  flags                 INT NOT NULL,
  active                BOOL,
  content               TEXT,
  PRIMARY KEY(id)
) Engine=InnoDB;

CREATE INDEX domainidindex ON cryptokeys(domain_id);


CREATE TABLE tsigkeys (
  id                    INT AUTO_INCREMENT,
  name                  VARCHAR(255),
  algorithm             VARCHAR(50),
  secret                VARCHAR(255),
  PRIMARY KEY (id)
) Engine=InnoDB;

CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);

ALTER TABLE `records` ADD CONSTRAINT `records_ibfk_1` FOREIGN KEY (`domain_id`)
REFERENCES `domains` (`id`) ON DELETE CASCADE;

Het is geen goed idee om de root wachtwoord te gebruiken voor PowerDNS installatie. Dus we gaan een database gebruiker aanmaken en rechten geven voor de database die we zojuist hebben aangemaakt

# CREATE USER 'pdns'@'localhost' IDENTIFIED by ' ''verzin een uniek wachtwoord'' ';
# GRANT ALL PRIVILEGES ON pdns. * to 'pdns'@'localhost' IDENTIFIED by ' ''verzin een uniek wachtwoord'' ';
# FLUSH PRIVILEGES;
# quit;

Installeer PowerDNS

Installeer PowerDNS via portsnap

# cd /usr/ports/dns/powerdns/ && make install clean

Zorg ervoor dat PowerDNS opstart. Ga naar rc.conf bestand.

# vi /etc/rc.conf

En stel in dat PowerDNS automatisch opstart na een reboot.

pdns_enable="YES"

PowerDNS nu opstarten.

# /usr/local/etc/rc.d/pdns start

Installeer PowerDNS recursor

Installeer PowerDNS recursor via portsnap

# cd /usr/ports/dns/powerdns-recursor/ && make install clean

Zorg ervoor dat PowerDNS recursor opstart. Ga naar rc.conf bestand.

# vi /etc/rc.conf

En stel in dat PowerDNS recursor automatisch opstart na een reboot.

pdns_recursor_enable="YES"

PowerDNS recursor nu opstarten.

# /usr/local/etc/rc.d/pdns-recursor start

Configureer PowerDNS Master Server

Nu PowerDNS is geïnstalleerd, moet er een aantal aanpassingen in het configuratie bestand

# vi /usr/local/etc/pdns/pdns.conf

Haal de commentaar van de volgende regel weg en verander het naar 127.0.0.1:5300. Dit geeft aan PowerDNS door dat de gevraagde queries naar de PowerDNS-recursor gestuurd dient te worden, dat luistert op de poort 5300.

recursor=127.0.0.1:5300

Voeg het onderstaande aan het gedeelte launch toe.

launch=gmysql
gmysql-host=127.0.0.1
gmysql-user=powerdns
gmysql-password=(het gekozen wachtwoord voor de gebruiker powerdns van de MySQL server)
gmysql-dbname=pdns

Extra instellingen

allow-axfr-ips=84.22.100.69/24
allow-recursion=127.0.0.1
daemon=yes
disable-axfr=no
guardian=yes
local-address=127.0.0.1
local-port=53
log-dns-details=on
master=yes
slave=no

De recursor listener moet ingesteld worden op een andere poort dan PowerDNS al gebruikt, namelijk udp poort 53. Je hebt hierboven al de poort 5300 ingesteld, zo deze moeten we hieronder weer gebruiken.

# vi /usr/local/etc/pdns/recursor.conf

Zet de poort op 5300.

local-port=5300

Bovenaan in het bestand staat het kopje loopback 127.0.0.1

# allow-from    If set, only allow these comma separated netmasks to recurse
#
#allow-from=127.0.0.0/8, 10.0.0.0/8, 100.64.0.0/10, 169.254.0.0/16, 192.168.0.0/16, 172.16.0.0/12, ::1/128, fe80::/10
allow-from=127.0.0.0/8

Nu moeten we ervoor zorgen dat de PowerDNS en PowerDNS recursor opnieuw opstart.

# /usr/local/etc/rc.d/pdns restart
# /usr/local/etc/rc.d/pdns-recursor restart

Als je IPTables gebruikt als firewall, dan moet je http en DNS queries wel toestaan. Dit doe je door de volgende regels toe te voegen aan de firewall.

# iptables -A INPUT -m udp -p udp --sport 53 -j ACCEPT
# iptables -A INPUT -m tcp -p tcp --sport 80 -j ACCEPT
# service iptables save

Configureer PowerDNS Slave Server

Nu PowerDNS is geïnstalleerd, moet er een aantal aanpassingen in het configuratie bestand

# vi /usr/local/etc/pdns/pdns.conf

Haal de commentaar van de volgende regel weg en verander het naar 127.0.0.1:5300. Dit geeft aan PowerDNS door dat de gevraagde queries naar de PowerDNS-recursor gestuurd dient te worden, dat luistert op de poort 5300.

recursor=127.0.0.1:5300

Voeg het onderstaande aan het gedeelte launch toe.

launch=gmysql
gmysql-host=127.0.0.1
gmysql-user=powerdns
gmysql-password=(het gekozen wachtwoord voor de gebruiker powerdns van de MySQL server)
gmysql-dbname=pdns

Extra instellingen

allow-axfr-ips=37.252.121.42/24
allow-recursion=127.0.0.1
daemon=yes
disable-axfr=no
guardian=yes
local-address=127.0.0.1
local-port=53
log-dns-details=on
master=no
slave=yes

De recursor listener moet ingesteld worden op een andere poort dan PowerDNS al gebruikt, namelijk udp poort 53. Je hebt hierboven al de poort 5300 ingesteld, zo deze moeten we hieronder weer gebruiken.

# vi /usr/local/etc/pdns/recursor.conf

Zet de poort op 5300.

local-port=5300

Bovenaan in het bestand staat het kopje loopback 127.0.0.1

# allow-from    If set, only allow these comma separated netmasks to recurse
#
#allow-from=127.0.0.0/8, 10.0.0.0/8, 100.64.0.0/10, 169.254.0.0/16, 192.168.0.0/16, 172.16.0.0/12, ::1/128, fe80::/10
allow-from=127.0.0.0/8

Nu moeten we ervoor zorgen dat de PowerDNS en PowerDNS recursor opnieuw opstart.

# /usr/local/etc/rc.d/pdns restart
# /usr/local/etc/rc.d/pdns-recursor restart

Als je IPTables gebruikt als firewall, dan moet je http en DNS queries wel toestaan. Dit doe je door de volgende regels toe te voegen aan de firewall.

# iptables -A INPUT -m udp -p udp --sport 53 -j ACCEPT
# iptables -A INPUT -m tcp -p tcp --sport 80 -j ACCEPT
# service iptables save

Log in de MySQL client, selecteer de pdns database en voeg een regel toe voor supermasters tabel met daarbij het ip adres Master en de hostname van de Slave.

# mysql -u root -p
# mysql> use pdns;
# mysql> insert into supermasters values ('37.252.121.42', 'ns2.markterweele.nl', 'admin');
# mysql> exit;

Aanpassen hostfile op Master en Slave server

Op starten van PowerDNS

# ee /etc/hosts

Volgende twee regels toevoegen:

37.252.121.42  ns1.markterweele.nl
84.22.100.69    ns2.markterweele.nl

Beheer

Op starten van PowerDNS

# /usr/local/sbin/pdns_server &

Zie ook

External links

Add a Comment

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *