Linux – Créer un DNS simple


Ces derniers temps, je me suis trouvée confrontée à une gestion de plus en plus difficile du fichier /etc/hosts que je partage entre ma machine physique et mes serveurs virtuels.

J’ai donc décidé de configurer un DNS (Domain Name Server), Serveur de Nom de Domaine en français.

A quoi sert un DNS ? En l’occurrence à ne pas avoir besoin de retenir des adresses IP insipides pour accéder à des serveurs. Il est tout de même plus facile de pointer http://www.google.fr/ que http://173.194.67.94/ !

Configuration du fichier /etc/named.conf

//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
    listen-on port 53 { 127.0.0.1; 192.168.56.120; }; /* Ici, l'adresse IP sur laquelle écoutera
                                                       votre DNS */
    listen-on-v6 port 53 { ::1; };
    directory     "/var/named";
    dump-file     "/var/named/data/cache_dump.db";
    statistics-file "/var/named/data/named_stats.txt";
    memstatistics-file "/var/named/data/named_mem_stats.txt";
    allow-query     { localhost; 192.168.56.0/24; }; /* Ici, la plage d'adresses
                                                        qui sera servie */

    /* 
     - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
     - If you are building a RECURSIVE (caching) DNS server, you need to enable 
       recursion. 
     - If your recursive DNS server has a public IP address, you MUST enable access 
       control to limit queries to your legitimate users. Failing to do so will
       cause your server to become part of large scale DNS amplification 
       attacks. Implementing BCP38 within your network would greatly
       reduce such attack surface 
    */
    recursion no; /* Très important !! Votre serveur est local ! */

    dnssec-enable yes;
    dnssec-validation yes;
    dnssec-lookaside auto;

    /* Path to ISC DLV key */
    bindkeys-file "/etc/named.iscdlv.key";

    managed-keys-directory "/var/named/dynamic";

    pid-file "/run/named/named.pid";
    session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

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

zone"nice" IN { /* Votre nom de domaine. Pour moi c'est ".nice" */
type master;
file "/var/named/nice.fwd.zone"; /* Votre zone de forward nom --> IP */
allow-update { none; };
};

zone"56.168.192.in-addr.arpa" IN { /* Uniquement les 3 premiers nombres en ordre inverse avec
in-addr.arpa pour fermer la chaîne de caractère du reverse */
type master;
file "/var/named/nice.rev.zone"; /* Votre zone reverse IP --> nom */
allow-update { none; };
};

######
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

Votre fichier named.conf est désormais prêt.

Fichier forward /var/named/nice.fwd.zone

Ce fichier contient le mapping entre un nom de machine et son IP. C’est une cartographie de votre domaine.

Attention ! Le nom de domaine se termine par un point ! Il est obligatoire. C’est un élément de syntaxe.

$TTL 86400 ; Ca ne s'invente pas... Ainsi que tout ce qui est dans cette section
@       IN SOA  masterdns.nice.     root.nice. (
                                  2015060901    ; serial
                                        3600    ; refresh
                                        1800    ; retry
                                      604800    ; expire
                                       86400 )  ; minimum

; Name server. Le nom du serveur de domaine

@       IN      NS      masterdns.nice.

; Résolution nom de serveur vers IP

@    IN    A    192.168.56.120

; Ensemble des machines du domaine avec leur résolution IP

masterdns       IN      A    192.168.56.120
wp-fedora       IN      A    192.168.56.102
ora11gr212cr1   IN      A    192.168.56.103
cldcnt          IN      A    192.168.56.104
ora12cr1rac1    IN      A    192.168.56.105
ora12cr1rac2    IN      A    192.168.56.106
ora11gr2rac1    IN      A    192.168.56.107
ora11gr2rac2    IN      A    192.168.56.108
postgresql01    IN      A    192.168.56.111
postgresql02    IN      A    192.168.56.112

La dernière section doit donc contenir toutes vos machines. Il va de soi que ces noms de machines doivent correspondre aux noms réels des machines si vous voulez ne pas vous y perdre.

Fichier reverse /var/named/nice.rev.zone

Ce fichier contient le mapping entre une IP et un nom de machine. C’est la cartographie inverse de votre domaine.

$TTL 86400 ; Ca ne s'invente pas... Ainsi que tout ce qui est dans cette section
@       IN SOA  masterdns.nice.     root.nice. (
                                  2015060901    ; serial
                                        3600    ; refresh
                                        1800    ; retry
                                      604800    ; expire
                                       86400 )  ; minimum
    NS    @
    A    192.168.56.120
    PTR    masterdns.nice. ; Attention à ces 3 derniers paramètres.
                           ; Ils définissent le DNS en reverse

; Serveur de nom en reverse

@    IN    NS    masterdns.nice.

; Serveur de nom en résolution nom vers IP

masterdns    IN    A    192.168.56.120

; Liste des machines du domaine. Seuls le dernier nombre est renseigné puisque
; les 3 premiers font partie de la résolution inverse.
; Le nom de chaque machine est exprimé avec son domaine complet agrémenté du point.

120    IN    PTR    masterdns.nice.
102    IN    PTR    wp-fedora.nice.
103    IN    PTR    ora11gr212cr1.nice.
104    IN    PTR    cldcnt.nice.
105    IN    PTR    ora12cr1rac1.nice.
106    IN    PTR    ora12cr1rac2.nice.
107    IN    PTR    ora11gr2rac1.nice.
108    IN    PTR    ora11gr2rac2.nice.
111    IN    PTR    postgresql01.nice.
112    IN    PTR    postgresql02.nice.

A ce point, le serveur DNS dispose de tout ce dont il a besoin pour démarrer.

Changement de groupe des deux fichiers de configuration pour named

chgrp named /var/named/nice.fwd.zone
chgrp named /var/named/nice.rev.zone

Test et validation des fichiers de configuration

named-checkconf /etc/named.conf
named-checkzone masterdns.nice /var/named/nice.fwd.zone
named-checkzone masterdns.nice /var/named/nice.rev.zone

Ces instructions valident définitivement la bonne syntaxe de votre configuration.

Activation et démarrage de named

systemctl enable named
systemctl start named

Mise à jour du fichier /etc/resolv.conf

Le fichier /etc/resolv.conf est souvent maintenu par le système. Je ne rentrerai donc pas dans le détail des opérations à réaliser, elles sont très dépendantes de votre paramétrage réseau.

Dans mon cas, utilisant Network Manager, j’ai dû jouer avec la configuration de chaque carte réseau afin d’obtenir ma liste de DNS dans le bon ordre, à savoir « nameserver 192.168.56.120 » en premier serveur de domaine.