Serveur de noms : Bind

Message 1, par Elzen

§ Posté le 15/09/2013 à 19h 42m 05

Note : ça commence à faire un moment que je ne vous avais pas parlé d'auto-hébergement. Je manque un peu de temps pour bidouiller mon serveur, et je n'ai pas encore installé dessus un bon paquet de choses que je comptais y mettre au départ. Cependant, je suis loin d'avoir abandonné, et je continue petit à petit ; d'ailleurs, plusieurs événements sont en préparation à ce sujet, les lyonnais auront sans doute bientôt de mes nouvelles. Mais, dans l'immédiat, puisque je me suis enfin occupé de ma configuration DNS, voyons ça d'un peu plus près.



Si vous avez acheté votre propre nom de domaine, votre registraire vous fournit sans doute une interface permettant de gérer leurs affectations. Celle de Gandi est assez pratique à utiliser. Cependant, tant qu'à être auto-hébergé et à avoir son propre nom de domaine, autant gérer ça vraiment chez soi, non ? D'autant que ce n'est, en fait, pas franchement compliqué : passées les quelques manipulations d'installation, l'essentiel de ce que vous aurez à faire sur la durée tient en un seul fichier de configuration.

Mais commençons par le début : il faut installer un serveur DNS. Je n'ai pour une fois pas fait dans l'originalité, et j'ai pris Bind, qui est, de très loin, majoritaire (le paquet sur votre système s'appelera sans doute « bind9 », puisque nous utilisons essentiellement la neuvième version de ce logiciel).


Comme j'ai déjà eu l'occasion de vous en parler, le système de noms de domaines est assez central à notre utilisation du réseau : c'est lui qui fait le lien entre un nom intelligible (ou presque) comme « fadrienn.irlnc.org » et une véritable adresse, comme « 82.233.208.64 » (ou, encore mieux, une adresse IPv6, mais on verra ça un peu plus tard). Du coup, ça peut être intéressant de s'assurer que les informations que fournit le vôtre seront toujours accessibles même si, pour une raison ou pour une autre, votre machine n'est temporairement pas accessible.

Je vais donc vous expliquer directement les manipulations à effectuer pour vous permettre d'utiliser d'autres serveurs DNS pour répliquer le vôtre – ceux de vos amis eux-aussi auto-hébergés, ou ceux de votre registraire, par exemple. Dans mon cas, c'est Zergy, l'un des premiers membres du collectif IRLNC, qui se charge de cette réplication, et c'est aussi lui qui m'a apprit l'essentiel de ce que je vais vous retranscrire ici. Merci encore 😊


Donc, la configuration de Bind, une fois le logiciel installé, se trouve dans le répertoire « /etc/bind ». En premier lieu, c'est le fichier « named.conf.local » qui nous intéresse : c'est ici que vous allez indiquer à votre serveur de nom dans quel fichier se trouve la configuration pour les différentes zones que vous administrez. Ce que vous devez y ajouter doit ressembler à ça :

zone "exemple.tld" {
        type master;
        file "/etc/bind/db.exemple.tld";
        allow-transfer {
                IP1;
                IP2;
        };
        allow-update {
                IP1;
                IP2;
        };
};

En remplaçant « exemple.tld » par votre nom de domaine, et IP1, IP2, (etc.) par les adresses (v4 ou v6) des machines qui répliqueront votre configuration. Notez que, pour que les transferts fonctionnent, vous devrez rediriger le port 53 de votre box vers votre serveur en UDP et en TCP.


Maintenant, ce fichier « db.exemple.tld ». Ça va être à vous de le créer, et ce sera lui, et lui seul, qu'il faudra par la suite modifier chaque fois que vous voudrez ajouter ou retirer une machine du réseau. Zergy m'en a fourni un très bien commenté pour IRLNC, je lui laisse donc la parole :

$TTL    1d
@       IN      SOA     ns1.exemple.tld.  admin.exemple.tld. ( ; serveur primaire de la zone et mail de l'admin (au format adresse.domaine.tld)
        2013091501 ; serial (A incrémenter à chaque modif, au format YYYYMMDDrr, rr étant la révision si plusieurs modifs le même jour)
        1d         ; refresh (1 jour)
        2h         ; retry (2 heures)
        1w         ; expire (1 semaine)
        1w         ; minimum (1 semaine)
)

; Pour les nom de machines, soit donner le nom complet (hostname.FQDN) AVEC UN POINT FINAL (fadrienn.irlnc.org.)
; soit donner le nom d'hôte uniquement SANS POINT (fadrienn), le domaine (irnlc.org) sera ajoute automatiquement par absence de point.
; A : Adresse IPv4
; AAAA : Adresse IPv6
; CNAME : Alias (surmon) d'une machine)
; MX : Serveur de mai
; NS : Serveur DNS
; SRV : Autres services

; Nom des serveur DNS de la zone.
@       IN      NS      ns1.exemple.tld.
@       IN      NS      ns2.exemple.tld.

; Adresses des serveurs DNS de la zone.
; Remplacer les adresses des enregistrement A et AAAA de ns1 par celles de fadrienn
ns1             IN      A       IPv4_machine1
ns2             IN      A       IPv4_machine2
ns1             IN      AAAA    IPv6_machine1
ns2             IN      AAAA    IPv6_machine2

; Liste des serveurs de mail de la zone.
machine1.exemple.tld.     IN      MX      10      machine1
; Listes des serveur XMPP de la zone, les deux lignes sont nécessaire pour chaque serveurs.
;_xmpp-client._tcp       7200    IN      SRV     10 0 5222       machine2
;_xmpp-server._tcp       7200    IN      SRV     10 0 5269       machine2

; Adresse des autres machines de la zone
machine1        IN      A       IPv4_machine1
machine2        IN      A       IPv4_machine2
machine1        IN      AAAA    IPv6_machine1
machine2        IN      AAAA    IPv6_machine2

; Surnoms
www             IN      CNAME   machine1
www.machine1    IN      CNAME   machine1
irc             IN      CNAME   machine2
irc.machine2    IN      CNAME   machine2

Vous noterez que les lignes caractères « ; » délimitent des commentaires (le reste de la ligne n'est pas lu). Une fois encore, remplacez « exemple.tld » par votre nom de domaine, et indiquez les différentes IP et noms de machines de vos domaines. Je pense que c'est assez clair comme ça, mais si vous avez besoin de davantage d'explications, n'hésitez pas à demander 😊

(Note, concernant XMPP : j'ai laissé les choses en l'état, sans rien activer, et mon compte Jabber fonctionne très bien. Ça doit servir pour des trucs plus avancés).


Le point essentiel est de bien penser, à chaque fois que vous ferez une modification sur ce fichier, de bien modifier le serial (sur la troisième ligne) : il sert à identifier l'état de la configuration, et si le serial ne change pas, le reste du monde aura l'impression que votre configuration n'a pas changé, quelles que soient les modifications que vous auriez pu apporter.

Et après chaque modification de ce fichier, y compris la toute première, quand vous venez de le créer, vous n'aurez qu'à lancer (en root) la commande « service bind9 reload » pour que tout soit pris en compte.



Bon, ça, c'est votre configuration locale. Il reste quand même à prévenir votre registraire que c'est désormais vous qui gérez votre DNS : la manière de procéder sera sans doute différent d'un registraire à l'autre, mais vous devez indiquer, dans les « glue records », les différentes adresses IPs correspondant à vos machines ns1, ns2, etc. ; puis indiquer ces « nsX.exemple.tld » comme serveurs DNS, le vôtre en tête. Il faudra un petit moment pour que le réseau prenne en compte les modifications, mais ça ne devrait pas trop tarder 😊



Note : je n'ai, volontairement, abordé ici que la configuration de base. Ça suffit amplement pour que votre nom de domaine réponde, mais vous aurez peut-être envie d'aller plus loin, en activant quelques trucs pour la sécurité, notamment. Je vous renvoie pour cela à la documentation Debian, ou au blog de Zergy. Et puis, au passage, quelques mots de Bortzmeyer, toujours utiles.

Message 2, par Sylvhem

§ Posté le 24/05/2014 à 22h 59m 21

Je suis en train de configurer mes propres serveurs DNS et je dois dire que ton article m’aide beaucoup. Merci pour cet excellent travail de documentation de ton installation, c’est très utile pour les amateurs comme moi qui souhaitent installer leur propre serveur 😊 .


Citation (Elzen)

Je n'ai pour une fois pas fait dans l'originalité, et j'ai pris Bind, qui est, de très loin, majoritaire (le paquet sur votre système s'appelera sans doute « bind9 », puisque nous utilisons essentiellement la neuvième version de ce logiciel).

Personnellement, j’ai choisi d'installer NSD. C’est un logiciel libre, il est présent dans Debian, sa configuration est vraiment enfantine et surtout il est très léger et consomme très peu de ressource. En revanche, contrairement à BIND, il ne fait office que de serveur de noms faisant autorité, pas de résolveur. Mais si tu cherches juste à résoudre tes noms de domaine, il est vraiment parfait. Il supporte même DNSSEC si besoin est 😊 .

Si ça t’intéresse, il y a au moins deux bons tutoriels en français sur le sujet, NSD, un autre serveur de noms pour servir ses zones de Stéphane Borztmeyer et NSD pour remplacer BIND de Philippe Pepiot. La documentation officielle en ligne est très pauvre, par contre le manuel est clair et détail bien la configuration du logiciel.


Citation (Elzen)

(Note, concernant XMPP : j'ai laissé les choses en l'état, sans rien activer, et mon compte Jabber fonctionne très bien. Ça doit servir pour des trucs plus avancés).

Stéphane Bortzmeyer a écrit un article sur le RFC 2782 qui normalise les enregistrements SRV. Apparemment, ce n’est pas forcément très utile si ton serveur XMPP se trouve sur la machine principale du domaine et si tu n’as pas de serveur de secours, mais ça ne fait pas de mal de les utiliser pour indiquer explicitement le service.

Message 3, par Elzen

§ Posté le 24/05/2014 à 23h 18m 47

Tiens, un membre du Bortz fan club 😊


Je vais rester sur bind pour le moment, d'une part parce que c'est déjà en place, et que j'ai tendance à laisser les logiciels qui tournent ; et d'autre part parce que la fonction de résolveur pourrait potentiellement m'être utile un jour.


Mais je note, j'y penserai pour une éventuelle prochaine installation (et j'irai embêter Stéphane Bortzmeyer si j'ai des questions 😈 ). Merci, et de rien pour le blog, c'est fait pour ^^

Envoyer une réponse