maj : 19/01/2024

Il existe plusieurs types de serveurs DNS

Les quatre serveurs DNS qui chargent une page Web

  • Le serveur DNS récursif (Resolving Name Server) : le serveur DNS récursif répond à une requête DNS et demande l’adresse à d’autres serveurs DNS, ou détient déjà un enregistrement de l’adresse IP du site.
  • Serveur racine du DNS (Root Name Server) : il s’agit du serveur de noms pour la zone racine. Il répond à des requêtes directes et peut renvoyer une liste de noms de serveurs faisant autorité pour le domaine de haut niveau correspondant.
  • Serveur DNS TLD : le serveur TLD (top-level domain : domaine de premier niveau) est l’un des serveurs DNS de haut niveau que l’on trouve sur Internet. Lorsque vous recherchez www.varonis.com, un serveur TLD répondra en premier pour le « .com », puis le DNS recherchera « varonis ».
  • Serveur de noms faisant autorité (Authoritative Name Server) : le serveur de noms faisant autorité constitue le terminus d’une requête DNS. Le serveur de noms faisant autorité contient l’enregistrement DNS répondant à la requête.

Je vous propose d’installer votre propre serveur DNS récursif en lieu et place de celui de votre FAI ou celui de Google (8.8.8.8).

J’utilise par défaut Debian comme distribution Linux. Mais cela fonctionne avec la plus part des distib.

Installer UNBOUND

apt update 
apt install unbound

Récupération de la liste des DNS racines

/usr/bin/curl ftp://FTP.INTERNIC.NET/domain/named.cache -o /var/lib/unbound/root.hints

Fichier de configuration

#See /usr/share/doc/unbound/examples/unbound.conf for a commented
#reference config file.

server:

#Activer les logs
#unwanted-reply-threshold: 10000000
  logfile: /var/log/unbound.log
  verbosity: 1
  val-log-level: 2
  statistics-cumulative: yes
  extended-statistics: yes

#Repondre aux requetes DNS sur toutes les interfaces r??seau.
  interface: 0.0.0.0
  interface: ::1

#Port sur lequel sont fait les requetes DNS
  port: 53

#support de l'IPv4
  do-ip4: yes
#support de l'IPv6
  do-ip6: yes
#support udp
  do-udp: yes
#support tcP
  do-tcp: yes

#Lancer sous forme de Daemon
  do-daemonize: yes

#plages adresse ip autorisee ?? consulter le serveur dns
  access-control: 127.0.0.0/8 allow
  access-control: 192.168.100.0/24 allow
  access-control: 172.20.0.0/16 allow
  access-control: 2a01:e0a:4a0:b460::/64 allow
  access-control: 2a01:e0a:4a0:b461::/64 allow
  access-control: 2a01:e0a:4a0:b462::/64 allow

#j'interdis tout le reste de l'Internet !
  access-control: ::0/0 refuse
  access-control: 0.0.0.0/0 refuse

#emplacement du fichier indiquant les infos pour consulter
#les serveurs DNS root
#fichier a telecharger a cette adresse:
#ftp://FTP.INTERNIC.NET/domain/named.cache
  root-hints: "/var/lib/unbound/root.hints"

#Cacher les infos sur le serveur DNS
  hide-identity: yes
  hide-version: yes

#param??tre limitant l'usurpation de DNS
  harden-glue: yes

#Requ??rir les infos DNSSEC pour les zones de confiance
  harden-below-nxdomain: yes
  harden-dnssec-stripped: yes

#Traiter la case de la meme maniere
  use-caps-for-id: yes

#Options permettant de ne pas prendre la casse en compte
#lors des requetes d'url.
#homeServer-DIY.net sera traduit en homeserver-diy.net par le serveur
#et il communiquera la bonne IP
  use-caps-for-id: yes

#valeur mini de la TTL en secondes. Ne pas d??passer 1h
  cache-min-ttl: 3600

#valeur max de la TTL en secondes.
  cache-max-ttl: 86400

#activation du prefetch. Si un requete est faite lorsque la tll expire
#dans moins de 10% du temps qu'il lui est imparti
#le cache se mettra a jour aussitot apres avoir repondu a la requ??te.
  prefetch: yes

#nombre de core du serveur dns
  num-threads: 2

#Tweaks et optimisations du cache
#Nombre de slabs a utiliser .
#Doit etre une puissance de 2 du num-threads.
  msg-cache-slabs: 4
  rrset-cache-slabs: 4
  infra-cache-slabs: 4
  key-cache-slabs: 4

#R??glage de la taille du cache en Mo:
  rrset-cache-size: 10m
  msg-cache-size: 4m

#nombre de connexions par coeurs CPU doit etre ainsi calculee : 1024 / nb_coeurs_CPU - 50
  outgoing-range: 462

#Taille du buffer pour le port UPD en entree.
#Evite la perte de message lors des requetes
#so-rcvbuf: 4m
#so-sndbuf: 4m

#Renforcer la vie privee des adresses du LAN.
#Ne mettre que des adresses locales
  private-address: 192.168.1.0/24

#Si non nulles, les reponses indesirables
#ne sont pas seulement signales dans les statistiques,
#mais aussi ajoutees a un total cumule maintenu par thread.
#Si elle atteint le seuil, un avertissement est affiche et une action
#defensive est prise, le cache est vide pour eviter
#l'empoissonnement DNS.
#Une valeur de 10000 est suggere,
#la valeur par defaut est de 0 (service d??sactiv??).
  unwanted-reply-threshold: 10000000

#Autorise a repondre aux requetes du localhost
  do-not-query-localhost: no

#Emplacement du fichier root.key pour utilisation de DNSSEC
  auto-trust-anchor-file: "/var/lib/unbound/root.key"

#Toutes les donnees non signes dans la section supplementaire seront
#retires des messages securises
  val-clean-additional: yes

###########################################################################
# LOCAL ZONE
###########################################################################

# Include file for local-data and local-data-ptr
  include: /etc/unbound/a-records.conf
  include: /etc/unbound/ad-block.conf

Résolution DNS local

Dans le fichier /etc/unbound/a-records.conf

local-zone: "toto2" redirect
local-data: "toto2.akoonet.com A 192.168.100.202"

local-zone: "toto.akoonet.com" redirect
local-data: "toto.akoonet.com A 192.168.100.204"
local-data: "toto.akoonet.com AAAA 2a01:e0a:4a0:b460::204"

Bloquer les pubs

Il est possible d’utiliser UNBOUND comme bloquer de publicité

/usr/bin/curl -sS -L --compressed "http://pgl.yoyo.org/adservers /serverlist.php?hostformat=unbound&showintro=0&mimetype=plaintext" > /etc/unbound/ad-block.conf

Vérifier la configuration :

unbound-checkconf

Redémarrer Unbound :

systemctl restart unbound

La machine utilise son propre serveur DNS

vim /etc/resolv.conf
nameserver 192.168.x.x

si DHCP editer plutôt le bon fichier (plutôt que /etc/resolv.conf)

vim /etc/dhcp/dhclient.conf
# au dessus du bloc request
supersede domain-name-servers 192.168.x.x;

redémarrer le gestionnaire de réseau

service networking restart

Tester le serveur DNS Unbound :

time nslookup afnic.fr
# OU
dig afnic.fr

Création d’une tache de mise à jours des DNS racines et bloqueur de pub

L’idée est de récupérer une fois par mois les deux fichiers

/etc/cron.monthly/unbound

!/bin/sh
#update file named.cache
/usr/bin/curl ftp://FTP.INTERNIC.NET/domain/named.cache -o /var/lib/unbound/root.hints
#update file ads servers
/usr/bin/curl -sS -L --compressed "http://pgl.yoyo.org/adservers/serverlist.php?hostformat=unbound&showintro=0&mimetype=plaintext" > /etc/unbound/ad-block.conf