Installation d'un serveur DNS bind9

Ce guide a pour but d'expliquer comment installer et configurer un serveur DNS bind9 dans son réseau local.

Une des raisons pour laquelle j'ai voulu installer ça chez moi, c'est simplement pour pouvoir gérer deux vues. Une vue interne qui ne sera utilisée que depuis mon réseau local, puis une vue externe pour que le monde extérieur (Internet) accède à mon domaine.
En effet, chez moi j'utilise une Freebox en tant que modem/routeur et celle-ci ne dispose pas de boucle locale pour effectuer le routage nécessaire. Ainsi, si j'essaye d'accéder à mon nom de domaine depuis l'intérieur de mon réseau local alors je tombais désespérément sur le serveur web de la Freebox. Et comme je n'avais pas vraiment envie de modifier le fichier /etc/hosts de tous les clients à chaque fois, l'utilisation d'un serveur DNS personnel m'a bien plu.

Cette installation a été réalisée sur Gentoo Linux, mais le fonctionnement reste le même pour toute les distributions bien entendu.

Pré-requis

  • Une machine sous GNU/Linux qui tourne 24/7
  • Un nom de domaine chez votre registrar préféré
  • Quelqu'un qui vous servira de DNS secondaire

Ce dernier point est très important.
Dans mon cas, je ne gère qu'un seul DNS, le master (maître). Ayant pris mon nom de domaine chez OVH, je me suis dis qu'ils pouvaient alors agir en tant que DNS secondaire. Et bien en fait non ! Pour la simplement et bonne raison que la machine utilisée pour faire DNS primaire n'est pas sur leur réseau.
Merci OVH donc …

Heureusement qu'il existe des services sympas pouvant être utilisés comme DNS secondaire.
Personnellement, j'ai choisi PUCK. Aucune raison particulière de mon choix, PURK est simple et ça marche.

Installation

emerge net-dns/bind net-dns/bind-tools

Pour l'utilisation que j'en ai, j'ai laissé les USE par défaut.
Suite à l'installation, un répertoire /etc/bind/ est créé.

Configuration du serveur

named.conf

Le fichier /etc/bind/named.conf est le fichier de configuration général. C'est dans ce fichier qu'on va définir les vues, les zones, etc.

Dans mon cas, je prendrai l'exemple de la configuration de mon propre domaine, à savoir gromez.fr.

options {
        directory "/var/bind";

        listen-on-v6 { none; };
        listen-on port 53 { 127.0.0.1; 192.168.0.1; 82.235.193.167; };

        pid-file "/var/run/named/named.pid";
};

view "internal" {
        match-clients { 192.168.0.0/24; localhost; };
        recursion yes;

        zone "gromez.fr" {
                type master;
                file "pri/gromez.fr.internal";
                allow-transfer { any; };
        };

        zone "0.168.192.in-addr.arpa" IN {
                type master;
                file "pri/gromez.fr.reverse.internal";
                allow-update { any; };
        };
};

view "external" {
        match-clients { any; };
        recursion no;

        zone "." IN {
                type hint;
                file "named.ca";
        };

        zone "127.in-addr.arpa" IN {
                type master;
                file "pri/127.zone";
                allow-update { none; };
                notify no;
        };

        zone "gromez.fr" {
                type master;
                notify yes;
                file "pri/gromez.fr.external";
                allow-query { any; };
                allow-transfer { 204.42.254.5; }; // puck.nether.net
        };
};

logging {
        channel default_syslog {
                file "/var/log/named/named.log" versions 3 size 5m;
                severity debug;
                print-time yes;
                print-severity yes;
                print-category yes;
        };
       category default { default_syslog; };
};

Mettre un texte explicatif

Zone interne : gromez.fr.internal

La zone interne est à définir dans le fichier /etc/bind/pri/gromez.fr.internal

$TTL 1d
@    IN SOA       ns.gromez.fr. admin.gromez.fr. (
     2010030101                 ; serial
     3h                         ; refresh
     1h                         ; retry
     1w                         ; expiry
     1d )                       ; minimum

@                           IN        MX          0 gromez.fr.
@                           IN        TXT         "v=spf1 ip4:82.235.193.167/32 mx ptr mx:mail.gromez.fr ~all"
@                           IN        NS          ns.gromez.fr.
@                           IN        NS          puck.nether.net.
@                           IN        A           192.168.0.1
ns                          IN        A           192.168.0.1
ion                         IN        A           192.168.0.1
alf                         IN        A           192.168.0.10
meuhmeuh                    IN        A           192.168.0.11
toto                        IN        CNAME       gromez.fr.
tata                        IN        CNAME       gromez.fr.
titi                        IN        CNAME       gromez.fr.

Mettre un texte explicatif

Zone reverse interne : gromez.fr.reverse.internal

La zone reverse interne est à définir dans le fichier /etc/bind/pri/gromez.fr.reverse.internal
Une zone reverse (inverse) permet de renvoyer le FQDN à partir d'une adresse IP.

$TTL 1d
@    IN SOA       ns.gromez.fr. admin.gromez.fr. (
     2010022706                 ; serial
     3h                         ; refresh
     1h                         ; retry
     1w                         ; expiry
     1d )                       ; minimum
@                           IN        NS          ns.gromez.fr.
@                           IN        NS          puck.nether.net.
1                           IN        PTR         ion.gromez.fr.
10                          IN        PTR         alf.gromez.fr.
11                          IN        PTR         meuhmeuh.gromez.fr.

Mettre un texte explicatif

Zone externe : gromez.fr.external

La zone externe est à définir dans le fichier /etc/bind/pri/gromez.fr.external

$TTL 1d
@    IN SOA       ns.gromez.fr. admin.gromez.fr. (
     2010030101                 ; serial
     3h                         ; refresh
     1h                         ; retry
     1w                         ; expiry
     1d )                       ; minimum

@                           IN        MX          0 gromez.fr.
@                           IN        TXT         "v=spf1 ip4:82.235.193.167/32 mx ptr mx:mail.gromez.fr ~all"
@                           IN        NS          ns.gromez.fr.
@                           IN        NS          puck.nether.net.
@                           IN        A           82.235.193.167
ns                          IN        A           82.235.193.167
toto                        IN        CNAME       gromez.fr.
tata                        IN        CNAME       gromez.fr.
titi                        IN        CNAME       gromez.fr.

Mettre un texte explicatif

Configuration des clients

Pour que les clients du réseau local puissent désormais utiliser le serveur DNS fraîchement installé, il faut pour cela modifier le fichier /etc/resolv.conf

search gromez.fr
nameserver 192.168.0.1

La première ligne search gromez.fr indique sur quel domaine chercher. Ainsi, si je fais une requête toto, on va d'abord chercher à savoir si toto.gromez.fr existe.

La seconde ligne sert quant à elle à indiquer l'adresse de notre serveur DNS local.

gentoo powered apache powered dokuwiki powered