Debian : Installer le serveur DNS Unbound

Un petit mémo pour installer et configurer simplement un serveur DNS Unbound, pour éviter d’utiliser ceux des FAI ou autres DNS menteurs.

Dans ce mini tutoriel, je vais installer Unbound sur mon VPS ou se trouve mon serveur OpenVPN, pour que ce dernier configure ma machine client avec ce serveur DNS.

unbound-openvpn

Pour ceux qui n’ont pas de VPS, j’avais fais un article qui explique comment installer Unbound sur son PC Ubuntu : https://memo-linux.com/ubuntu-serveur-dns-unbound/

Sinon, j’avais aussi écris un autre article avec DNSMasq et DNSCrypt, pour chiffrer les requêtes DNS : https://memo-linux.com/dnscrypt-dnsmasq-sur-archlinuxmanjaro-chiffrez-toutes-les-requetes-dns/

Installer Unbound sur Debian Jessie

Ici le serveur DNS qui sera installé aura pour fonction d’être récursif et faire du cache. Pour faire simple, si le serveur n’arrive pas à résoudre le nom FQDN, il va demander aux serveurs racines et compléter son cache, sinon le serveur répond à partir de son cache.

Attention, il faut absolument sécuriser le serveur pour qu’il ne soit pas ouvert à tout Internet !

  • Installer le paquet Unbound :
  • apt 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

Fichier de configuration du serveur DNS Unbound

Mon fichier de configuration :

server:
statistics-interval: 0
extended-statistics: yes
statistics-cumulative: yes
verbosity: 3
interface: 127.0.0.1
interface: 10.8.0.1 ## la passerelle VPN
port: 53
do-ip4: yes
do-ip6: no
do-udp: yes
do-tcp: no
access-control: 127.0.0.0/8 allow ## j'autorise mon serveur
access-control: 10.8.0.0/24 allow ## j'autorise le réseau établie avec mon OpenVPN
access-control: 0.0.0.0/0 refuse ## j'interdis tout le reste de l'Internet !
auto-trust-anchor-file: "/var/lib/unbound/root.key"
root-hints: "/var/lib/unbound/root.hints"
hide-identity: yes
hide-version: yes
harden-glue: yes
harden-dnssec-stripped: yes
use-caps-for-id: yes
cache-min-ttl: 3600
cache-max-ttl: 86400
prefetch: yes
num-threads: 6
msg-cache-slabs: 16
rrset-cache-slabs: 16
infra-cache-slabs: 16
key-cache-slabs: 16
rrset-cache-size: 256m
msg-cache-size: 128m
so-rcvbuf: 1m
unwanted-reply-threshold: 10000
do-not-query-localhost: yes
val-clean-additional: yes
##je bloque cetaines pubs
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"
local-zone: "ads.youtube.com" redirect
local-data: "ads.youtube.com A 127.0.0.1"
local-zone: "adserver.yahoo.com" redirect
local-data: "adserver.yahoo.com A 127.0.0.1"
local-zone: "ask.com" redirect
local-data: "ask.com A 127.0.0.1"
use-syslog: yes
logfile: /var/log/unbound.log
harden-dnssec-stripped: yes
cache-min-ttl: 3600
cache-max-ttl: 86400
prefetch: yes
prefetch-key: yes

Modifier le fichier /etc/resolv.conf :

nano /etc/resolv.conf
nameserver 127.0.0.1

Tests du serveur Unbound

Relmance du service Unbound :

systemctl restart unbound

Vérifier le status :

systemctl status unbound

Vérifier la résolution de nom à partir du serveur :

drill @127.0.0.1 memo-linux.com
;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 16398
;; flags: qr rd ra ; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 
;; QUESTION SECTION:
;; memo-linux.com.	IN	A

;; ANSWER SECTION:
memo-linux.com.	3600	IN	A	46.105.44.210

;; AUTHORITY SECTION:

;; ADDITIONAL SECTION:

;; Query time: 53 msec
;; SERVER: 127.0.0.1
;; WHEN: Mon Mar 14 11:22:34 2016
;; MSG SIZE  rcvd: 48

La résolution fonctionne et le temps de réponse est de 53 millisecondes, si on relance la commande le temps de réponse passe à 0 milliseconde.
Test de résolution de nom à partir un poste client connecté au VPN :

drill @10.8.0.1 memo-linux.com
;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 3390
;; flags: qr rd ra ; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 
;; QUESTION SECTION:
;; memo-linux.com.	IN	A

;; ANSWER SECTION:
memo-linux.com.	3561	IN	A	46.105.44.210

;; AUTHORITY SECTION:

;; ADDITIONAL SECTION:

;; Query time: 55 msec
;; SERVER: 10.8.0.1
;; WHEN: Mon Mar 14 12:26:50 2016
;; MSG SIZE  rcvd: 48

La résolution de nom se fait bien à partir du serveur DNS 10.8.0.1 , donc ça fonctionne parfaitement et à moi l’accès à l’Internet sans censure ! :cool:

Ressource

Je me suis aidé de cet excellent tutoriel : http://homeserver-diy.net/wiki/index.php?title=Installer_et_configurer_son_serveur_DNS_connect%C3%A9_aux_serveurs_root_avec_Unbound

16 Comments

  1. Bonjour,
    Petite erreur je crois dans la commande d’installation du serveur unbound (je n’ai pas vérifié). Je pense que vous voulez dire:
    apt-get install unbound
    ou
    aptitude install unbound

    Cdt,

  2. Hello,
    Oui tu as raison. C’est juste que je n’utilise plus apt/aptitude depuis longtemps et je n’avais pas connaissance de l’évolution de la commande. Par contre je confirme, il y a bien une coquille « apt install unbond ». Il manque un « U » à unbound.

    Sinon, merci à toi, ton site est super, pleins de mémos intéressants, les derniers articles Centreon sont très utiles. C’est parfait pour moi qui vais devoir me remettre à Debian. On devrait tous faire comme toi et noter/partager nos astuces.

  3. coquille corrigée !
    et merci à toi pour ton commentaire, cela m’encourage d’avantage :-)

  4. Si je fais [sudo service unbound stop] j’ai quand-même accès au net et les dns sont bien ceux du FAI et si je fais [sudo service unbound start] c’est bien le test dns localhost
    C’est normal si Unbound est stoppé d’avoir quand-même accès à internet ?

  5. @Pedro : c’est ton client DHCP qui te fournis les DNS de ton fournisseur, donc oui c’est normal…

  6. Bonsoir,
    J’ai pu faire l’installation identique, sauf pour unbound.conf où j’ai mis :
    access-control: 192.168.1.0/24 allow
    #access-control: 127.0.0.0/8 allow ## j’autorise mon serveur

    et j’ai laissé le resolv.conf avec l’adresse 192.168.1.20 qui est l’adresse de mon raspberry.

    1- je n’arrive pas à exécuter la commande drill (commande introuvable)
    2- je n’arrive pas à résoudre les DNS depuis mon navigateur

  7. Merci fred !

    J’ai pu installer la commande, cependant ça ne fonctionne toujours pas :
    # unbound-checkconf /etc/unbound/unbound.conf
    [1472310591] unbound-checkconf[2061:0] fatal error: config file /etc/unbound/unbound.conf is not inside chroot /usr/local/etc/unbound

    Quelqu’un a-t-il une idée ?

  8. Merci pour cette article.
    il y a cependant une petite coquille sur la dernière ligne de la conf
    prefetch-key: yes
    et non
    prefetch-keys: yes

    Bise

  9. Bon tuto ! Cependant, une explication approfondie du fichier de configuration aurait été super !

  10. Bonjour,
    Merci pour cet excellent tuto.
    J’ai un petit soucis ceci dit :
    Tout fonctionne avec mon VPN, mais si je ne veux pas l’utiliser, impossible de naviguer sur internet avec le DNS de mon serveur !
    j’ai bien mis :
    interface: 127.0.0.1
    interface : 10.x.z #ip vpn
    interface: 37.x.y.z #ip du serveur
    J’ai dû oublier quelque chose quelque part, mais quoi ?
    Merci

  11. Bonjour Jérôme,
    tu veux te service de ton serveur DNS à partir d’une machine hors VPN ? il te faut connaître ton adresse IP public et l’ajouter dans access-control

  12. Bonjour,
    Merci de ta réponse et désolé du retard.
    L’ajout de mon adresse ip a bien fonctionner.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.