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.
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.
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: 80.67.169.12 forward-addr: 80.67.169.40 forward-addr: 2001:910:800::12 forward-addr: 2001:910:800::40 forward-addr: 194.242.2.3 forward-addr: 193.19.108.3 forward-addr: 2a07:e340::3 remote-control: control-enable: yes
- 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 80% requêtes DNS faites par les applications qui tombent dans le cache d'unbound.
Alternatives et liens
- Blocky, un autre résolveur DNS, mais supportant les listes de blocage.
- Site officiel: https://github.com/0xERR0R/blocky/