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.
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 🙂