Outils pour utilisateurs

Outils du site


informatique:linux:powerdns

PowerDNS

Introduction

:!: EN COURS DE REDACTION :!:

Ce tutoriel présente l'installation de PowerDNS avec une base de données en arrière plan avec gestion des ACL.

Installation

Installation :

apt-get install pdns-server pdns-recursor dnsdist pdns-tools pdns-backend-mysql mariadb-client mariadb-server lua-sql-mysql

Description des composants installés :

  • pdns-server : Serveur DNS privé
  • pdns-recursor : Serveur DNS pour les requêtes recursives vers internet
  • dnsdist : Loadbalancer DNS pouvant utiliser des ACL
  • pdns-tools : Utilitaire pour PowerDNS
  • pdns-backend-mysql : Module pour utiliser MariaDB en backend
  • mariadb-client, mariadb-server : Client et Serveur de base de données MariaDB
  • lua-sql-mysql

Configuration

Base de données

Créer la base de données :

mysql
create database powerdns;
GRANT ALL PRIVILEGES on powerdns.* to 'pdns'@'localhost' IDENTIFIED BY 'xxxxxxxxxxxx';
FLUSH PRIVILEGES;
QUIT;

Créer le fichier de structure de base de données :

vim schema_powerdns.sql

Insérer le contenu suivant :

CREATE TABLE domains (
  id                    INT AUTO_INCREMENT,
  name                  VARCHAR(255) NOT NULL,
  master                VARCHAR(128) DEFAULT NULL,
  last_check            INT DEFAULT NULL,
  type                  VARCHAR(8) NOT NULL,
  notified_serial       INT UNSIGNED DEFAULT NULL,
  account               VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,
  options               VARCHAR(64000) DEFAULT NULL,
  catalog               VARCHAR(255) DEFAULT NULL,
  PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';

CREATE UNIQUE INDEX name_index ON domains(name);
CREATE INDEX catalog_idx ON domains(catalog);


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,
  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,
  published             BOOL DEFAULT 1,
  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);

PowerDNS

Sauvegarde le fichier de conf par défaut, créer un nouveau et l'éditer :

mv /etc/powerdns/pdns.conf /etc/powerdns/pdns.conf.orig
touch /etc/powerdns/pdns.conf
chown root:pdns /etc/powerdns/pdns.conf
vim /etc/powerdns/pdns.conf

Insérer le contenu suivant :

# Backend MySQL
launch=gmysql
# Listening IP
local-address=127.0.0.1
# Listening IP (pdns-recursor will forward DNS queries du this port)
local-port=54
# MariaDB Backend Config
gmysql-host=127.0.0.1
gmysql-port=3306
gmysql-dbname=powerdns
gmysql-user=pdns
gmysql-group=client
gmysql-password=eiur546fTEd6gEaFr
gmysql-dnssec=no
gmysql-innodb-read-committed=yes
gmysql-timeout=10

pdnsutil

Zone/Domaine

Créer une zone :

pdnsutil create-zone domain.local

Ajouter un enregistrement Type A :

pdnsutil add-record domain.local www A 60 127.0.0.1
informatique/linux/powerdns.txt · Dernière modification: 2024/04/12 13:00 par benoit