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 09:49] benoit [Introduction] |
informatique:linux:powerdns [2024/04/12 13:00] (Version actuelle) benoit [Installation] |
||
---|---|---|---|
Ligne 11: | 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 |