135 lines
3.5 KiB
Markdown
135 lines
3.5 KiB
Markdown
---
|
|
categories: openbsd network dns
|
|
title: HowtoUnbound
|
|
---
|
|
|
|
* Documentation : <https://www.unbound.net/documentation/index.html>
|
|
* Rôle Ansible : <https://forge.evolix.org/projects/ansible-roles/repository/show/unbound>
|
|
* Man page : <https://man.openbsd.org/unbound>
|
|
|
|
Unbound est un serveur DNS récursif avec cache et sachant faire de la
|
|
validation DNSSEC. Contrairement à [Bind](../HowtoBind), il ne sait pas
|
|
faire autorité pour un domaine. Il a été écrit et est maintenu par
|
|
[NLnet Labs](https://www.nlnetlabs.nl/).
|
|
|
|
Du fait de la légèreté, de sa modernité et par conséquent de sa
|
|
meilleure sécurité, unbound a remplacé bind dans un certain nombre de
|
|
projet libre.
|
|
|
|
# Installation
|
|
|
|
## Debian
|
|
|
|
Sous Debian 9, on installe la version 1.6.0
|
|
|
|
~~~
|
|
# apt install unbound
|
|
~~~
|
|
|
|
## OpenBSD
|
|
|
|
Unbound est intégré dans la base d'OpenBSD, il n'y a donc pas besoin
|
|
de l'installer.
|
|
|
|
Néanmoins comme 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 particulier. 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).
|
|
|
|
~~~
|
|
$ doas -u _unbound unbound-control stats
|
|
~~~
|