22
0
Fork 0
wiki/HowtoUnbound.md

208 lines
5.1 KiB
Markdown
Raw Normal View History

2017-01-20 11:17:20 +01:00
---
2017-07-27 01:53:00 +02:00
categories: openbsd network DNS
title: Howto Unbound
2017-01-20 11:17:20 +01:00
---
2016-12-29 11:25:39 +01:00
2017-07-27 17:49:30 +02:00
* Documentation : <https://www.unbound.net/documentation/>
2017-07-25 15:20:52 +02:00
* Rôle Ansible : <https://forge.evolix.org/projects/ansible-roles/repository/show/unbound>
2017-07-31 17:25:14 +02:00
* Man pages : <https://man.openbsd.org/unbound> ou <https://manpages.debian.org/stretch/unbound/unbound.8.en.html>
2017-07-25 15:20:52 +02:00
2017-07-27 17:49:30 +02:00
[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/).
2017-07-25 15:36:12 +02:00
2017-07-27 01:53:00 +02:00
## Installation
2017-07-25 15:20:52 +02:00
2017-07-27 01:53:00 +02:00
### Debian
2017-07-25 17:36:30 +02:00
~~~
# apt install unbound
2017-07-27 01:53:00 +02:00
$ /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
2017-07-25 17:36:30 +02:00
~~~
2017-07-27 01:53:00 +02:00
### OpenBSD
2017-07-25 17:36:30 +02:00
2017-07-27 01:53:00 +02:00
Unbound est intégré dans la base d'OpenBSD, il est donc déjà présent.
2017-07-25 16:11:33 +02:00
2017-07-27 01:53:00 +02:00
## Configuration
2017-07-25 15:20:52 +02:00
2017-07-31 17:25:14 +02:00
<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` :
2016-12-29 11:25:39 +01:00
~~~
server:
2017-07-31 17:25:14 +02:00
interface: 192.0.2.254
2017-01-20 11:17:20 +01:00
interface: 127.0.0.1
interface: ::1
2016-12-29 11:25:39 +01:00
2017-01-20 11:17:20 +01:00
access-control: 0.0.0.0/0 refuse
access-control: 127.0.0.0/8 allow
2017-07-31 17:25:14 +02:00
access-control: 192.0.2.0/24 allow
2017-01-20 11:17:20 +01:00
access-control: ::0/0 refuse
access-control: ::1 allow
2016-12-29 11:25:39 +01:00
~~~
2017-07-31 17:25:14 +02:00
### Activation sous OpenBSD
2017-07-25 17:36:30 +02:00
2017-07-31 17:25:14 +02:00
On active Unbound dans `rc.conf.local` et on démarre le daemon :
2016-12-29 11:25:39 +01:00
~~~
2017-01-10 17:26:23 +01:00
# rcctl enable unbound
# rcctl start unbound
2016-12-29 11:25:39 +01:00
~~~
2019-03-12 11:38:03 +01:00
## 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
~~~
2019-03-12 11:38:03 +01:00
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
~~~
2019-03-12 11:38:03 +01:00
### dnstop
Voir [HowtoBind#dnstop]()
2017-07-27 01:53:00 +02:00
## FAQ
2017-07-25 17:16:18 +02:00
### Vider le cache pour un domaine particulier
~~~
unbound-control flush_zone foo.local
~~~
2017-07-31 17:25:14 +02:00
### 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:
2017-07-31 17:25:14 +02:00
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."
~~~
2017-01-24 16:13:44 +01:00
2017-07-27 01:53:00 +02:00
### Rajouter / modifier un enregistrement DNS
2017-01-24 16:13:44 +01:00
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 :
~~~
2017-07-31 17:25:14 +02:00
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"
2017-01-24 16:13:44 +01:00
~~~
2017-07-27 01:53:00 +02:00
### Configuration sur un routeur
2017-07-31 17:25:14 +02:00
Il NE faut JAMAIS mettre une configuration de type :
~~~
2017-07-31 17:25:14 +02:00
interface: 0.0.0.0
~~~
2017-07-31 17:25:14 +02:00
…car Unbound ne va pas forcément répondre avec la bonne interface et on peut avoir des erreurs du type :
~~~
2017-07-31 17:25:14 +02:00
$ dig @IP-routeur
;; reply from unexpected source: autre.ip.du.routeur#53, expected ipdurouteur#53
~~~
2017-07-31 17:25:14 +02:00
Il faut lister explicitement toutes les interfaces sur lesquelles on souhaite qu'Unbound écoute.
2017-07-25 15:44:11 +02:00
2017-07-27 01:53:00 +02:00
### dig +trace ne fonctionne pas
2017-07-25 15:44:11 +02:00
C'est certainement parce que le client a une autorisation insuffisante
2017-07-27 17:49:30 +02:00
pour ce type de requête particulière. Il faut donc remplacer dans la
2017-07-25 15:44:11 +02:00
directive `access-control:` le mot-clé `allow` par `allow_snoop`.
2017-07-25 16:58:16 +02:00
2018-02-12 14:32:10 +01:00
### 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
~~~