«

»

mar 20

DNS – La configuration de BIND pour les nuls

Introduction

Dans cet article je vais tenter de vous expliquer comment configurer BIND pour :

  1. Qu’il fasse office de proxy DNS
  2. Qu’il héberge votre nom de domaine (Autoritative DNS)
  3. Qu’il sache différencier les requêtes internes des requêtes externes (Split horizon)

Je vous recommande la lecture des deux articles suivants si vous ne vous sentez pas encore à l’aise le concept de DNS et l’outils BIND :

  1. DNS pour les nuls
  2. DNS – Compiler et installer BIND pour les nuls

Périmètre de ce tuto

Les explications qui vont suivre s’appliquent à une installation de BIND en version 9.9.2-P1 (voir l’article ci-dessus pour savoir comment l’installer). Nous abordons ici la configuration d’un DNS maître, le rôle esclave sera abordé dans un prochain article.

Définition des rôles et fonctions

Avant de commencer, nous allons voir ce qui se cache derrière les rôles et fonctions suivantes.

Proxy DNS

Un proxy DNS fonctionne de la même façon qu’un Proxy WEB. C’est-à-dire qu’au lieu que le client aille chercher lui-même la réponse à une requête DNS au-près du DNS de votre FAI par exemple, il va soumettre cette requête à votre DNS interne et celui-ci se chargera de trouver la réponse.

Hébergement de nom de domaine – Autoritative DNS

Un DNS Autoritaire fourni une traduction Nom de domain/IP pour une zone qu’il qu’il gère lui-même. Par exemple, les DNS de Gandi ou d’OVH ont autorité sur les zone qu’ils hébergent pour leurs clients (clients au sens physique du terme).

Split horizon

C’est la capacité d’un DNS à pouvoir identifier la provenance d’une requête et à pouvoir fournir une réponse différente en fonction de son origine, ou même pas de réponse du tout.

C’est très utile lorsque l’on souhaite cumuler les deux rôles précédents. Ça vous permet de :

  1. Proposer un service de Proxy DNS uniquement à vos utilisateurs internes
  2. Renvoyer l’IP publique de l’hôte www.mon-entreprise.fr pour une requête venant d’Internet
  3. Renvoyer l’IP privée de l’hôte www.mon-entreprise.fr pour une requête venant de votre réseau interne

Configuration de BIND

Les fichiers de configuration de BIND et leur rôle

Le fichier /etc/bind/named.conf

C’est le fichier de configuration principale de BIND. Il est le premier à être charger au démarrage et c’est lui indique les autres fichiers de configuration à prendre en compte.

On peut y distinguer 6 parties :

Les « include »

include "/etc/bind/rndc.key";
include "/etc/bind/logging.conf";

Permet de déclarer des fichiers de configuration supplémentaires à prendre en compte.

Les déclarations propres à rndc

controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "mykey"; };
};

Permet de contrôler l’utilisation de RNDC. RNDC permet différentes action sur le DNS comme le rechargement des zones, lancer un flush du cache, l’arrêt du service, etc…

Les « ACL »

acl net_dmz { 192.168.0.0/24; };
acl net_lan { 10.0.0.0/8; };
acl gandi { 217.70.177.40; };

Permet de déclarer des adresses, ou des réseaux que vous réutiliserez plus tard pour définir les vues de split horizon.

Les options globales

Ces options de configurations régissent le comportement du serveur quelque soit  les vues de split horizon. Elle peuvent cependant être surchargée si elles sont redéfinies au sein des vues. Voici celles que j’utilise :

options {
listen-on { IP_de_votre_serveur; };
listen-on { 127.0.0.1; };
port 53;
listen-on-v6 { none; };
version "C'est un secret";
directory "/etc/bind/";
dump-file "/var/tmp/named_dump.db";
pid-file "/var/run/named/named.pid";
statistics-file "/var/tmp/named.stats";
memstatistics-file "/var/tmp/named.memstats";
zone-statistics yes;
auth-nxdomain no;
querylog yes;
allow-query-on { IP_de_votre_serveur; };
recursion no;
};

Si vous souhaitez une explication détaillée de l’ensemble de ces paramètre, je vous recommande ces deux pages : ici et . Je vais juste en expliquer quelques-unes :

  •  listen-on

Dans un soucis de sécurité, il est toujours bon de définir explicitement sur quelles interfaces le DNS doit écouter les requêtes. Dans le cas où votre DNS aurait plusieurs IP, il n’est pas toujours souhaitable que le DNS soit accessible sur l’ensemble de ses adresses.

  • version

Certaines requêtes permettent de demander au DNS le numéro de sa version. Il est bon d’éviter de répondre à ce genre de requête, en particulier si le DNS est accessible sur Internet. En effet, ça vous évitera de faciliter la vie d’un éventuel attaquant qui chercherait à exploiter une faille relative à votre version de DNS.

  • recursion

C’est ce paramètre qui permet au DNS de se comporter comme Proxy DNS. Je vous recommande de le définir à « no », et de l’activer uniquement dans vues de split horizon que vous jugerez nécessaire.

Les vues de split horizon

Voici un exemple de définition de deux vues de split horizon. Une pour les clients et serveurs internes, et une pour tout ce qui n’est pas compris dans la première, donc le WAN.

  • Vue interne
view "internal" {
match-clients { net_lan; net_dmz; lo; };
notify no;
recursion yes;
allow-recursion-on { IP_de_votre_serveur; 127.0.0.1; };
allow-recursion { net_lan; net_dmz; lo; };
zone "." IN {
type hint;
file "root.db";
};
zone "localdomain" IN {
type master;
file "master/localdomain.zone";
allow-update { none; };
};
zone "localhost" IN {
type master;
file "master/localhost.zone";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "reverse/named.local";
allow-update { none; };
};
zone "255.in-addr.arpa" IN {
type master;
file "reverse/named.broadcast";
allow-update { none; };
};
zone "0.in-addr.arpa" IN {
type master;
file "reverse/named.zero";
allow-update { none; };
};
zone "mon_nom_de_domaine" IN {
type master;
file "master/mon_nom_de_domaine.int";
allow-update { none; };
notify explicit;
also-notify { IP_du_DNS_esclave; };
allow-transfer { IP_du_DNS_esclave;};
};
zone "0.168.192.in-addr.arpa" IN {
type master;
file "reverse/192.168.0.xx";
allow-update { none; };
notify explicit;
also-notify { IP_du_DNS_esclave; };
allow-transfer { IP_du_DNS_esclave;};
};
};

Les paramètres importants de cette définition de vue interne :

  • match-clients

C’est cette option qui va premettre de définir quels hôtes et réseau IP vont être compris dans la vue en question. On se sert des déclarations ACL pour ça.

  • recursion

Permet d’activer la fonctionnalité de Proxy DNS pour cette vue uniquement.

  • zone

Premet de déclarer un nom de domaine pour lequel le DNS est capable de fournir un service de traduction.

  • type

Définit si le serveur est maître ou esclave pour ce nom de domaine.

  • notify, also-notify, et allow-transfer

Ordonne au DNS de notifier explicitement une liste précise de DNS esclave ainsi que d’autoriser le transfert de la zone vers ces même serveur.

 

  • Vue externe
view "external" {
match-clients { any; };
notify no;
recursion no;
allow-query { any; };
allow-query-on { IP_de_votre_serveur; };
auth-nxdomain no;
zone "mon_nom_de_domaine" IN {
type master;
file "master/mon_nom_de_domaine.ext";
allow-transfer { gandi; };
notify explicit;
also-notify { 217.70.177.40; };
};
};

Les paramètres importants de cette définition de vue externe :

  • match-client

Lorsqu’il est définit à « any », toutes les requêtes n’ayant pas trouvé de correspondance avec d’autre vue seront traité par celle-ci.

  • recursion

Ici définit à « no », elle désactive la fonction de Proxy DNS pour les hôtes externe. C’est le comportement généralement préconisé.

Conclusion

Pour conclure, vous devriez avoir toutes les billes pour configurer votre DNS afin qu’il réponde aux rôles définis en introduction. Je vous présenterai dans un prochain article comment remplir vos fichiers de zone et quelques autre fonctionnalités intéressantes comme le transfert de zone signées (TSIG) pour un peu plus de sécurité, et comment dire à votre registrar (gandi, ovh, etc…) de diriger les requêtes concernant votre nom de domaine sur vos serveurs perso.

J’espère que cet article a pu vous aider, et si vous avez encore des questions sur le sujet n’hésitez pas à les poser en commentaire.

5 commentaires

Passer au formulaire de commentaire

  1. HARRY

    et après comment procède t on pour configurer les options PROXY et interne / Externe

    1. mmayen

      Désolé, l’article est encore en cours de rédaction. Il sera fini d’ici 1 ou 2 jours.
      Manque de temps…

  2. HARRY

    cela m’intéresse car je suis aussi chez gandi et je ne trouve pas de bons tutos pour effectuer une redirection chez moi. (FAI sfr).

    1. mmayen

      La définition de « Glue record » et de « redirection DNS » au-près des registrar fera l’objet d’un prochain article, qui je l’espère arrivera vite.

    2. mmayen

      L’article en question est désormais en ligne ici.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *


+ 9 = onze

Vous pouvez utiliser les balises HTML suivantes : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>