Migrer de Bind à PowerDNS
Comme toujours, ce guide est plus centré pour les distrubutions Debian et dérivée, mais peut être adapté à d'autres.
Installation
PowerDNS est séparé en deux paquets, pdns-server
et pdns-recursor
, le premier est le serveur DNS alors que le second est le récurseur DNS, il est conseillé de ne pas installer les deux sur la même machine, même si cela est possible.
Vous devrez également installer le paquet pdns-backend-$BACKEND
en fonction du système de backend de stockage des données que vous souhaitez utiliser, ici nous utiliserons MySQL, il nous faudra donc installer pdns-backend-mysql
# apt-get install pdns pdns-recursor pdns-backend-mysql
Préparation
Désactiver DNSSEC sur Bind
Afin de migrer, il est nécessaire de désactiver temporairement DNSSEC sur votre installation de Bind, ceci vous évitera d'avoir des informations DNSSEC inutiles dans la base de données de PowerDNS, celui-ci n'en ayant pas besoin pour utiliser DNSSEC de son coté.
Le plus simple pour se faire est d'avoir gardé une version non DNSSEC à jour de vos fichiers de zones et de changer leur numéro de version avant de relancer BIND.
- Editez la configuration de BIND afin que vos zones n'utilisent plus les fichiers de zones signées.
- Modifiez le numéro de version de vos fichiers de zones non signées.
- Relancez BIND.
Créer la base de données pour PowerDNS
Nous utiliseront ici MySQL comme backend pour stocker nos informations de zones, connectez-vous à MySQL par votre moyen préféré (ligne de commande ou PHPMyAdmin) et créez un utilisateur et une base de données pour PowerDNS. Donnez à l'utilisateur créé les droits sur cette base de données.
Pour créer la base manuellement :
mariadb> CREATE DATABASE pdns; mariadb> GRANT ALL ON pdns.* TO 'pdns'@'localhost' IDENTIFIED BY 'pdnspassword';
Puis, une fois la base de données créée, la structurer comme suit :
mariadb> 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 UNSIGNED DEFAULT NULL, account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL, PRIMARY KEY (id) ) Engine=InnoDB CHARACTER SET 'latin1'; mariadb> CREATE UNIQUE INDEX name_index ON domains(name); mariadb> 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'; mariadb> CREATE INDEX nametype_index ON records(name,type); mariadb> CREATE INDEX domain_id ON records(domain_id); mariadb> CREATE INDEX ordername ON records (ordername); mariadb> 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'; mariadb> 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'; mariadb> CREATE INDEX comments_name_type_idx ON comments (name, type); mariadb> CREATE INDEX comments_order_idx ON comments (domain_id, modified_at); mariadb> 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'; mariadb> CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind); mariadb> 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'; mariadb> CREATE INDEX domainidindex ON cryptokeys(domain_id); mariadb> CREATE TABLE tsigkeys ( id INT AUTO_INCREMENT, name VARCHAR(255), algorithm VARCHAR(50), secret VARCHAR(255), PRIMARY KEY (id) ) Engine=InnoDB CHARACTER SET 'latin1'; mariadb> CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
Installer PowerAdmin
PowerAdmin est une interface web permettant de facilement gérer vos zones, je ne peut que vous conseiller de l'utiliser pour une administration plus simple.
Si vous désirez l'installer dans un sous-domaine, vous devrez mettre une nouvelle fois le fichier de la zone concernée à jour.
Une fois l'archive décompressée et votre serveur web configuré -au besoin-, faites pointer votre navigateur internet vers l'URL où vous avez installé PowerAdmin.
L'installation est assez simple, vous devriez vous en sortir. Pensez à indiquer les paramètre de connexion à MySQL et à exécuter la commande MySQL qu'il vous donnera, vous devrez également créer le fichier inc/config.inc.php
dans le dossier de PowerAdmin avec les informations qu'il vous donnera.
Une fois l'installation terminée, supprimez le dossier install/
dans le répertoire de PowerAdmin.
Configuration
Configurer PowerDNS
Fichier de backend
Le fichier de backend est différent selon celui que vous utilisez, dans notre cas, nous utilisons MySQL, le fichiez est /etc/powerdns/pdns.d/pdns.local.gmysql.conf
.
Editez le est indiquez les informations nécessaires.
Par exemple :
# MySQL Configuration # # Launch gmysql backend launch+=gmysql # gmysql parameters gmysql-dnssec gmysql-host=localhost gmysql-port=3306 gmysql-dbname=pdns gmysql-user=pdns gmysql-password=S3cr37 gmysql-dnssec=yes # gmysql-socket=
Si vous êtes sous Debian 7, pensez à supprimer le fichier /etc/powerdns/pdns.d/pdns.simplebind.conf
, celui-ci est inutile puisque nous utilisons le Backend MySQL, et sa présence, même non configuré, semble gêner PowerDNS dans cette version de Debian.
Fichier pdns.conf
Le fichier de configuration de PowerDNS est /etc/powerdns/pdns.conf
, le fichier est commenté et son édition ne devrait pas vous poser trop de problème.
Voyons quelques options utiles&bnsp;:
allow-axfr-ips=
: Adresses IP, séparés par une virgule, autorisé à faire des demande de transfert de zone. Indiquez ici les IP de vos serveurs DNS esclaves.allow-recursion=127.0.0.0/8, ::1/128
: Réseaux ou adresses IP, séparés par une virgule, autorisés à faire des requêtes récursives sur ce serveur. Indiquez au moins les adresses de boucle locale.also-notify=
: Adresses IP, séparés par une virgule, à notifier en cas de mise à jour d'une zone. Indiquez ici les IP de vos serveurs DNS esclaves.disable-axfr=no
: Activer ou non le transfert de zone, indiquezyes
si vous n'avez pas de serveurs DNS secondaire.launch=gmysql
: Backend à utiliser, ici, MySQLlocal-address=127.0.0.1
: Adresses IPv4 locales, séparés par une virgule, indiquez celles sur lesquelles le service doit écouter.local-ipv6=::1
: Adresses IPv6 locales, indiquez celles sur lesquelles le service doit écouter.master=yes
: Activer ou non le rôle de serveur DNS primaire.recursor=
: Adresse et port, sous la formeAdresseIP:Port
du récurseur DNS.slave=yes
: Activer ou non le rôle de serveur DNS secondaire.tcp-control-range=127.0.0.0/8, ::1/128
: Réseaux ou adresses IP, séparés par une virgule, depuis lesquels la gestion de ce serveur est autorisé. Indiquez au moins les adresses de boucle locale.query-local-address=0.0.0.0
: Adresse où émettre les requêtes de résolution IPv4.query-local-address6=::
: Adresse où émettre les requêtes de résolution IPv6.
Configurer PowerDNS Recursor
Le fichier de configuration de PowerDNS Recursor est /etc/powerdns/recursor.conf
, le fichier est commenté et son édition ne devrait pas, là aussi, vous poser trop de problème.
Qelques options utiles&bnsp;:
allow-from=127.0.0.0/8, ::1/128
: Réseaux ou adresses IP, séparés par une virgule, autorisés à faire des requêtes récursives sur ce serveur. Indiquez au moins les adresses de boucle locale.local-address=127.0.0.1, ::1
: Adresses IPv4 et IPv6 locales, séparés par une virgule, indiquez celles sur lesquelles le service doit écouter.local-port=5353
: Port d'écoute du service.query-local-address=0.0.0.0
: Adresse où émettre les requêtes de résolution IPv4.query-local-address6=::
: Adresse où émettre les requêtes de résolution IPv6.
Si le récurseur DNS est installé sur la même machine que PowerDNS, laissez le port 53 pour le serveur DNS et faites écoutez le récurseur sur un autre port.
Migration
Migrer les zones vers PowerDNS
La migration se faitvia la commande zone2sql
, vous devrez lui indiquer le fichier de configuration de BIND, généralement /etc/bind/named.conf
via l'option --named-conf
et le backend utilisé par PowerDNS via une autre option, comme nous utilisons MySQL, l'option sera --gmysql
.
Le résultat de cette commande doit être inséré dans la base de données MySQL utilisé par PowerAdmin, il est possible de faire celà d'une seule commande via zone2sql --named-conf=/etc/bind/named.conf --gmysql | mysql -u MysqlPdnsUser -p MysqlPdnsDB
Par exemple :
# zone2sql --named-conf=/etc/bind/named.conf --gmysql | mysql -u pdns -p pdns 0% done (/etc/bind/db.local) Warning! Skipping 'hint' zone '' 100% done 10 domains were fully parsed, containing 268 records ******** #Une fois fait, connectez-vous à PowerAdmin et vérifiez que vos zones sont bien présentes, si tous s'est bien passé, vous pouvez arrêter BIND et démarrer PowerDNS Recursor, si utilisé, et PowerDNS.
# systemctl stop bind9 # systemctl start pdns-recursor # systemctl start pdnsVérifiez dans les journaux système est avec les commandes
ps
etss
que les service se sont correctement lancés. De même, utilisez la commandedig
afin de vérifier que PowerDNS est capable de faire une résolution DNS.Sécuriser les zones
Le passage d'une zone vers DNSSEC se fait via la commande
pdnssec secure-zone
suivi du nom de la zone.
Il est possible de vérifier que la zone est bien passé à DNSSEC avec la commandepdnssec show-zone
suivi du nom de la zone.# pdnssec secure-zone test.tld # pdnssec show-zone test.tldVous pouvez ensuite utiliser la commande
pdns_control notify
pour forcer la mise à jour de la zone sur vos serveurs DNS secondaires.# pdns_control notify test.tld