DNSSEC-ondertekening op de PowerDNS Authoritative Server

PowerDNS is een Nederlands bedrijf (tegenwoordig onderdeel van Open-Xchange) dat over de afgelopen 20 jaar 3 software-pakketten voor DNS heeft ontwikkeld:

De software is geschreven in C++, en is schaalbaar en snel. De code draait op alle Unix-achtigen en de laatste versies zijn in ieder geval als kant-en-klaar package beschikbaar voor de meeste Linux- en BSD-distributies, en via Homebrew voor macOS. Alle 3 de software-pakketten worden gepubliceerd als open-source software onder de GPLv2-licentie. Het bedrijf verdient zijn geld via advies, ondersteuning en maatwerk. Daarmee heb je als gebruiker alle voordelen van het klassieke business model voor open source: open software die je "gratis" kunt gebruiken als je daar zelf de tijd en expertise voor hebt, een actieve community van gebruikers en ontwikkelaars, met een commercieel bedrijf als fallback. Alternatief is het PowerDNS Platform, een software suite gebaseerd op deze 3 software-producten.

DNSSEC

De implementatie van DNSSEC (vanaf versie 3.0) betekende de grote doorbraak voor PowerDNS: vrijwel alle grote Internet Service Providers die hun domeinen in bulk ondertekenden, deden dat op basis van de Authoritative Server. Validatie van DNSSEC is pas vanaf versie 4.0 onderdeel van de Recursor. De ontwikkeling ervan is destijds door SIDN (financieel) ondersteund. Interessante feature is de Lua engine ingebouwd in zowel de Authoritative Server als de Recursor. Lua is een snel te leren script-taal waarmee de interne datastructuren gemakkelijk toegankelijk worden gemaakt voor beheerders. Verderop meer over het gebruik hiervan. In dit artikel bespreken we de DNSSEC features van de Authoritative Server. Juist omdat DNSSEC voor veel operators reden is om naar PowerDNS over te stappen, doorlopen we daarvoor de basisinstallatie van de Authoritative Server draaiend op CentOS/RHEL, en besteden we ook aandacht aan de Bind connector. De configuratie van de Recursor als validerende resolver bespreken we in een ander artikel.

Inhoudsopgave

Deel I Installatie en configuratie

Deel II Management

Deel III DNSSEC-specifieke opties en commando's

Deel I Installatie en configuratie

1.1 Kant-en-klare packages

De huidige versie (we schrijven najaar 2019) van de PowerDNS Authoritative Server is 4.2.0. De software is als kant-en-klaar pakket beschikbaar voor download vanaf de repo-site. Daar vind je packages voor de meest gebruikte Linux-distributies (Debian, Raspbian, Ubuntu en CentOS/RHEL). DNSSEC wordt door de Authoritative Server ondersteund vanaf versie 3.0. Waar de ondertekening van domeinen op andere authoritatieve servers (BIND named, eventueel in combinatie met OpenDNSSEC) destijds nogal wat voeten in de aarde had, hanteerde PowerDNS vanaf het begin een 'flick the switch'-aanpak. Dat betekent dat beheerders met een enkel commando hun domeinen konden laten ondertekenen. De DNSSEC-configuratie, de herondertekening van de DNS-records en het sleutelbeheer werden vervolgens allemaal automatisch door de server verzorgd. Door de complexiteit van DNSSEC op deze manier te verbergen voor de beheerders heeft PowerDNS met de opkomst van DNSSEC mee kunnen liften en een groot marktaandeel van de ondertekende domeinen weten te veroveren. Voor deze bespreking hebben we gebruik gemaakt van PowerDNS Authorative Server versie 4.1.13 op CentOS 7.6. De documentatie voor de Authoritative Server vind je hier.

1.2 Installatie

De installatie van de Authoritative Server begint met de configuratie van de EPEL en PowerDNS Authoritative Server repositories, en de installatie van het yum-plugin-priorities package:

  yum install epel-release yum-plugin-priorities &&
  curl -o /etc/yum.repos.d/powerdns-auth-41.repo
      https://repo.powerdns.com/repo-files/centos-auth-41.repo

Gevolgd door de pdns en pdns-tools packages:

  yum install pdns pdns-tools

Hoewel de PowerDNS software ook direct vanaf de EPEL repository voor CentOS/RHEL beschikbaar is, wordt hier de versie afkomstig van de powerdns-auth-41 repository gebruikt. Voor de laatste versies van Fedora (29, 30 en 31, waarvan die laatste nog in ontwikkeling) worden op dit moment Authoritative Server versies 4.1.11 en 4.2.0 (via de updates) met de distributie meegeleverd. Nog een alternatief is om de packages direct te downloaden van de PDNS repository van Kees Monshouwer.

1.3 Back-ends

De Authoritative Server software bevat een groot aantal backends – dat wil zeggen: connectors voor verschillende bronnen waar de server zijn zone informatie vandaan kan halen (en meestal ook wegschrijven). In de tabel hieronder geven we een overzicht van de beschikbare backends en de additionele packages die je daarvoor moet installeren:

Backend Package
GeoIP (resolve naar dichtstbijzijnde host) pdns-backend-geoip
LDAP pdns-backend-ldap
Lua (connector voor de embedded Lua script-taal) pdns-backend-lua
MyDNS (;oud, alleen om te importeren) pdns-backend-mydns
MySQL/MariaDB pdns-backend-mysql
ODBC pdns-backend-odbc
OpenDBX pdns-backend-opendbx
Oracle pipe (connector voor named pipes en IPC sockets) pdns-backend-pipe
PostgreSQLk pdns-backend-postgresql
remote (connector voor pipes/sockets, HTTP en ZeroMQ pdns-backend-remote
SQLite 3 (embedded) pdns-backend-sqlite
TinyDNS djbdns; oud, alleen om te importeren) pdns-backend-tinydns

Het Oracle backend wordt niet met CentOS/RHEL meegeleverd. Om eventuele inbreuk op rechten te voorkomen, moet je die zelf compileren. Maar dit backend moet je sowieso niet meer gebruiken, want vanaf versie 4.3 zijn de backends voor Oracle, MyDNS en OpenDBX uit de software verwijderd. Sowieso zullen de meeste beheerders de Authoritative Server opzetten met een MySQL/MariaDB backend.

1.4 Modes of Operation

De Authoritative Server ondersteunt verschillende Modes of Operation:

  • native replication (default): Notificaties en zone transfers worden helemaal niet uitgevoerd; alle updates geschieden via de replicatie-mechanismen van de onderliggende databases (vergelijkbaar met de Infoblox appliances binnen een Grid). Volgens de makers van PowerDNS heeft dit mechanisme zich voor MySQL/MariaDB en Oracle zelfs over slechte intercontinentale verbindingen bewezen.

  • Master: Notificaties worden naar uitgestuurd naar slaves, die vervolgens om een zone update kunnen vragen.

  • Supermaster: Een server die een notificatie stuurt maakt dat een ontvangende server zichzelf automatisch als (super)slave voor dat specifieke domein configureert.

  • binnenkomende zone transfers kunnen gefilterd worden door middel van een Lua-script (per zone) dat vervolgens wordt uitgevoerd voor ieder resource record

Voor native replicatie (de default) hoef je dus niets te doen (anders dan het opzetten van unidirectionele database-replicatie van master naar slaves). Bovendien kun je alle backends vervolgens instellen op read-only (behalve diegene die met een user/management frontend verbonden zijn; typisch een administratieve hidden master).

1.5 MariaDB

Voor deze bespreking gebruiken we (net als meesten van jullie) MariaDB, de opvolger (fork) van MySQL na de overname van Sun door Oracle. Omdat de ondersteuning van DNSSEC voor veel grote operators de reden was om over te stappen naar de PowerDNS Authoritative Server laten we hieronder de hele basisinstallatie zien. We beginnen met de installatie van de MariaDB software en het MySQL/MariaDB backend:

  yum install mariadb mariadb-server pdns-backend-mysql

Gevolgd door het (permanent) aanzetten en opstarten van de MariaDB server:

  [root@localhost ~]# systemctl enable mariadb
  Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service
      to /usr/lib/systemd/system/mariadb.service.
  [root@localhost ~]# systemctl start mariadb

  [root@localhost ~]# systemctl status mariadb
  ● mariadb.service - MariaDB database server
    Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
    Active: active (running) since Mon 2019-02-04 15:31:09 CET; 1min 17s ago
 Main PID: 30431 (mysqld_safe)
    CGroup: /system.slice/mariadb.service
            ├─30431 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
            └─30592 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log...

  Feb 04 15:31:07 localhost.localdomain mariadb-prepare-db-dir[30215]: MySQL manual for more instructions.
  Feb 04 15:31:07 localhost.localdomain mariadb-prepare-db-dir[30215]: Please report any problems at http://mariadb.org/jira
  Feb 04 15:31:07 localhost.localdomain mariadb-prepare-db-dir[30215]: The latest information about MariaDB is available...g/.
  Feb 04 15:31:07 localhost.localdomain mariadb-prepare-db-dir[30215]: You can find additional information about the MyS...at:
  Feb 04 15:31:07 localhost.localdomain mariadb-prepare-db-dir[30215]: http://dev.mysql.com
  Feb 04 15:31:07 localhost.localdomain mariadb-prepare-db-dir[30215]: Consider joining MariaDB's strong and vibrant com...ty:
  Feb 04 15:31:07 localhost.localdomain mariadb-prepare-db-dir[30215]: https://mariadb.org/get-involved/
  Feb 04 15:31:07 localhost.localdomain mysqld_safe[30431]: 190204 15:31:07 mysqld_safe Logging to '/var/log/mariadb/ma...og'.
  Feb 04 15:31:07 localhost.localdomain mysqld_safe[30431]: 190204 15:31:07 mysqld_safe Starting mysqld daemon with dat...ysql
  Feb 04 15:31:09 localhost.localdomain systemd[1]: Started MariaDB database server.
  Hint: Some lines were ellipsized, use -l to show in full.

Vervolgens initialiseren we de verse installatie van MariaDB als volgt:

[root@localhost ~]# mysql_secure_installation

  NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
        SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

  In order to log into MariaDB to secure it, we'll need the current
  password for the root user.  If you've just installed MariaDB, and
  you haven't set the root password yet, the password will be blank,
  so you should just press enter here.

  Enter current password for root (enter for none): 
  OK, successfully used password, moving on...

  Setting the root password ensures that nobody can log into the MariaDB
  root user without the proper authorisation.

  Set root password? [Y/n] y
  New password: ************
  Re-enter new password: ************
  Password updated successfully!
  Reloading privilege tables..
   ... Success!

  By default, a MariaDB installation has an anonymous user, allowing anyone
  to log into MariaDB without having to have a user account created for
  them.  This is intended only for testing, and to make the installation
  go a bit smoother.  You should remove them before moving into a
  production environment.

  Remove anonymous users? [Y/n] y
   ... Success!

  Normally, root should only be allowed to connect from 'localhost'.  This
  ensures that someone cannot guess at the root password from the network.

  Disallow root login remotely? [Y/n] y
   ... Success!

  By default, MariaDB comes with a database named 'test' that anyone can
  access.  This is also intended only for testing, and should be removed
  before moving into a production environment.

  Remove test database and access to it? [Y/n] y
   - Dropping test database...
   ... Success!
   - Removing privileges on test database...
   ... Success!

  Reloading the privilege tables will ensure that all changes made so far
  will take effect immediately.

  Reload privilege tables now? [Y/n] y
   ... Success!

  Cleaning up...

  All done!  If you've completed all of the above steps, your MariaDB
  installation should now be secure.

  Thanks for using MariaDB!

1.6 Database-gebruiker en -definitie

In de volgende stap maken we via de MariaDB monitor een gebruikersaccount ('pdns') en de database zelf (hier ook 'pdns') aan voor de Authoritative Server:

  [root@localhost ~]# mysql -u root -p
  Enter password: ************
  Welcome to the MariaDB monitor.  Commands end with ; or \g.
  Your MariaDB connection id is 10
  Server version: 5.5.60-MariaDB MariaDB Server

  Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

  Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

  MariaDB [(none)]> CREATE USER 'pdns'@'localhost' IDENTIFIED BY '************';
  Query OK, 0 rows affected (0.00 sec)

  MariaDB [(none)]> GRANT DELETE, INSERT, SELECT, UPDATE ON pdns.*
      TO 'pdns'@'localhost';
  Query OK, 0 rows affected (0.00 sec)

  MariaDB [(none)]> FLUSH PRIVILEGES;
  Query OK, 0 rows affected (0.00 sec)

  MariaDB [(none)]> CREATE DATABASE pdns;
  Query OK, 1 row affected (0.00 sec)

  MariaDB [(none)]> USE pdns;
  Database changed
  MariaDB [pdns]>

Gevolgd door de database-tabellen specifiek voor de Authoritative Server. Daarvoor hebben we de definities zoals die op de website van PowerDNS zelf staan [1] overgenomen:

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) CHARACTER SET 'utf8' DEFAULT NULL,
  PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';

CREATE UNIQUE INDEX name_index ON domains(name);


CREATE TABLE records (
  id                    BIGINT 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 CHARACTER SET 'latin1';

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


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


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) CHARACTER SET 'utf8' DEFAULT NULL,
  comment               TEXT CHARACTER SET 'utf8' NOT NULL,
  PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';

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 CHARACTER SET 'latin1';

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 CHARACTER SET 'latin1';

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 CHARACTER SET 'latin1';

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

1.7 Configuratie van de PowerDNS Authoritative Server

Na het opzetten van de MariaDB server en onze 'pdns' database kunnen we verder met de configuratie van de Authoritative Server zelf. Daarvoor voegen we om te beginnen deze 'launch'-opdracht voor het MySQL/MariaDB backend toe aan het configuratiebestand '/etc/pdns/pdns.conf':

  launch=gmysql
  gmysql-host=127.0.0.1
  gmysql-port=3306
  gmysql-user=pdns
  gmysql-password=************
  gmysql-dbname=pdns
  gmysql-dnssec=yes

Let op het laatste statement om de ondersteuning van DNSSEC aan te zetten. De rest (timing, herondertekening, sleutelbeheer en dergelijke) volgen dan vanzelf. Dit 'gmysql' backend zal straks worden geladen bij het (her)starten van de Authoritative Server. Let op dat halverwege de configuratie-template een verdwaald 'lauch=' statement staat. Dus als je de melding "Unable to launch, no backends configured for querying" krijgt, controleer dan eerst of je configuratiebestand verder helemaal schoon is. Andere eerste configuratie-opties betreffen de IP-adressen waarop de Authoritative Server luistert voor binnenkomende DNS queries en het adres dat de server zelf gebruikt om uitgaande verbindingen te initiëren:

local-address=192.0.2.3 local-ipv6=2001:db8::2:3 query-local-address=192.0.2.3 query-local-address6=2001:db8::2:3

Daarnaast moet je alle Modes of Operation behalve de native mode (default) expliciet aanzetten in het configuratiebestand:

master=yes of: slave=yes of: slave=yes, in combinatie met: superslave=yes

1.8 Generieke backends

Voor MySQL/MariaDB, ODBC, Oracle, PostgreSQL en SQLite3 levert PowerDNS (vanaf versie 4.0.0) generieke backends. Deze bevatten algemene SQL-commando's die je zelf makkelijk kunt aanpassen via het configuratiebestand. Zo kun je de backend-database interface op maat maken voor jouw specifieke set-up en database schema. Dit is de opdracht waarmee je alle SQL queries ingebakken in het generieke MySQL/MariaDB backend kunt laten zien:

  pdns_server --no-config --launch=gmysql --config

De hele lijst van opties is te lang om integraal af te drukken, maar hier zie je bijvoorbeeld de query die gebruikt wordt om een nieuw domein aan de database toe te voegen:

#################################
# gmysql-insert-zone-query	
#
# gmysql-insert-zone-query=insert into domains
#   (type,name,master,account,last_check,notified_serial)
#   values(?,?,?,?,NULL,NULL)

De details van de generieke interface worden hier beschreven. Daar lees je hoe je verschillende records naar de 'domain' en 'records' tabellen en de administratieve tabel 'supermasters' schrijft voor verschillende server-configuraties (native/Slave/Superslave/Master). Nieuwe slave domeinen worden binnen 60 seconden ('slave-cycle-interval') opgehaald en geactiveerd. Daarna is de TTL van het SOA record bepalend voor de volgende check. Op een Master server wordt 'slave-cycle-interval' gebruikt voor het uitsturen van NOTIFY-berichten.

1.9 Opstarten van de PowerDNS Authoritative Server

Starten we de Authoritative Server nu op, dan moet deze via het 'gmysql' backend verbinding maken met de eerder geconfigureerde database:

[root@localhost ~]# systemctl enable pdns.service
Created symlink from /etc/systemd/system/multi-user.target.wants/pdns.service
    to /usr/lib/systemd/system/pdns.service.

[root@localhost ~]# systemctl start pdns.service

[root@localhost pdns]# systemctl status pdns.service
● pdns.service - PowerDNS Authoritative Server
   Loaded: loaded (/usr/lib/systemd/system/pdns.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2019-08-16 17:07:06 CEST; 4s ago
     Docs: man:pdns_server(1)
           man:pdns_control(1)
           https://doc.powerdns.com
 Main PID: 3678 (pdns_server)
    Tasks: 8
   CGroup: /system.slice/pdns.service
           └─3678 /usr/sbin/pdns_server --guardian=no --daemon=no --disable-syslog --log-timestamp=no --write-pid=no

Aug 16 17:07:03 localhost.localdomain pdns_server[3678]: TCP server bound to 0.0.0.0:53
Aug 16 17:07:04 localhost.localdomain pdns_server[3678]: TCPv6 server bound to [::]:53
Aug 16 17:07:04 localhost.localdomain pdns_server[3678]: PowerDNS Authoritative Server 4.1.13 (C) 2001-2018 PowerDNS.COM BV
Aug 16 17:07:04 localhost.localdomain pdns_server[3678]: Using 64-bits mode. Built using gcc 4.8.5 20150623 (Red Hat ...81d.
Aug 16 17:07:04 localhost.localdomain pdns_server[3678]: PowerDNS comes with ABSOLUTELY NO WARRANTY. This is free sof...n 2.
Aug 16 17:07:06 localhost.localdomain pdns_server[3678]: Polled security status of version 4.1.13 at startup, no know...: OK
Aug 16 17:07:06 localhost.localdomain pdns_server[3678]: Creating backend connection for TCP
Aug 16 17:07:06 localhost.localdomain systemd[1]: Started PowerDNS Authoritative Server.
Aug 16 17:07:06 localhost.localdomain pdns_server[3678]: About to create 3 backend threads for UDP
Aug 16 17:07:06 localhost.localdomain pdns_server[3678]: Done launching threads, ready to distribute questions
Hint: Some lines were ellipsized, use -l to show in full.

Zoals je hieronder kunt zien luistert de Authoritative Server nu op alle netwerk-interfaces naar UDP en TCP voor poortnummer 53, en dat voor zowel IPv4 als IPv6:

[root@localhost ~]# netstat -lntup | grep pdns
tcp     0    0 0.0.0.0:53    0.0.0.0:*    LISTEN    3757/pdns_server
tcp6    0    0 :::53         :::*         LISTEN    3757/pdns_server
udp     0    0 0.0.0.0:53    0.0.0.0:*              3757/pdns_server
udp6    0    0 :::53         :::*                   3757/pdns_server

Deel II Management

2.1 Database-interface

Bij de Authoritative Server fungeert meestal de database als interface tussen de infrastructuur van DNS-servers enerzijds en de administratieve omgeving anderzijds. Domeinen en bijbehorende records worden aangemaakt en aangepast in de database, waarna deze informatie automatisch door de Authoritative Server wordt opgenomen voor publicatie en naar eventuele slaves gedistribueerd. Voor zo'n complex systeem als DNS is het database schema onder de Authoritative Server (zie hierboven) verbazingwekkend eenvoudig. De 'records' tabel bevat 2 velden die specifiek voor DNSSEC zijn bedoeld:

  • 'auth': deze moet 1/true zijn voor alle DNS-records waarvoor deze zone autoritatief is, behalve voor NS en glue records voor gedelegeerde zones

  • 'ordername': deze moet ingevuld worden bij gebruik van NSEC/NSEC3; de waarde is afhankelijk van het record type en de gebruikte NSEC/NSEC3 modus

Maar we raden je aan de management-ingang, de web-interface of de web API (alledrie hierna beschreven) te gebruiken. Dat is eenvoudiger, minder gevoelig voor fouten en makkelijker te onderhouden. Bij binnenkomende zone transfers of gebruik van het commando 'pdnsutil rectify-zone' worden deze twee velden automatisch door de Authoritative Server ingevuld. De standaard installatie van PowerDNS gebruikt NSEC. We raden je aan om daar NSEC3 van te maken door het NSEC3PARAM record te zetten, waarmee je beschermd bent tegen name walking:

  pdnsutil set-nsec3 example.nl '1 0 10 d06f00d'

2.2 Management-ingang

De Authoritative Server biedt een beheersingang op TCP poort 53000 en op de Unix socket '/var/run/pdns.controlsocket'. Deze twee interfaces bieden exact dezelfde functionaliteit voor server-georiënteerde beheerszaken (server-configuratie, statistieken, en het initiëren van DNS transfers en notificaties). Voor het openzetten van de management-ingang voor localhost en lokale netwerken voeg je deze statements aan het configuratiebestand toe:

  tcp-control-address=127.0.0.1
  tcp-control-port=53000
  tcp-control-range=127.0.0.0/8, 10.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12,
      ::1/128, fe80::/10
  tcp-control-secret=************

De locatie van de Unix socket wordt als volgt geconfigureerd:

  socket-dir=/var/run/

Als je deze interface direct zou willen gebruiken, dan kun je de opdracht 'telnet localhost 53000' geven. Na het intypen van het password kun je dan één commando geven voordat de verbinding weer afgesloten wordt. Maar in het algemeen benader je deze ingang via het 'pdns_control'-commando. De algemene syntax is als volgt:

pdns_control <command> <arguments>

Zie hier de man page, of gebruik de opdracht 'pdns_control --help'. Andere opdrachten geven direct de output zoals verkregen via de beheersingang door. Zie hier bijvoorbeeld voor de opdracht 'pdns_control help':

[root@localhost ~]# pdns_control help
ccounts                          get cache statistics
current-config                   retrieve the current configuration
list-zones [master|slave|native] show list of zones
notify <domain>                  queue a notification
notify-host <domain> <host>      notify host for specific domain
purge [<record>]                 purge entries from packet cache
qtypes                           get QType statistics
quit                             quit daemon
rediscover                       discover any new zones
reload                           reload all zones
remotes                          get top remotes
respsizes                        get histogram of response sizes
retrieve <domain>                retrieve slave domain
rping                            ping instance
set <var> <value>                set config variables
show <statistic>                 show a specific statistic or * to get a list
token-login <module> <slot> <pin> Login to a PKCS#11 token
uptime                           get instance uptime
version                          get instance version

Voor de duidelijkheid: deze hulp is dus niet afkomstig van het pdns_control programma zelf, maar een dump van de 'help'-opdracht zoals die via de control socket naar de server is gestuurd. Om ditzelfde op afstand via de netwerk-interface te doen, geef je deze opdracht:

  pdns_control --remote-address=192.0.2.3 --remote-port=53000
      --secret=************ help

2.3 Web-interface

Naast deze tekst-georiënteerde management-ingang biedt de Authoritative Server ook een ingebouwde webserver. Je zet deze als volgt aan en open (hier op poort 8081) voor localhost en lokale netwerken:

  webserver=yes
  webserver-address=127.0.0.1
  webserver-port=8081
  webserver-allow-from=127.0.0.0/8, 10.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12,
    ::1/128, fe80::/10
  webserver-password=************
  webserver-print-arguments=no
  webserver-loglevel=normal  [vanaf versie 4.2.0]

Zoals je vervolgens in je eigen scherm (na het openzetten van poort 8081 in je firewall) of in onderstaand screenshot kunt zien, levert deze webserver alleen een ingang voor (performance) monitoring van je server.

PDNS-web-screenshot0

2.4 Web API

Als volwaardige interface biedt de Authoritative Server een web API, gebaseerd op REST en JSON volgens de OpenAPI Specification (Swagger). Deze interface maakt gebruikt van dezelfde webserver als de web-interface maar biedt naast statistieken ook functies voor het aanpassen van zone-informatie, metadata en DNSSEC-sleutelmateriaal. Aanzetten van de web API doe je als volgt:

api=yes api-key=************

Het voert te ver om hier te laten zien hoe je tegen de web API van de Authoritative Server aan programmeert, maar de beschikbaarheid van de web API is wel makkelijk te testen:

curl -v -H 'X-API-Key: ************' http://127.0.0.1:8081/api/v1/servers/localhost

[offerman@vegas DNSSEC2]$ curl -v -H 'X-API-Key: ************'
    http://192.0.2.3:8081/api/v1/servers/localhost
*   Trying 192.0.2.3...
* TCP_NODELAY set
* Connected to 192.0.2.3 (192.0.2.3) port 8081 (#0)
> GET /api/v1/servers/localhost HTTP/1.1
> Host: 192.0.2.3:8081
> User-Agent: curl/7.53.1
> Accept: */*
> X-API-Key: ************
> 
< HTTP/1.1 200 OK
< Access-Control-Allow-Origin: *
< Connection: close
< Content-Length: 248
< Content-Security-Policy: default-src 'self'; style-src 'self' 'unsafe-inline'
< Content-Type: application/json
< Server: PowerDNS/4.1.13
< X-Content-Type-Options: nosniff
< X-Frame-Options: deny
< X-Permitted-Cross-Domain-Policies: none
< X-Xss-Protection: 1; mode=block
<
* Closing connection 0

Voor de volledige beschrijving van de web API verwijzen we je naar de documentatie van PowerDNS of de machine-leesbare Swagger interface-specificatie hier.

2.5 Bind backend

Voordat we overgaan tot de beschrijving van de DNSSEC-specifieke functionaliteit van de Authoritative Server besteden we hier eerst nog aandacht aan het Bind backend. Juist de 'flick the switch'-ondersteuning van DNSSEC was voor veel operators immers de reden om hun DNS-infrastructuur naar PowerDNS te migreren [1, 2]. Het Bind backend, laat je een (beperkt) 'named.conf' configuratiebestand met bijbehorende zone files inlezen. Omdat het hier niet om een database gaat (dynamisch) maar om bestanden (statisch), kan de Authoritative Server deze connector alleen gebruiken om zone-informatie in te lezen (read-only backend, behalve voor slave zones). Het Bind backend is op het CentOS/RHEL-platform standaard onderdeel van de Authoritative Server, en hoeft dus niet apart geïnstalleerd te worden. Voor deze bespreking hebben we deze connector gecombineerd met die voor MySQL/MariaDB. De configuratie daarvoor ziet er als volgt uit:

 launch=bind

  bind-config=/etc/pdns/named.conf
  bind-check-interval=600

Daarbij hebben we twee eenvoudige configuratiebestanden 'named.conf' en 'db.example.nl' gecreëerd en in de directory '/etc/pdns/' geplaatst. Het Bind backend ondersteunt maar een handvol van de normale opties in 'named.conf':

  • options

    • directory

    • also-notify

  • zone

    • file

    • type

    • masters

    • also-notify

Dit is de inhoud van de 'named.conf' file die we gebruiken om de DNS-server voor ons domein example.nl te initiëren:

  options {
      directory "/etc/pdns";
      };
  zone "example.nl" {
      type master;
      file "db.example.nl";
      };

In de log file kunnen we vervolgens zien dat de betreffende zone succesvol is ingelezen:

Sep 15 18:02:47 localhost pdns_server: [bindbackend] Parsing 1 domain(s), will report when done
Sep 15 18:02:47 localhost pdns_server: [bindbackend] Done parsing domains, 0 rejected, 1 new, 0 removed

2.6 Gecombineerde backends

Voor ingewikkelder migraties kun je meerdere backends met elkaar combineren door ze achter elkaar in het 'launch' statement te zetten:

 launch=gmysql,bind

Bij het beantwoorden van binnenkomende DNS queries worden de verschillende backends in die specifieke volgorde bevraagd. Heb je meerdere backends van hetzelfde type (meestal op verschillende servers), dan kun je die een aparte naam geven:

 launch=gmysql,gmysql:server2,bind

In dit voorbeeld is er naast de eerste MySQL/MariaDB-server nog een tweede database server in dienst. Verdere configuratie van die tweede server doe je door de server-naam als volgt in de configuratie-opties te verwerken:

  gmysql-server2-host=192.0.2.14
  gmysql-server2-port=3306
  gmysql-server2-user=pdns
  gmysql-server2-password=************
  gmysql-server2-dbname=pdns
  gmysql-server2-dnssec=yes

Maar let op: het Bind backend mag maar één enkele keer in het 'launch' statement gebruikt worden. Extra zone files moet je dus aan de bestaande 'named.conf' configuratie toevoegen. Het gebruik van gecombineerde backends wordt door PowerDNS zelf afgeraden als daar geen goede redenen voor zijn. Deze mogelijkheid is nog niet goed uitgedefinieerd en kan bij updates dus voor verrassingen zorgen.

2.7 Meer opties voor het Bind backend

Andere Bind-specifieke opties voor in het configuratiebestand van de Authoritative Server zijn:

  • bind-dnssec-db: een file voor het opslaan van DNSSEC meta-informatie; nodig als deze server als slave fungeert voor een (al elders) ondertekende zone.

  • bind-check-interval: deze optie gebruik je in het algemeen als je de informatie in de zone files regelmatig verandert; maar hiermee kun je ook makkelijk een combinatie opzetten met OpenDNSSEC, waarbij je de zone files automatisch laat ondertekenen en wegschrijven, waarna die ondertekende zones ook weer automatisch worden opgepakt door de Authoritative Server.

Daarnaast is er voor Masters een hybride Bind modus. Daarbij komt de zone-informatie uit het Bind backend, maar worden de ondertekening en het sleutelbeheer door de Authoritative Server gedaan. De DNSSEC-gerelateerde records worden in een ander backend opgeslagen, typisch SQLite3 (embedded). Daarmee is dit een logisch vervolg op de gecombineerde backends zoals hierboven beschreven, waarbij de verschillende backends in volgorde worden bevraagd bij het beantwoorden van binnenkomende queries. Net als voor de gecombineerde backends raadt PowerDNS het gebruik van de hybride mode af als daar geen goede redenen voor zijn.

2.8 Migratie naar PowerDNS

De documentatie van PowerDNS geeft nog diverse relatief makkelijke manieren om je oude DNS-informatie naar de Autoritative Server te migreren:

  • door alle bestaande domeinen eerst als slave aan te maken op de Autoritative Server, en deze domeinen na de zone transfer op de Autoritative Server om te schakelen naar master/native mode;

  • door de zone files zelf naar (generieke) SQL te converteren met behulp van de tool 'zone2sql';

  • of door de zone files direct in te lezen met behulp van het 'pdnsutil load-zone'-commando.

Daarnaast is er het 'pdnsutil b2b-migrate'-commando waarmee zones binnen de Autoritative Server zelf over verschillende backends gemigreerd kunnen worden. Daarmee kun je de Autoritative Server ook gebruiken als een tool om allerlei backend/platform conversies op je zone files te doen.

Deel III DNSSEC-specifieke opties en commando's

In dit derde en laatste deel besteden we aandacht aan de DNSSEC-specifieke opties en commando's die nog niet in het voorafgaande aan bod zijn gekomen.

3.1 Cryptografische algoritmen

Daarbij beginnen we met de configuratie-opties voor de cryptografische algoritmen:

PowerDNS geeft een lijst van ondersteunde algoritmen, maar of deze ook daadwerkelijk allemaal beschikbaar zijn is afhankelijk van de opties meegegeven bij het compileren van de software. Je kunt een overzicht opvragen met het 'pdnsutil list-algorithms'-commando:

  [root@localhost ~]# pdnsutil list-algorithms
  DNSKEY algorithms supported by this installation of PowerDNS:
  5 - RSASHA1
  7 - RSASHA1-NSEC3-SHA1
  8 - RSASHA256
  10 - RSASHA512
  13 - ECDSAP256SHA256
  14 - ECDSAP384SHA384
  15 - ED25519

Hoewel de Authoritative Server dus ook diverse andere cryptografische algoritmen voor DNSSEC [1, 2] ondersteunt, raden we je aan om ECDSA256 te (blijven) gebruiken [3, 4]. Voor wie meer wil weten over de verschillen tussen de cryptografische algoritmen hebben we een aparte sectie op onze 'DNSSEC – Veelgestelde vragen'-pagina geschreven.

3.2 Random generator

Bij het kiezen van het cryptografische algoritme is het belangrijk te weten dat vooral DSA-gebaseerde algoritmen zijn erg gevoelig zijn voor een slecht geïnitialiseerde random generator. Dat kan dus resulteren in een onveilig sleutelpaar. Voor productiesystemen moet daarom altijd deze optie worden gebruikt:

  entropy-source=/dev/random

Compleet andere random generators kunnen worden geselecteerd met behulp van de 'rng'-optie:

  rng=openssl

Gaat het om een grotere DNS-infrastructuur, dan is omwille van zowel de veiligheid als de schaalbaarheid een bump-in-the-wire architectuur op basis van OpenDNSSEC en een HSM (Hardware Security Module) aan te bevelen. De installatie en configuratie van OpenDNSSEC hebben we in een ander artikel besproken. De Authoritative Server zelf biedt op dit moment experimentele ondersteuning voor PKCS#11.

3.3 Meer DNSSEC-specifieke opties

Hieronder geven we een overzicht van de nog niet besproken DNSSEC-specifieke configuratie-opties:

direct-dnskey=no als deze optie aanstaat worden ook de DNSKEY-, CDS- en CDNSKEY-records uit de zone-informatie ingelezen
dnssec-key-cache-ttl=30 het aantal seconden dat DNSSEC-sleutels uit de database in de cache worden bewaard
max-nsec3-iterations=500 maximaal aantal NSEC3 iteraties;
zet deze op 150 bij gebruik van ECDSA
max-signature-cache-entries maximaal aantal handtekeningen dat in de cache bewaard kan worden
signing-threads=3 aantal threads dat de server mag gebruiken bij het ondertekenen van domeinen

3.4 Het 'pdnsutil'-commando

In deze sectie bespreken we het 'pdnsutil'-commando. Dit is het commando dat je als operator waarschijnlijk direct (via de command line) of indirect (in scripts) het meest zult gebruiken bij het beheer van je (ondertekende) zones. Het 'pdnsutil'-commando grijpt direct aan op de database, wat betekent dat je je opdrachten ook makkelijk via het netwerk kunt uitvoeren. Het programma maakt daarbij gebruik van het locale PDNS configuratiebestand. Het 'pdnsutil'-commando droeg eerder de naam 'pdnssec', en dat zie je duidelijk terug in de geboden functionaliteit. Hieronder geven we een overzicht van de DNSSEC-specifieke functies die door dit commando worden ondersteund. In de volgende sectie gebruiken we deze opdrachten om onze zone example.nl te ondertekenen.

activate-zone-key < zone > < key-id > activeer sleutel < key-id > voor < zone >
deactivate-zone-key < zone > < key -id> deactiveer sleutel < key-id > voor < zone >
add-zone-key < zone > KSK/ZSK [active/inactive] genereer een nieuw sleutelpaar voor < zone >, en gebruik ' active ' om de zone direct te ondertekenen
create-bind-db < file > creëer de (embedded) DNSSEC database (SQLite3) voor de hybride Bind modus
(vergeet niet deze file in te stellen in de
disable-dnssec < zone > deactiveer DNSSEC voor < zone >
export-zone-dnskey < zone > < key-id > exporteer (dump) DNSKEY en DS records voor sleutel < key-id > in < zone >
export-zone-ds < zone > exporteer (dump) alle KSK DS records in < zone >
(waarna je deze kunt uploaden naar de beheerder van het bovenliggende domein voor publicatie)
export-zone-key < zone > < key-id > exporteer (dump) de volledige sleutelinformatie (inclusief private key) voor < key-id > in < zone >
generate-zone-key KSK/ZSK [algorithm] [keybits] genereer (en dump) een nieuw sleutelpaar (default cryptografisch algoritme: ECDSA256)
import-zone-key < file > KSK/ZSK importeert een sleutelpaar uit < file > in < zone >
list-keys [zone] laat alle sleutelparen zien (voor < zone >)
rectify-zone < zone > maak de database-velden 'auth' en 'ordername' opnieuw aan voor
rectify-all-zones maak de database-velden 'auth' en 'ordername' opnieuw aan voor alle zones
remove-zone-key < zone > < key-id > verwijder sleutel < key-id > uit < zone >
secure-zone < zone > onderteken < zone > (volgens default-instellingen)
secure-all-zones [increase-serial] onderteken alle zones (en verhoog daarbij het serial-nummer)
set-nsec3 < zone > geef de NSEC3-instellingen voor < zone >;
de parameter-string bevat de informatie die in het NSEC3PARAM record wordt opgenomen;
de 'narrow'-optie zet de ondersteuning van White Lies volgens RFC 7129 (Appendix B) aan (ter voorkoming van zone walking)
unset-nsec3 < zone > converteer een NSEC3-instelling van < zone > terug naar NSEC
set-presigned < zone > gebruik de meegeleverde in-zone) DNSSEC-records voor
unset-presigned < zone > gebruik niet langer de in-zone DNSSEC-records voor < zone >
show-zone < zone > laat alle DNSSEC-gerelateerde instellingen voor < zone > zien
set-publish-cds < zone > [digestalgos] publiceer de CDS records van ;
unset-publish-cds < zone > deactiveer de publicatie van CDS records voor < zone >
set-publish-cdnskey < zone > publiceer de CDNSKEY records van < zone >
unset-publish-cdnskey < zone > deactiveer de publicatie van CDNSKEY records voor < zone >

Voor de overige functies van het 'pdnsutil'-commando verwijzen we je naar de man page.

3.5 Ondertekening van een zone

Na al dit voorwerk om de PowerDNS Autoritative Server te installeren, te configureren en een beetje beter te leren kennen, zijn we toe aan de daadwerkelijke ondertekening van onze zone example.nl. Daarbij gaan we uit van de hiervoor beschreven installatie, waarbij deze zone via het Bind backend wordt ingelezen. Omdat dit backend read-only is, creëren we hiermee een hybride Bind-configuratie, waarbij de zone-informatie uit het Bind backend komt maar de ondertekening en het sleutelbeheer door de Authoritative Server gedaan wordt. De handtekeningen (RRSIG records) en het sleutelmateriaal voor het domein wordt in een (embedded) SQLite3 database opgeslagen. Daartoe moeten we om te beginnen deze database aanmaken (als dat nog niet gebeurd is), en genereren we vervolgens de KSK- en ZSK-sleutelparen, waarmee we vervolgens de zone example.nl ondertekenen. Hieronder laten we het hele proces zien, aangevuld met wat commando's om de huidige status weer te geven.

[root@localhost ~]# pdnsutil create-bind-db /etc/pdns/bind-db.sqlite3

[root@localhost ~]# pdnsutil add-zone-key example.nl KSK inactive ecdsa256
Sep 19 17:50:40 [bindbackend] Done parsing domains, 0 rejected, 1 new, 0 removed
Added a KSK with algorithm = 13, active=0
1

[root@localhost ~]# pdnsutil add-zone-key example.nl ZSK inactive ecdsa256
Sep 19 17:51:07 [bindbackend] Done parsing domains, 0 rejected, 1 new, 0 removed
Added a ZSK with algorithm = 13, active=0
2

[root@localhost ~]# pdnsutil list-keys example.nl
Sep 19 17:52:31 [bindbackend] Done parsing domains, 0 rejected, 1 new, 0 removed
Zone          Type    Size    Algorithm          ID    Location     Keytag
--------------------------------------------------------------------------
example.nl    ZSK     256     ECDSAP256SHA256    2     cryptokeys    7300
example.nl    KSK     256     ECDSAP256SHA256    1     cryptokeys    4293

[root@localhost ~]# pdnsutil set-nsec3 example.nl '1 0 150 d06f00d'
NSEC3 set, please secure and rectify your zone.

[root@localhost ~]# pdnsutil set-publish-cdnskey example.nl
[root@localhost ~]# pdnsutil set-publish-cds example.nl

[root@localhost ~]# pdnsutil activate-zone-key example.nl 1
[root@localhost ~]# pdnsutil activate-zone-key example.nl 2

[root@localhost ~]# pdnsutil check-zone example.nl
Sep 19 17:53:14 [bindbackend] Done parsing domains, 0 rejected, 1 new, 0 removed
Checked 19 records of 'example.nl', 0 errors, 0 warnings.

[root@localhost ~]# pdnsutil show-zone example.nl
Sep 19 18:01:16 [bindbackend] Done parsing domains, 0 rejected, 1 new, 0 removed
This is a Master zone
Last SOA serial number we notified: 0 != 2017101300 (serial in the database)
Metadata items: 
	NSEC3PARAM	1 0 150 d06f00d0
	PUBLISH-CDNSKEY	1
	PUBLISH-CDS	1,2
Zone has hashed NSEC3 semantics, configuration: 1 0 150 d06f00d0
keys: 
ID = 2 (ZSK), flags = 256, tag = 7300, algo = 13, bits = 256    Active ( ECDSAP256SHA256 )
ID = 1 (KSK), flags = 257, tag = 4293, algo = 13, bits = 256    Active ( ECDSAP256SHA256 )
KSK DNSKEY = example.nl. IN DNSKEY 257 3 13 y5JN0NxY8vYMyKDSR3D+6lJDJmQUAp1SsCRaMSOPSAMGvslhBOy4GXQxeMpxmhvM4aFdHAm09TtGwirSBS/ULw==
    ; ( ECDSAP256SHA256 )
DS = example.nl. IN DS 4293 13 1 78776d2a17958d3bac818b26172477119f4c2213
    ; ( SHA1 digest )
DS = example.nl. IN DS 4293 13 2
    a31facbfd1dff2003b91bb4348bd923dc9dabab3987b70371af1e6fc8eb7eda2
    ; ( SHA256 digest )
DS = example.nl. IN DS 4293 13 4 3bd91b55b497a11a27efbb63bd97180b3946186257f6f02b3ce780d7c837fb419206ba70891c3fd45a4a3071f9e83172
    ; ( SHA-384 digest )

[root@localhost ~]# pdnsutil export-zone-dnskey example.nl 1
example.nl IN DNSKEY 257 3 13 y5JN0NxY8vYMyKDSR3D+6lJDJmQUAp1SsCRaMSOPSAMGvslhBOy4GXQxeMpxmhvM4aFdHAm09TtGwirSBS/ULw==

[root@localhost ~]# pdnsutil export-zone-ds example.nl 
Sep 19 18:07:06 [bindbackend] Done parsing domains, 0 rejected, 1 new, 0 removed
example.nl. IN DS 4293 13 1
    78776d2a17958d3bac818b26172477119f4c2213 ; ( SHA1 digest )
example.nl. IN DS 4293 13 2
    a31facbfd1dff2003b91bb4348bd923dc9dabab3987b70371af1e6fc8eb7eda2
    ; ( SHA256 digest )
example.nl. IN DS 4293 13 4 3bd91b55b497a11a27efbb63bd97180b3946186257f6f02b3ce780d7c837fb419206ba70891c3fd45a4a3071f9e83172
    ; ( SHA-384 digest )

Welke sleutelinformatie je nodig hebt om de cryptografische koppeling (een schakel in de chain of trust) te maken met het bovenliggende domein, hangt af van de registry. Wij als beheerder van het .nl top-level domein vragen onze registrars niet om de DS records maar om de DNSKEY records. Door uit die DNSKEY records zelf de DS records te genereren, houden wij controle over het daarbij gebruikte hash-algoritme. Maak je een vergelijkbare hybride set-up, vergeet dan niet om de locatie van de SQLite3 database aan de configuratie van de Autoritative Server toe te voegen:

  bind-dnssec-db=/etc/pdns/bind-db.sqlite3

3.6 Alles in één keer ondertekend

Wil je een bestaande zone in één keer ondertekenen, uitgaande van de defaults, dan kun je de hele klus uitvoeren met behulp van slechts twee opdrachten:

  pdnsutil secure-zone example.nl

  pdnsutil rectify-zone example.nl

Maar dat kan ook in één keer voor alle domeinen:

  pdnsutil secure-all-zones

  pdnsutil rectify-all-zones

Als je de eenvoud hiervan vergelijkt met de configuratie van DNSSEC op andere DNS-server software, dan begrijp je gelijk waarom de PowerDNS Autoritative Server zo populair was bij de introductie van DNSSEC (voor de .nl-zone sterk gedreven door de incentive-regeling voor registrars).

3.7 Dynamische Lua records

Als laatste willen we hier nog de in Autoritative Server ingebouwde Lua engine bespreken. Lua is een wat ongelukkig ontworpen taal, maar als embedded engine wel enorm handig om gebruikers een run-time scripting-ingang tot je software te geven. Voor ontwikkelaars is het namelijk heel makkelijk om snel nieuwe interfaces naar hun C-code toe te voegen. Met behulp van de ingebouwde Lua-faciliteit (vanaf versie 4.2) kun je de antwoorden van de DNS-server afhankelijk maken van de huidige omstandigheden. Dat doe je door kleine stukjes Lua-code in je DNS-records op te nemen, waarmee de response van de server dynamisch bepaald wordt op het moment dat er een query voor het betreffende record binnen komt. Een eenvoudig voorbeeld maakt het een stuk duidelijker:

  www    IN    LUA    A    "pickclosest({'192.0.2.14','198.51.100.14'})"

Hier krijgt de bevrager de dichtstbijzijnde server terug in de response. Daarbij wordt gebruik gemaakt van het GeoIP backend om de kortste (fysieke) afstand tussen bevrager en host te bepalen. Om de dynamische Lua records te kunnen gebruiken, moet je eerst deze configuratie-optie aan zetten:

  enable-lua-records=yes

of per zone:

  ENABLE-LUA-RECORDS = 1

Daarnaast is er nog een instelling waarbij de scripts bij executie niet steeds een aparte maar een gedeelde context (per thread) krijgen. Deze mogelijkheid activeer je als volgt:

  enable-lua-records=shared

Omdat de inhoud van de records dynamisch bepaald wordt, kunnen Lua records niet worden gecombineerd met presigned zones. Dat betekent dat de Authoritative Server de DNS responses alleen on-the-fly kan ondertekenen, en dat daarvoor ook de private sleutel op de publieke servers aanwezig moet zijn. Het is de bedoeling dat de dynamische Lua records gestandaardiseerd worden, zodat deze feature tezijnertijd ook door andere DNS server software geïmplementeerd kan worden. Meer informatie over de dynamische Lua records vind je hier.

3.8 Afsluitend

De PowerDNS Autoritative Server is nogal uitgebreid, waardoor het even kan duren voordat je je weg hebt gevonden, maar de software heeft een mooie architectuur: de DNS-server zelf fungeert als centrale spil met daaromheen allerlei in- en uitgangen. Via de backend connectors gaat het naar de onderliggende databases. Transfers naar andere Autoritative Servers kunnen eenvoudig plaatsvinden via database replicatie. Naast directe toegang tot de database zijn er de web-interface en API, en de control socket met bijbehorende command line tools. Opvallende features van de PowerDNS Autoritative Server zijn de 'flick the switch'-ondersteuning van DNSSEC (zoals je ziet spreken we in dit artikel nergens over timing, herondertekening en sleutelbeheer), de dynamische Lua records, en de mogelijkheid om zone-informatie tussen verschillende formaten te converteren door deze van de ene naar de andere back-end over te zetten. Meer informatie over de PowerDNS Autoritative Server vind je hier [1, 2, 3].

  • dinsdag 8 mei 2018

    Over SIDN

    Kom naar DHPA TechFest!

    DHPA+Techfest+tumbnail

    Op 24 mei is DHPA TechFest in Naarderbos in Naarden.

    Lees meer
  • dinsdag 5 februari 2019

    Kennis

    Speel de online security game Hackshield en win een boek over het internet

    Hackshield+thumb

    Doe mee en win!

    Lees meer
  • maandag 5 november 2018

    Over SIDN

    De toekomst van online authenticatie

    online-authenticatie-thumbnail1

    Download de whitepaper 'De toekomst van online authenticatie' van Connectis

    Lees meer

Sorry

De versie van de browser die je gebruikt is verouderd en wordt niet ondersteund.
Upgrade je browser om de website optimaal te gebruiken.