đŸ’Ÿ Archived View for zergy.net â€ș blog â€ș 022-migrer-de-bind-a-powerdns.gmi captured on 2023-07-22 at 16:31:15. Gemini links have been rewritten to link to archived content

View Raw

More Information

âŹ…ïž Previous capture (2023-05-24)

âžĄïž Next capture (2024-05-10)

-=-=-=-=-=-=-

Blog /home/zergy - Migrer de Bind Ă  PowerDNS

AprÚs avoir utilisé Bind pendant des années, l'absence de support simple de DNSSEC par Bind dans Debian 8 m'a fait passer à PowerDNS. Petit guide de migration.

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.

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

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.

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;:

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;:

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 pdns

VĂ©rifiez dans les journaux systĂšme est avec les commandes ps et ss que les service se sont correctement lancĂ©s. De mĂȘme, utilisez la commande dig 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 commande pdnssec show-zone suivi du nom de la zone.

# pdnssec secure-zone test.tld
# pdnssec show-zone test.tld

Vous 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

Accueil du Blog

Accueil de la capsule