--- categories: openbsd network DNS title: Howto Unbound --- * Documentation : * Rôle Ansible : * Man page : [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. Attention, Unbound est dans un chroot, sa configuration n'est pas présente dans `/etc` mais dans `/var/unbound/etc`. ## Configuration Un exemple de configuration basique mais suffisante en l'absence de cas particulier : ~~~ server: # interface sur laquelle le daemon écoute interface: XX.XX.XX.XX interface: 127.0.0.1 interface: ::1 access-control: 0.0.0.0/0 refuse access-control: 127.0.0.0/8 allow # important, on précise qui pourra interroger le service access-control: XX.XX.XX.0/24 allow access-control: ::0/0 refuse access-control: ::1 allow hide-identity: yes hide-version: yes auto-trust-anchor-file: "/var/unbound/db/root.key" ~~~ En plus de la documentation, on peut se référer à [unbound.conf(5)](https://man.openbsd.org/unbound.conf). ### Sous OpenBSD On active unbound dans `rc.conf.local` et on démarre le daemon ! ~~~ # rcctl enable unbound # rcctl start unbound ~~~ ## FAQ ### Utiliser un serveur dns particulier pour une zone 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 PAS 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 @ipdurouteur ;; 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`. ### Avoir des statistiques On peut facilement accéder à des statistiques avec [unbound-control(8)](https://man.openbsd.org/unbound-control). Sous Debian : ~~~ # unbound-control stats ~~~ Sous OpenBSD : ~~~ $ doas -u _unbound unbound-control stats ~~~