Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
|
informatique:linux:powerdns [2024/04/12 08:40] benoit [Configuration] |
informatique:linux:powerdns [2024/04/12 13:00] (Version actuelle) benoit [Installation] |
||
|---|---|---|---|
| Ligne 3: | Ligne 3: | ||
| ===== Introduction ===== | ===== Introduction ===== | ||
| - | Ce tutoriel présente l'installation de PowerDNS avec une base de données en arrière plan. | + | :!: 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 ===== | ||
| Ligne 9: | Ligne 11: | ||
| Installation : | Installation : | ||
| - | apt-get install pdns-server pdns-tools pdns-backend-mysql pdns-recursor | + | 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 ===== | ===== Configuration ===== | ||
| - | Se rendre dans le répertoire et sauvegarder les fichiers de conf originaux et créer des nouveau: | ||
| - | cd /etc/powerdns | ||
| - | mv pdns.conf pdns.conf.orig | ||
| - | mv recursor.conf recursor.conf.orig | ||
| - | touch pdns.conf recursor.conf | ||
| - | chown root:pdns pdns.conf | ||
| - | Editer le fichier de configuration : | + | ==== Base de données ==== |
| - | vim /etc/powerdns/pdns.conf | + | |
| + | 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 : | Insérer le contenu suivant : | ||
| - | # Allow zonetransfers only to these subnets | + | # Backend MySQL |
| - | allow-axfr-ips=127.0.0.0/8,::1 | + | |
| - | # Allow recursive queries | + | |
| - | allow-recursion=127.0.0.1 | + | |
| - | # Disable zonetransfers but do allow TCP queries | + | |
| - | disable-axfr=no | + | |
| - | # Seconds to store packets in the PacketCache | + | |
| - | cache-ttl=20 | + | |
| - | # Which backends to launch and order to query them in (here is MySQL) | + | |
| launch=gmysql | launch=gmysql | ||
| - | # Log under a specific facility | + | # Listening IP |
| - | logging-facility=0 | + | local-address=127.0.0.1 |
| - | # Amount of logging. Higher is more. Do not set below 3 | + | # Listening IP (pdns-recursor will forward DNS queries du this port) |
| - | loglevel=4 | + | local-port=54 |
| - | # | + | # MariaDB Backend Config |
| - | out-of-zone-additional-processing=yes | + | gmysql-host=127.0.0.1 |
| - | # Seconds to store query results in the QueryCache | + | gmysql-port=3306 |
| - | query-cache-ttl=20 | + | gmysql-dbname=powerdns |
| - | # | + | gmysql-user=pdns |
| - | recursive-cache-ttl=150 | + | gmysql-group=client |
| - | recursor=127.0.0.1:54 | + | 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 | ||