Le Dynamic Name System est un dispositif permettant de retrouver l'adresse IP (178.167.45.32) d'un serveur en connaissant son nom (server1.example.com).
Il existe les serveur de type Authoritative, c'est à dire qu'ils ont l'autorité pour répondre sur un domaine défini, et les serveurs Recursive dont le rôle est de retransmettre à d'autres serveurs les requêtes.
PowerDNS est une suite logicielle comprenant entre autres :
pdns-server
qui est un serveur authoritativepdns-recursor
qui est un serveur recursifpdnsutil
un utilitaire en cli pour configurer pdns-server
pdns-server
et pdns-recursor
peuvent fonctionner en même temps sur une même machine pour servir un domaine privé et adresser le grand internet.
Nous allons mettre en place une config pour un lan, avec des ressources locales (non-accessibles depuis internet), et en donnant un accès internet. Un peu comme expliqué ici.
Dispo dans les paquets debian apt install pdns-server pdns-backend-sqlite3
.
On édite le fichier de conf, étant donné la taille réduite, on va utiliser le backend sqlite3 (parce que le BIND de base ne marche pas chez moi, pkoi ?)
vim /etc/powerdns/pdns.conf
# ne répondre qu'aux requêtes locales et sur un port custom : local-address=127.0.0.1 local-port=5300 launch=gsqlite3 gsqlite3-database=/etc/powerdns/powerdns.sqlite3
Ensuite, on initialise la database :
sqlite3 /etc/powerdns/powerdns.sqlite3 < /usr/share/doc/pdns-backend-sqlite3/schema.sqlite3.sql
NOTE : sur certaines machines, par exemple Alpine Linux, il convient que le dossier contenant la bdd sqlite soit accessible en écriture par le uid du serveur pdns. En conséquence, il peut être nécessaire de placer le fichier dans un dossier spécifique, par exemple/var/lib/pdns/
et rendre ce dossier en rw à l'user pdns via unchown
par exemple
On va maintenant ajouter des entrées dns correspondant à des ressources locales source:
# On commence par créer une zone dns, c'est à dire un espace pour lequel ce serveur aura autorité pdnsutil create-zone example.com # Ensuite, on ajoute les entrées une à une pdnsutil add-record example.com serveur1 A 192.168.1.2 # Pour vérifier ce qui est enregistré, on a 2 commandes : pdnsutil list-all-zones pdnsutil list-zone example.com # pour supprimer une entée : delete-rrset pdnsutil delete-rrset example.com subdomain A
Les gens recommandent d'avoir un nom de domaine à soi, comme ça on est sur qu'il n'y a pas de conflit avec les recherches sur internet, notamment quand on est plus dans le LAN.
Sinon, on peut utiliser .local
ou .lan
.
Problème avec .local
, c'est utilisé par un autre système de résolution de noms sans serveur, mdns.
Pour valider toute la config, ne pas oublier de relancer le serveur systemctl restart pdns.service
Ce sera lui en interface principale, il utilisera donc le port dédié 53.
Sur la même machine, installer le paquet apt install pdns-recursor
Editer le fichier de conf vim /etc/powerdns/recursor.conf
# pour autoriser tout le monde à faire des requêtes (je sais, c'est pas secure mais on est dans un LAN inaccessible depuis l'extérieur) local-address=0.0.0.0 local-port=53 # rediriger vers notre serveur Authoritative pour nos ressources locales, il faut renseigner l'espace défini précédemment forward-zones=example.com=127.0.0.1:5300, autreexemple.com=127.0.0.1:5300 # rediriger toutes les autres requetes vers un autre serveur recursif (la box par exemple) forward-zones-recurse=.=192.168.0.1
Ne pas oublier de redémarrer le service pour prendre en compte la config systemctl restart pdns-recursor
Et voilà
Il y a 2 choses à configurer :