Introduction

Dans cet article je souhaite partager avec vous comment installer un serveur DNS chez vous.

j’ai souvent besoin de tester des petites applciations que je développe sur plusieurs PC ou mobiles se trouvant dans mon réseau local, et avoir mon propre serveur DNS chez moi rendra l’éxpérience de développement chez moi plus agréable. (faciliter la configuration, éviter de trifouiller dans les /etc/hosts…)

et puis ça ne fait pas de mal d’apprendre comment le faire, qui sait ça peut toujours servir 🙂

Architecture :

Dans cet exemple j’utilise deux ordinateurs :

  • in vieux pc qui jouera le role de mon serveur DNS.
  • mon PC principale qui va utiliser ce serveur DNS.

installation des outils

Toute cette partie installation se fera sur le serveur DNS.

On commence par installer le service DNS bind9.

sudo apt-get install bind9 bind9utils bind9-doc

Configuration des options du serveur

ouvrez le fichier /etc/bind/named.conf.options

avant le bloc options ajoutez l’ACL suivante

# file: /etc/bind/named.conf.options
acl "trusted" {
        192.168.1.42;    # ns - votre serveur DNS
        192.168.1.6;  # host1 - pc autorisé à utiliser ce DNS
};

options {

on configure ici les adresses ip pouvant utiliser ce serveur DNS, dans mon exemple je n’ai qu’un seul pc.

puis dans le bloc options ajoutez les options suivantes :

...
options {
  ...
  recursion yes;
  allow-recursion { trusted; };
  listen-on { 192.168.1.42; };
  allow-transfer { none; };

  forwarders {
    8.8.8.8;
    8.8.4.4;
  };

}

Ici on fait en sorte que notre serveur DNS n’écoute que sur notre réseau local.
notre serveur va aussi rediriger toutes les requêtes DNS sur les noms non reconnus vers 8.8.8.8 et 8.8.4.4

voici le resultat final des options :

/etc/bind/named.conf.options

acl "trusted" {
        192.168.1.42;    # ns - votre serveur DNS
        192.168.1.6;  # host1 - pc autorisé à utiliser ce DNS
};

options {
    directory "/var/cache/bind";

  recursion yes;
  allow-recursion { trusted; };
  listen-on { 192.168.1.42; };
  allow-transfer { none; };

  forwarders {
      8.8.8.8;
      8.8.4.4;
  };

    dnssec-validation auto;
    listen-on-v6 { any; };
};

Déclarer un nom de domaine

On va maintenant déclarer un nom de domaine qu’on pourra utiliser dans notre réseau local, tout mes domaines se termineront par myhome.local

dans cet example on va déclarer la zone myhome.local

et dedans on va déclarer les deux entrées suivantes :

  • ns.myhome.local : notre serveur dns
  • host1.myhome.local: un pc dans le réseau

Déclarer une nouvelle zone

Sur votre serveur DNS :

sudo vim /etc/bind/named.conf.local

et déclarez votre zone ainsi :

zone "myhome.local" {
  type master;
  file "/etc/bind/zones/db.myhome.local";
};

Ajoutez ensuite la « reverse zone » dans le même fichier, le nom de la zone doit commencer par les 3 premiers octets de votre adresse ip, mais dans l’ordre inverse.

exemple:

si votre adresse ip est : 192.168.1.2, et que votre masque reseau est 255.255.255.0 ( /24) alors le nom de la reverse zone est :

zone "1.168.192.in-addr.arpa" {
    type master;
    file "/etc/bind/zones/db.1.168.192";
};

Déclaration de la forward zone

c’est ici qu’on va déclarer comment le serveur DNS va chercher l’adresse ip correspondante à un nom de domaine, dans ce cas je déclare une entrée pour mon pc (host1).

créez le dossier zones :

sudo mkdir /etc/bind/zones

puis on va se baser sur db.local pour créer notre forward zone:

sudo cp /etc/bind/db.local /etc/bind/zones/db.myhome.local
sudo vim /etc/bind/zones/db.myhome.local

commencez par incrémenter le chiffre juste avant **; Serial** et changer localhost1. root.localhost1. par ns.myhome.local. admin.myhome.local

;
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     ns.myhome.local. admin.myhome.local (
...

notez que contrairement aux apparences, admin.myhome.local est une adresse mail, elle correspond à admin@myhome.local.
et ns.myhome.local correspond au nom du serveur DNS principal.

Ajoutez ensuite les lignes suivantes :

; name servers - NS records
    IN      NS      ns.myhome.local.

; name servers - A records
ns.myhome.local.          IN      A       192.168.1.42

; 192.168.1.0/24 - A records
host1.myhome.local.        IN      A      192.168.1.6

on déclare ce qui suit :

  • quel serveur DNS contacter pour cette zone (myhome.local)
  • l’adresse ip correspondante à ns.myhome.local
  • l’adresse ip correspondante à host1.myhome.local

le fichier final va ressembler alors à ça :

;
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     ns.myhome.local. admin.myhome.local (
                              3         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL

; name servers - NS records
    IN      NS      ns.myhome.local.

; name servers - A records
ns.myhome.local.          IN      A       192.168.1.42

; 192.168.1.0/24 - A records
host1.myhome.local.        IN      A      192.168.1.6

Déclarer la reverse zone

ici on va configurer comment notre DNS va répondre aux recherches de noms de domaines par adresse ip.

On va se baser cette fois ci sur db.127 comme base pour notre fichier :

sudo cp /etc/bind/db.127 /etc/bind/zones/db.1.168.192
sudo vim /etc/bind/zones/db.1.168.192

comme pour l’autre fichier, on va incrémenter la valeur avant **; Serial** puis modifier les paramètres pour localhost avec notre nom de domaine.

;
; BIND reverse data file for local loopback interface
;
$TTL    604800
@       IN      SOA     ns.myhome.local. admin.myhome.local  (
                              3         ; Serial
...

on déclare quel serveur DNS est utilisé :

; name servers

      IN      NS      ns.myhome.local.

puis on ajoute pour chaque adresse ip de notre réseau une entrée correspondante.

; PTR Records

42   IN      PTR     ns.myhome.local.    ; 192.168.1.42
6    IN      PTR     host1.myhome.local.  ; 192.168.1.6

notez que le premier numéro de chaque ligne (42 et 6) correspondent au dernier octet des adresses ip, exemple :

  • 192.168.1.42 => 42

c’est parceque le masque réseau que j’utilise est 255.255.255.0.

si vous utilisez par exemple un masque reseau qui ressemble à ça 255.255.0.0 alors il faudra utiliser 2 octets au lieu d’un seul, (donc 42.1 et oui c’est écrit à l’envers).

le fichier final va ressembler à ça :

;
; BIND reverse data file for local loopback interface
;
$TTL    604800
@       IN      SOA     ns.myhome.local. admin.myhome.local (
                              3         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
; name servers

      IN      NS      ns.myhome.local.

; PTR Records

42   IN      PTR     ns.myhome.local.    ; 192.168.1.42
6    IN      PTR     host1.myhome.local.  ; 192.168.1.6

Vérifier la configuration

Vérifier la syntaxe

sur votre serveur DNS :

sudo named-checkconf

Si tout va bien la commande ne retournera rien dans la console.

Vérifier les zones

on vérifie la forward zone :

$ sudo named-checkzone myhome.local /etc/bind/zones/db.myhome.local 

zone myhome.local/IN: loaded serial 4
OK

Puis la reverse zone:

$ sudo named-checkzone 1.168.192.in-addr.arpa /etc/bind/zones/db.1.168.192

zone 1.168.192.in-addr.arpa/IN: loaded serial 3
OK

Redémarrer le serveur

si vous avez sur votre serveur un firewall ufw, alors lancez la commande suivante pour autoriser l’accès au serveur dns :

sudo ufw allow Bind9

puis redémarrez le serveur :

sudo systemctl restart bind9
sudo systemctl enable named

Votre serveur DNS est maintenant prêt, on peut maintenant commencer à l’utiliser.

Utiliser le DNS

Je vais maintenant sur mon autre PC, pour configurer le DNS principal, je suis sous linux mint, donc vous aurez une interface différente selon votre OS, mais le principe est le même, il faudra configurer manuellement l’adresse IP du serveur DNS principale avec celle de notre serveur DNS.

Configuration DNS

pour tester rapidement, on peut faire un ping sur un des noms de domaines qu’on a configuré :

$ ping ns.myhome.local

PING ns.myhome.local (192.168.1.42) 56(84) bytes of data.
64 bytes from ns.myhome.local (192.168.1.42): icmp_seq=1 ttl=64 time=5.12 ms
64 bytes from ns.myhome.local (192.168.1.42): icmp_seq=2 ttl=64 time=7.22 ms
64 bytes from ns.myhome.local (192.168.1.42): icmp_seq=3 ttl=64 time=4.38 ms

--- ns.myhome.local ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 4.381/5.571/7.215/1.200 ms

Conclusion

Voila vous savez maintenant comment mettre en place votre propre serveur DNS, j’espère que vous avez trouvé cet article utile, à la prochaine 🙂