Outils pour utilisateurs

Outils du site


unbound

unbound en résolveur cache DNS local

Motivation

Beaucoup (trop) de domaines ont un TTL absurdement faible (entre 0 et 5 minutes), ce qui provoque - au bout de ce TTL - à nouveaux des requêtes DNS sortantes. Autrement dit: Beaucoup de requêtes DNS sortantes pour rien, qui ajoutent un délai de traitement inutile (surtout quand les DNS de votre FAI sont lents ou que votre connexion n'est pas très rapide).

Ubound est un résolveur DNS. On peut s'en servir comme résolveur pour un réseau local, mais dans cette page on ne va l'aborder que dans le cadre d'un résolveur utilisé uniquement par la machine sur laquelle il est installé. L'objectif est d'améliorer les temps de réponse des requêtes DNS des applications en utilisant le cache d'unbound.

Cette page contient donc les instructions pour installer un unbound local en forçant le TTL à 24 heures. Par la suite, il est possible que j'ajoute les instructions pour faire du DOH/DOT sortant. Il est également possible d'utiliser une liste de blocage avec unbound, mais je ne l'aborderai sans doute pas dans cette page car un simple script cron qui à met à jour /etc/hosts est déjà disponible et il fait bien son boulot sans avoir à toucher à unbound.

J'ai conscience que forcer un TTL à 24 heures ne fait pas partie des "bonnes pratiques", mais au point où on en est, on fait déjà bien pire comme avec uBlock-origin sur le web.

Les instructions ci-dessous ont été testées sur un Ubuntu 20.04.

Le service unbound consomme 15 Mo de RAM, c'est donc léger.

Cette page n'aborde pas le chiffrement des requêtes DNS sortantes (DOH/DOT), mais j'ajouterai sans doute cela ultérieurement.

Installation et configuration

  • Installation:
    sudo apt install unbound
  • Configuration: Créez le fichier /etc/unbound/unbound.conf.d/myconf.conf et mettez dedans:
    myconf.conf
    server:
      do-ip6: yes
      interface: 127.0.0.1
      interface: "::1"
      access-control: 0.0.0.0/0 refuse
      access-control: ::0 refuse
      access-control: 127.0.0.0/8 allow
      access-control: ::1 allow
      cache-min-ttl: 86400
     
    forward-zone:
      name: "."
      forward-addr: 9.9.9.9
      forward-addr: 149.112.112.112
      forward-addr: 2620:fe::fe
      forward-addr: 2620:fe::9
     
    remote-control:
      control-enable: yes

Explications des options

Explications des options

  • do-ip6: yes : Faire résolveur IPv4 et IPv6.
  • interface: : se mettre en écoute que sur ces interfaces (donc pas sur les IP externes)
  • access-control: : par mesure de sécurité, dit aussi à unbound de ne répondre qu'aux requêtes qui viennent de la machine elle-même.
  • cache-min-ttl: 86400 : Voilà la vilaine ligne qui force le TTL à 24 heures (=86400 secondes)
  • forward-zone: : Tous les paramètres de cette section servent à indiquer quel serveur DNS externe unbound doit utiliser. J'ai mis ici Quad9 car c'est un résolveur DNS publique européen non censuré 1), avec en prime quelques sécurité contre les botnets.
  • control-enable: yes permet l'utilisation de l'outils en ligne de commande unbound-control pour obtenir des statistiques.


  • Redémarrez unbound:
    sudo systemctl restart unbound
  • Vérifiez qu'il est bien en écoute:
    >sudo netstat -pantu | grep unbound
    tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      42046/unbound       
    tcp        0      0 127.0.0.1:8953          0.0.0.0:*               LISTEN      42046/unbound       
    tcp6       0      0 ::1:53                  :::*                    LISTEN      42046/unbound       
    tcp6       0      0 ::1:8953                :::*                    LISTEN      42046/unbound       
    udp        0      0 127.0.0.1:53            0.0.0.0:*                           42046/unbound       
    udp6       0      0 ::1:53                  :::*                                42046/unbound
  • Dans Network-manager, reconfigurez chacune de vos connexions pour utiliser comme résolveur DNS 127.0.0.1 (en IPv4) et ::1 (en IPv6):
    • Menu réseau > Modifier les connnexions…
    • Pour chacune des connexion: Sélectionnez-la et cliquez sur le petit engrenage pour la configurer.
    • Onglet “Paramètres IPv4”:
      • Méthode: “Adresses automatiques uniquement (DHCP)”“
      • Serveurs DNS : 127.0.0.1
    • Onglet ”Paramètres IPv6“:
      • Méthode: ”Automatique, adresses uniquement“:
      • Serveurs DNS : ::1
  • Vérifier que le TTL est bien forcé à 24 heures:
    • Installez le package ldnsutils:
      sudo apt install ldnsutils
    • Testez un domaine:
      drill google.com
      • Dans les résultats, vous verrez une ligne:
        google.com.	86400	IN	A	216.58.213.14
      • 86400 est le compteur de TTL (qui va diminuer avec le temps)
  • Voir les statistiques d'unbound en temps réel:
    • sudo watch "unbound-control stats_noreset | grep -F total.num.cache"
    • Exemple:
      total.num.cachehits=2145
      total.num.cachemiss=323
    • cachehits : Une requête DNS est arrivée sur unbound, et il a pu y répondre grâce à son cache local.
    • cachemiss : Une requête DNS est arrivée sur unbound, et il n'avait pas la réponse. Il a donc envoyé une requête DNS sortante, puis conserve une copie de la réponse dans son cache.

Cela va dépendre de votre utilisation d'internet, mais en ce qui me concerne après quelques heures d'utilisation j'ai 85% requêtes DNS faites par les applications qui tombent dans le cache d'unbound.

Alternatives et liens

1)
contrairement aux DNS des fournisseurs d'accès français: Orange, Free, SFR, Bouygues…
unbound.txt · Dernière modification: 2020/12/09 09:27 de sebsauvage