Il existe plusieurs type 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

# Unbound configuration file for Debian.
#
See the unbound.conf(5) man page.
#
#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

#Répondre aux requêtes DNS sur toutes les interfaces réseau.
interface: 0.0.0.0
interface: ::1

#Port sur lequel sont fait les requêtes 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 autorisée à consulter le serveur dns
access-control: 192.168.1.0/24 allow
access-control: 127.0.0.0/8 allow
access-control: ::1/128 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 à télécharger là à 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 requêtes 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 requête est faite lorsque la tll expire #dans moins de 10% du temps qu'il lui est imparti
#le cache se mettra à jour aussitôt après avoir répondu à la requête.
prefetch: yes
nombre de core du serveur dns
num-threads: 4

#Tweaks et optimisations du cache
#Nombre de slabs à utiliser . 
#Doit être une puissance de 2 du num-threads.
msg-cache-slabs: 8
rrset-cache-slabs: 8
infra-cache-slabs: 8
key-cache-slabs: 8

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

#nombre de connexions par cœurs CPU doit être ainsi calculée : 1024 / nb_coeurs_CPU - 50
outgoing-range: 206

#Taille du buffer pour le port UPD en entrée. 
#Evite la perte de message lors des requêtes
so-rcvbuf: 1m
so-sndbuf: 1m

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

#Si non nulles, les réponses indésirables 
#ne sont pas seulement signalés dans les statistiques,
#mais aussi ajoutées à un total cumulé maintenu par thread.
#Si elle atteint le seuil, un avertissement est affiché et une action #défensive est prise, le cache est vidé pour éviter 
#l'empoissonnement DNS.
#Une valeur de 10000 est suggérée, 
#la valeur par défaut est de 0 (service désactivé).
unwanted-reply-threshold: 10000000

#Autorisé à répondre aux requêtes 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 données non signés dans la section supplémentaire seront #retirés des messages sécurisés
val-clean-additional: yes

#REDIRECTEUR INTERNE D'URL
local-zone: "cloud.akoonet.com" redirect
local-data: "cloud.akoonet.com A 192.168.1.200"
local-zone: "download.akoonet.com" redirect
local-data: "download.akoonet.com A 192.168.1.200"
local-zone: "WIN-SAUVE" redirect
local-data: "WIN-SAUVE A 192.168.1.220"
local-zone: "esxi01" redirect
local-data: "esxi01 A 192.168.1.199"
local-zone: "television" redirect
local-data: "television A 192.168.1.10"
local-zone: "Serveur_admin" redirect
local-data: "Serveur_admin A 192.168.1.210"

#Bloquer les Serveurs de Pub
include: "/var/lib/unbound/unbound_ad_servers"
include: "/etc/unbound/adblock-war.conf"
local-zone: "doubleclick.net" redirect
local-data: "doubleclick.net A 127.0.0.1"
#local-zone: "googlesyndication.com" redirect
#local-data: "googlesyndication.com A 127.0.0.1"
#local-zone: "googleadservices.com" redirect
#local-data: "googleadservices.com A 127.0.0.1"
#local-zone: "google-analytics.com" redirect
#local-data: "google-analytics.com A 127.0.0.1"

#Zones de forward (utilisation d'autres DNS pour peupler le cache)
#forward-zone:
#name: "."
#forward-addr: 212.27.40.240 # DNS FREE
#forward-addr: 212.27.40.241 # DNS FREE
#forward-addr: 37.235.1.174 # FreeDNS
#forward-addr: 37.235.1.177 # FreeDNS
#forward-addr: 50.116.23.211 # OpenNIC
#forward-addr: 64.6.64.6 # Verisign
#forward-addr: 64.6.65.6 # Verisign
#forward-addr: 74.82.42.42 # Hurricane Electric
#forward-addr: 84.200.69.80 # DNS Watch
#forward-addr: 84.200.70.40 # DNS Watch
#forward-addr: 91.239.100.100 # censurfridns.dk
#forward-addr: 109.69.8.51 # puntCAT
#forward-addr: 208.67.222.220 # OpenDNS
#forward-addr: 208.67.222.222 # OpenDNS
#forward-addr: 216.146.35.35 # Dyn Public
#forward-addr: 216.146.36.36 # Dyn Public
#forward-addr: 8.8.4.4 # Google
#forward-addr: 8.8.8.8 # Google

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" > /var/lib/unbound/unbound_ad_servers

/bin/chown unbound:unbound /var/lib/unbound/unbound_ad_servers

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" > /var/lib/unbound/unbound_ad_server
/bin/chown unbound:unbound /var/lib/unbound/unbound_ad_servers