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:52] benoit [Base de données] |
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 ===== | ||
| Ligne 22: | Ligne 32: | ||
| GRANT ALL PRIVILEGES on powerdns.* to 'pdns'@'localhost' IDENTIFIED BY 'xxxxxxxxxxxx'; | GRANT ALL PRIVILEGES on powerdns.* to 'pdns'@'localhost' IDENTIFIED BY 'xxxxxxxxxxxx'; | ||
| FLUSH PRIVILEGES; | 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 | ||