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 &