====== DNS et PowerDNS ====== [[https://joekuan.wordpress.com/2015/06/19/powerdns-configuring-authoritative-server-and-forwarding-queries-to-multiple-authoritative-servers/|Source pour les schémas]] ===== C'est quoi un DNS ? ===== 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. {{:wiki:authoritative-server.png?450|Authoritave-server }} {{:wiki:recursive-server.png?450|Recursive-server}} ===== Et PowerDNS dans tout ça ? ===== PowerDNS est une suite logicielle comprenant entre autres : * ''pdns-server'' qui est un serveur authoritative * ''pdns-recursor'' qui est un serveur recursif * ''pdnsutil'' 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. ===== Config mise en place ===== 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é [[https://doc.powerdns.com/authoritative/guides/recursion.html#scenario-1-authoritative-server-as-recursor-with-private-zones|ici]]. {{:wiki:dns-scenario.png?800|scenario}} ==== Installation et configuration Authoritative server : ''pdns-server'' ===== 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 un ''chown'' par exemple ==== Ajouter les entrées dns des ressources locales : ''pdnsutil'' ==== On va maintenant ajouter des entrées dns correspondant à des ressources locales [[https://blog.powerdns.com/2016/02/02/powerdns-authoritative-the-new-old-way-to-manage-domains/|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 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, [[https://en.wikipedia.org/wiki/.local|mdns]]. Pour valider toute la config, ne pas oublier de relancer le serveur ''systemctl restart pdns.service'' ==== Installer et configurer le serveur recursif : ''pdns-recursor'' ==== 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à =) ==== Config des clients ==== Il y a 2 choses à configurer : * le serveur DNS : diriger vers cette machine * la gateway : renseigner l'ip du routeur/box