|
|
- ---
- categories: openbsd network DNS
- title: Howto Unbound
- ---
-
- * Documentation : <https://www.unbound.net/documentation/>
- * Rôle Ansible : <https://forge.evolix.org/projects/ansible-roles/repository/show/unbound>
- * Man pages : <https://man.openbsd.org/unbound> ou <https://manpages.debian.org/stretch/unbound/unbound.8.en.html>
-
- [Unbound](https://www.unbound.net/) est un serveur DNS récursif. Il gère notamment du cache et la validation DNSSEC. Par rapport à [Bind](HowtoBind) il est léger et sécurisé, mais il ne sait pas faire autorité pour un nom de domaine. Il a été écrit et est maintenu par [NLnet Labs](https://www.nlnetlabs.nl/).
-
- ## Installation
-
- ### Debian
-
- ~~~
- # apt install unbound
-
- $ /usr/sbin/unbound -h | tail -5
- Version 1.6.0
- linked libs: libevent 2.0.21-stable (it uses epoll), OpenSSL 1.1.0f 25 May 2017
- linked modules: dns64 python validator iterator
- BSD licensed, see LICENSE in source package for details.
- Report bugs to unbound-bugs@nlnetlabs.nl
- ~~~
-
- ### OpenBSD
-
- Unbound est intégré dans la base d'OpenBSD, il est donc déjà présent.
-
-
- ## Configuration
-
- <https://manpages.debian.org/stretch/unbound/unbound.conf.5.en.html> ou <https://man.openbsd.org/unbound.conf>
-
- Fichiers de configuration sous Debian :
-
- ~~~
- /etc/unbound/
- ├── unbound.conf
- ├── unbound.conf.d
- │ ├── qname-minimisation.conf
- │ └── root-auto-trust-anchor-file.conf
- ├── unbound_control.key
- ├── unbound_control.pem
- ├── unbound_server.key
- └── unbound_server.pem
- ~~~
-
- Fichiers de configuration sous OpenBSD (Unbound est dans un chroot) :
-
- ~~~
- /var/unbound/etc/
- └── unbound.conf
- ~~~
-
- Par défaut, Unbound écoute uniquement sur _localhost_, la configuration minimale consiste surtout à le sécuriser :
-
- ~~~
- server:
- hide-identity: yes
- hide-version: yes
- auto-trust-anchor-file: "/var/unbound/db/root.key"
- ~~~
-
- Si l'on veut le faire écouter sur un réseau local, il faut ajuster les directives `interface` et `access-control` :
-
- ~~~
- server:
- interface: 192.0.2.254
- interface: 127.0.0.1
- interface: ::1
-
- access-control: 0.0.0.0/0 refuse
- access-control: 127.0.0.0/8 allow
- access-control: 192.0.2.0/24 allow
- access-control: ::0/0 refuse
- access-control: ::1 allow
- ~~~
-
- ### Activation sous OpenBSD
-
- On active Unbound dans `rc.conf.local` et on démarre le daemon :
-
- ~~~
- # rcctl enable unbound
- # rcctl start unbound
- ~~~
-
- ## Monitoring
-
- ### Avoir des statistiques
-
- On peut accéder à des statistiques avec [unbound-control(8)](https://man.openbsd.org/unbound-control).
-
- Pour cela, le `remote-control` doit être activé :
-
- ~~~
- remote-control:
- control-enable: yes
- control-use-cert: no
- control-interface: /var/run/unbound.sock
- ~~~
-
- Sous Debian :
-
- ~~~
- # unbound-control stats
- ~~~
-
- Sous OpenBSD :
-
- ~~~
- $ doas -u _unbound unbound-control stats
- ~~~
-
- Si l'on veut avoir des statistiques plus détaillées, avec notamment le type de requêtes, on peut ajouter à la configuration :
-
- ~~~
- extended-statistics: yes
- ~~~
-
- Enfin, les statistiques peuvent régulièrement être affichées dans les logs avec cette configuration :
-
- ~~~
- statistics-interval: 300
- ~~~
-
- ### dnstop
-
- Voir [HowtoBind#dnstop]()
-
- ## FAQ
-
- ### Vider le cache pour un domaine particulier
-
- ~~~
- unbound-control flush_zone foo.local
- ~~~
-
- ### Utiliser un serveur DNS particulier pour un nom de domaine
-
- On pourra forwarder certaines requêtes vers un serveur différent en rajoutant les directives ci-dessous :
-
- ~~~
- forward-zone:
- name: "foo.local."
- forward-addr: 192.0.2.1
- forward-first: yes
- ~~~
-
- Dans le cas présent, les requêtes concernent une zone locale, ainsi afin d'éviter une vérification DNSSEC pour ces dernières on ajoutera la directive suivante dans la configuration de unbound :
-
- ~~~
- domain-insecure: "foo.local."
- ~~~
-
- ### Rajouter / modifier un enregistrement DNS
-
- Parfois on veut pouvoir modifier un enregistrement DNS, par exemple
- quand on a un VPN. On peut utiliser `/etc/hosts` pour les champs A
- mais pas pour les MX. On peut donc utiliser unbound pour mentir :
-
- ~~~
- local-zone: "example.com." typetransparent
- local-data: "example.com. IN MX 10 fakemx.example.com."
- local-data: "fakemx.example.com. IN A 192.168.1.3"
- ~~~
-
- ### Configuration sur un routeur
-
- Il NE faut JAMAIS mettre une configuration de type :
-
- ~~~
- interface: 0.0.0.0
- ~~~
-
- …car Unbound ne va pas forcément répondre avec la bonne interface et on peut avoir des erreurs du type :
-
- ~~~
- $ dig @IP-routeur
- ;; reply from unexpected source: autre.ip.du.routeur#53, expected ipdurouteur#53
- ~~~
-
- Il faut lister explicitement toutes les interfaces sur lesquelles on souhaite qu'Unbound écoute.
-
- ### dig +trace ne fonctionne pas
-
- C'est certainement parce que le client a une autorisation insuffisante
- pour ce type de requête particulière. Il faut donc remplacer dans la
- directive `access-control:` le mot-clé `allow` par `allow_snoop`.
-
- ### Mentir sur le TTL
-
- On peut vouloir mettre un TTL minimum pour ne pas respecter le TTL quand il est mis à des valeurs anormalement basses. Pour mettre le TTL minimum à 600 :
-
- ~~~
- cache-min-ttl: 600
- ~~~
-
- ### Diminuer le cache des réponses négatives
-
- Si on veut diminuer à 30s la durée de mise en cache des résolutions n'ayant pas de réponse :
-
- ~~~
- cache-max-negative-ttl: 30
- ~~~
|