Le DNS Domain Name System est un protocole dès plus important de l’internet, en effet sans lui, la navigation serait pratiquement impossible. C’est ce service qui permet d’établir la correspondance entre le nom de domaine et son adresse IP. Connaitre d’IP de chaque site web ou service que nous voulons consulter serais vraiment compliqué ?

Il existe plusieurs serveur DNS connu, ici nous je vais m’occuper de vous présenter BIND et Unbound .

BIND a été écrit dans les années 1980. Il existe depuis plus de 30 ans au cours desquels il a pu bénéficier de mises à niveau constantes. Il est toujours considéré comme l’un des meilleurs logiciels de serveur DNS.

Il peut servir de serveur de noms faisant autorité ou de récurrence où. Il possède également certaines des fonctionnalités DNS les plus avancées, notamment les transferts IPv6, DNSSEC et TIG. Il possède également une interface Web intuitive qui facilite la gestion du serveur. Vous pouvez également le gérer via l’interface de ligne de commande.

Au cours de ses premières années, BIND était principalement utilisé sur les plates-formes UNIX. Cependant, compte tenu du nombre de mises à niveau qu’il a effectuées au fil des ans, BIND peut être utilisé sur toutes les plates-formes de nos jours.

 Les différents enregistrements DNS

Il existe différents types d’enregistrements représentant chacun un type information différent. Voici une liste des plus courants :

A

C’est l’enregistrement le plus courant. Il fait correspondre une adresse IPv4 à un nom d’hôte.

www    IN    A    A.B.C.D

AAAA

Variante de l’enregistrement A, il fait correspondre une adresse IPv6 à un nom d’hôte.

www    IN    AAAA    ::A

CNAME (Canonical Name)

Il permet de créer un alias pointant vers un autre enregistrement du domaine courant ou d’un domaine externe. Il est possible de créer un enregistrement CNAME pointant vers un autre enregistrement CNAME mais cette pratique double le nombre de requêtes, il et donc déconseillé de la pratiquer.

mail    IN    CNAME  wwwftp     IN    CNAME  ftp.domain.tld.www     IN    A      A.B.C.D

MX (Mail Exchange)

Il donne le serveur d’envoi d’emails. Cet enregistrement doit pointer obligatoirement vers un enregistrement de type A et pas un enregistrement CNAME. Il est possible de définir une priorité sur chaque enregistrement pour donne le serveur email à requêter en priorité. Si ce serveur est indisponible, le serveur ayant la priorité la plus proche sera requêté à la place.

IN    MX  10  mail1         IN    MX  50  mail2mail1    IN    A       A.B.C.Dmail2    IN    A       A.B.C.D

NS (Name Server)

Il définit les serveurs DNS du domaine. Cet enregistrement doit pointer obligatoirement vers un enregistrement de type A et pas un enregistrement CNAME.

IN    NS    domain.tld.ns    IN    A     A.B.C.D

TXT

Il permet de définir un enregistrement contenant un texte libre. Cet enregistrement est notamment utilisé pour confirmer le détenteur du domaine pour pouvoir utiliser certains services externes tel que Google Webmaster tools ou encore un service d’envoi de mails (Mandrill, Mailgun, …).

domain.tld.    IN    TXT    “text”

Mode de fonctionnement du serveur DNS

BIND9 peut être utilisé de différentes manières. Les configurations les plus fréquentes sont :

Serveur cache

Dans cette configuration, BIND9 va effectuer les requêtes DNS et se rappeler de la réponse pour la prochaine requête. Cette méthode peut être utile pour une connexion internet lente. En mettant les réponses DNS en cache, on diminue l’utilisation de la bande passante et (encore plus important) on réduit également le temps de latence.

Serveur maître

Utilisé pour contenir les enregistrements DNS d’un nom de domaine enregistré. Un ensemble d’enregistrements DNS pour un nom de domaine est appelé une “zone”. (Le nom de domaine peut être imaginaire si on est dans le cas d’un réseau local fermé)

Serveur esclave

Un serveur esclave est utilisé en complément à un serveur maître, en servant de copie à la ou les zones configurées sur le serveur principal. Les serveurs secondaires sont recommandés sur des gros réseaux. Ceux-ci assurent la disponibilité de la zone DNS, même si le serveur maître est hors ligne.

Serveurs hybrides

Un serveur BIND9 peut être configuré à la fois comme serveur cache et comme serveur maître, comme serveur cache et serveur esclave, ou même serveur cache, serveur maître et esclave. Il suffit de combiner les différentes configurations présentées dans les exemples.

Serveurs furtifs

Il existe deux autres configurations fréquentes pour un serveur DNS. Serveur furtif maître et serveur furtif esclave. Ils sont identiques aux serveurs maître et esclave, mais avec une organisation légèrement différente : ils ne sont visibles qu’à l’intérieur du domaine.

Par exemple, vous disposez de 3 serveurs DNS : A, B et C.

A est un serveur maître, B et C sont des esclaves.

Si votre domaine est configuré pour utiliser A et B comme serveurs de noms, alors C est un serveur furtif esclave. Il fait toujours office de serveur esclave, mais il ne sera pas interrogé depuis Internet.

Si votre domaine est configuré pour utiliser B et C comme serveurs de noms, alors A est un serveur furtif maître. Tout édition de la zone ou ajout est fait sur A, mais les ordinateurs depuis internet interrogeront seulement B et C.

Dans les deux cas, le serveur passif n’est pas interrogé depuis internet. Il peut ainsi être réservé pour une utilisation locale.

Serveurs Récursifs / Non récursifs

Les serveurs BIND9 peuvent être récursifs, c’est-à-dire interroger tour à tour les serveurs DNS nécessaires jusqu’à obtenir la réponse, et la transmettre à leur client.

Dans le cas contraire (par défaut), le serveur DNS délègue la résolution du nom de domaine à un autre serveur DNS.

Pour activer la récursivité, modifier /etc/bind/named.conf.options

allow-recursion { any; };

Installation et configuration de BIND sous Debian

 Avant toute installation de paquet il faut commencer par modifier quelque fichier ?

Déjà nous allons configurer le nom de notre machine avec son FQDN fully qualified domain c’est-à-dire le nom de la machine suivis du nom de domaine.

J’utilise l’éditeur de texte nano, simple est efficace à utiliser.

Le nom de la machine se configure dans le fichier hostname :

nano /etc/hostname
kbarre-debian.sio.tp

Le nom de ma machine est kbarre-debian et le domaine est sio.tp

Enfin, il va également être nécessaire de configurer le fichier /etc/resolv.conf pour que le serveur soit intégré à la future zone DNS. Il va donc falloir indiquer dans ce fichier le domaine et la zone de recherche DNS. Il faudra également préciser quels seront le ou les serveurs DNS de ce serveur.

nano /etc/resolv.conf

domaine sio.tp 

search sio.tp 

nameserver 192.168.1.1 # L’IP de votre machine

Il va être nécessaire de modifier le fichier /etc/hosts. Ce fichier permet une résolution locale des noms à partir des adresses IP sans utiliser le service DNS.La ligne commençant par « 127.0.1.1 » doit être modifiée en ajoutant le nouveau nom FQDN du serveur suivi du nom du serveur. Il faut ensuite de même en ajoutant une ligne associant l’adresse IPv4 du serveur DNS et son nom FQDN (nom de domaine).

127.0.0.1    localhost

127.0.1.1    kbarre-debian.sio.tp

10.0.23.103   kbarre-debian.sio.tp

Installation de bind9:

apt-get install bind9

Configuration en tant que serveur cache

Le serveur BIND9 est configuré par défaut en tant que serveur cache.

Il suffit simplement d’ajouter les serveurs de votre prestataire Internet ou tout autre serveur DNS que vous voulez utilisé.

Décommentez et éditez les lignes suivantes dans /etc/bind/named.conf.options :

[...]

forwarders {

8.8.8.8;

1.1.1.1;

};

[...]

Configuration Serveur Maître

BIND9 va être configuré comme serveur maître pour le domaine sio.tp Remplacez simplement sio.tp par votre propre nom de domaine.

Fichier de zone

Pour ajouter une zone, et faire de BIND9 un serveur maître :

Editer le fichier etc/bind/named.conf.local :

[...]

zone "sio.tp" IN {

type master;

file "/etc/bind/zone/db.sio.tp";

};

[...]

Vous pouvez utiliser le fichier d'une zone existante comme modèle :
sudo cp /etc/bind/db.local /etc/bind/zone/db.sio.tp

Éditer le nouveau fichier pour la zone (/etc/bind/zone/db.sio.tp),

Le champ SOA permet de décrire le serveur de nom ayant autorité sur la zone, ainsi que l’adresse électronique du contact technique (dont le caractère « @ » est remplacé par un point).

Les valeurs qui suivent correspondent respectivement au :

  • Au numéro de série (souvent on met la date courante suivie d’un numéro d’ordre); AAAAMMJJxx.
  • Au temps de rafraichissement (refresh; ici, 8 heures); la valeur recommandée est de 24 heures.
  • Au temps entre deux essais (retry; ici, 1 heures); la valeur recommandée est de 2 heures.
  • Au temps d’expiration (expire; ici, 1 semaine); la valeur recommandée est de 1000 heures.
  • Au valeur TTL minimum (minimum; ici, 1 heure); la valeur recommandée est de 2 jours.
  • Créer un enregistrement de type hôte A pour le serveur de nom kbarre-debian.sio.tp :
  • Vous pouvez bien-sur créer les autre enregistrement que vous voulez.
$TTL 10800

$ORIGIN sio.tp.



@       IN SOA kbarre-debian.sio.tp root.sio.tp. (

20180905;

3h;

1h;

1w;

1h);


@       IN NS kbarre-debian.sio.tp.

ouessant        IN A    10.0.23.104

stationxp       IN A    192.168.1.23

serveur1        IN A    192.168.1.29

kbarre-debian   IN A    10.0.23.103

D23-P03         IN A    10.0.23.3

Zone de recherche inversée

Maintenant que notre fichier de zone est configuré et que les adresses IP sont résolues, une zone de recherche inversée est requise. Une zone de recherche inversée permet au de convertir une adresse en nom.

  • Editer /etc/bind/named.conf.local et ajouter les lignes suivantes :
zone "1.168.192.in-addr.arpa" {

type master;

notify no;

file "/etc/bind/zone/db.1.168.192";

};
  • La ligne contenant  « 1.168.192.in-addr.arpa » indique qu’il s’agit de la zone inverse pour des résolution du  réseau IP 192.168.1. Comme vous le voyez, les 3 octet de l’IP réseau sont écrit à l’envers.

Editer le fichier /etc/bind/db.192 et changer comme nous l’avons fait précédemment le nom de domaine et l’adresse mel :

$TTL    604800

@       IN      SOA     kbarre-debian.sio.tp admin.sio.tp (

2         ; Serial

604800         ; Refresh

86400         ; Retry

2419200         ; Expire

604800 )       ; Negative Cache TTL

;

@       IN      NS     kbarre-debian.sio.tp.

192.168.1.23      IN      PTR     stationxp.sio.tp.

Le numéro de série de la zone de recherche inversée nécessite d’être incrémenté à chaque changement. Pour chaque enregistrement A ajouté dans /etc/bind/zone/db.sio.tp, il faut créer un enregistrement PTR dans /etc/bind/zone/db.1.168.192.

Configuration en serveur esclave

Maintenant qu’un serveur maître a été configuré, un serveur esclave peut être configuré pour assurer une disponibilité du domaine en cas de panne du serveur maître.

Dans un premier temps, le serveur maître doit être configuré pour permettre le transfert de zone. Nous allons ajouter l’option allow-transfer dans les option de zones principales et inversées du fichier /etc/bind/named.conf.local :

[...]

zone "sio.tp" {

type master;

file "/etc/bind/zone/db.sio.tp";

allow-transfer { @ip-serveur-esclave; };

};

[...]

zone "1.168.192.in-addr.arpa" {

type master;

notify no;

file "/etc/bind/zone/db.1.196.192";

allow-transfer { @ip-serveur-esclave; };

};

[...]

Remplacez @ip-serveur-esclavepar l’adresse IP du serveur esclave.

Maintenant allons sur le serveur DNS esclave, sur le serveur esclave, installez  BIND9, comme nous l’avons fais précédemment. Editez le fichier /etc/bind/named.conf.local, et ajoutez les lignes suivantes pour la zone principale et inversée :

[...]

zone "sio.tp" {

type slave;

file "/var/cache/bind/db.ubuntu-fr.lan";

masters { @ip-serveur-maitre; };

};

[...]

zone "1.168.192.in-addr.arpa" {

type slave;

file "/var/cache/bind/zone/db.sio.tp";

masters { @ip-serveur-maitre; };

};

[...]

Remplacez @ip_maitre par l’adresse IP du serveur maître. Le fichier de zone doit être dans /var/cache/bind/, car par défaut, AppArmor ne permet l’accès en écriture que dans ce répertoire (voir la configuration de AppArmor dans /etc/apparmor.d/usr.sbin.named).

Test de fonctionnement

Une fois toute vos modification effectuer il faut maintenant essayer les nouvelles fonctionnalités.

Pour cela il faut déjà redémarrer bind

systemctl restart bind9

Si le système vous indique une erreur, effectuer la commande suivante afin de voir ce qui pose problème.

systemctl status bind9

Si tout semble OK vous pouvez essayer votre service grâce au commande nslookup et dig.

Par exemple la commande :

nslookup

192.168.1.23

Doit me retourner :

stationxp.sio.tp

Et inversement

nslookup

192.168.1.23

Doit me retourner :

stationxp.sio.tp

Installation et configuration  de Unbound sous Debian 9

Unbound est un logiciel serveur plus récent qui a été développé en 2006. Il a ensuite été réécrit de sa forme Java d’origine en langage C. Ce qui fait d’Unbound un logiciel de serveur DNS performant, c’est qu’il a été conçu en fonction de fonctionnalités modernes et qu’il utilise les dernières technologies requises pour la technologie des serveurs modernes. Contrairement à BIND, qui peut être utilisé à la fois comme serveur de noms faisant autorité et récursif, Unbound ne peut être utilisé que comme serveur de noms récursif. Cependant, il comporte des modules prenant en charge la fonctionnalité DNSSEC.

Tout comme BIND, Unbound a été créé pour être utilisé sur des systèmes d’exploitation de type Unix. Cependant, les développements récents ont permis de l’utiliser sur des machines Windows.

Installer le paquet Unbound :

apt-get install unbound

Téléchargement de la liste des serveurs DNS racines :

cd /var/lib/unbound/ && wget ftp://ftp.internic.net/domain/named.cache

Mise en place de cette liste pour le serveur Unbound :

mv named.cache root.hints && chown unbound:unbound root.hints

Configuration en serveur cache – Caching DNS

Dans cette configuration, Unbound va effectuer les requêtes et mettre les réponses en mémoire cache pour les requêtes à venir.

Il faut modifier /etc/unbound/unbound.conf

Exemple de configuration assez simple :

server:

 verbosity: 1                   #de 0 à 5 en fonction de vos envies de messages ;), 0 seulement les erreurs

 interface: 192.168.0.1           #Adresse du serveur DNS Unbound, si vous désirez unbound sur plusieurs interfaces remplacer par 0.0.0.0

 access-control: 192.168.0.0/24 allow       #autorisez votre réseau

 # Par défaut tout est refusé ! à part localhost.

 # Possible choix :  deny (drop message), refuse (polite error reply), allow (recursive ok), allow_snoop (recursive and nonrecursive ok)




#Ajouter la zone qui transfère les requêtes DNS non effectuées par votre serveur vers le domaine racine (.)

forward-zone:

 name: "."

 forward-addr: 208.67.222.222   #serveur DNS OpenDNS

 forward-addr: 208.67.220.220  #serveur DNS OpenDNS

 forward-addr: 8.8.8.8                #serveur DNS de google

 forward-addr: 8.8.4.4               #serveur DNS de google

forward-addr:     1.1.1.1           #serveur DNS de Cloudflare

Configuration en tant que serveur principale

Il faut modifier encore une fois le même fichier /etc/unbound/unbound.conf

server:  

 verbosity: 1

 #num-threads: 2 #cas cpu 2 coeurs

 interface: 0.0.0.0

 do-ip4: yes

 do-udp: yes

 do-tcp: yes

 access-control: 10.0.0.0/16 allow # j'autorise toutes les machines de mon LAN a interroger le dns

 chroot: "" #pas de chroot par défaut

 logfile: "/var/log/unbound.log" #ici un fichier est dédié aux logs

 use-syslog: no #log par défaut dans syslog

 hide-identity: yes 

 hide-version: yes 

 harden-glue: yes

 harden-dnssec-stripped: yes

 use-caps-for-id: yes # on résout gOogLe.cOm et google.com de la même manière

 private-domain: "sio.tp" #a partir d'ici on définit son propre suffix dns de réseau local

 local-zone: "sio.tp." static

 local-data: "UNBOUNDSRV.sio.tp. IN A 10.0.232.13" #résolution sens nom vers adresse

 local-data: "stationxp.sio.tp. IN A 192.168.1.23 "

 local-data-ptr: "10.0.23.103 kbarre-debian.sio.tp" #résolution inverse : adresse vers nom

 local-data-ptr: "192.168.1.23  stationxp.sio.tp"

Option DNS supplémentaire

Activer IPv4 et Support des Protocols :

do-ip4: yes

do-ip6 no  #désactivez si vous obtenez une erreur au lancement du service

do-udp: yes

do-tcp: yes

Activer les logs :

logfile: /var/log/unbound

Cacher l’identité et la version du serveur (Requêtes : id.server et hostname.bind) :

hide-identity: yes

hide-version: yes

Paramètre limitant l’usurpation de DNS

harden-glue: yes