wiki/HowtoOpenBSD/Unbound.md

119 lines
3.3 KiB
Markdown
Raw Normal View History

2017-01-20 11:17:20 +01:00
---
2017-07-25 15:20:52 +02:00
categories: openbsd network dns
2017-01-20 11:17:20 +01:00
title: HowToOpenBSD/Unbound
---
2016-12-29 11:25:39 +01:00
2017-07-25 15:20:52 +02:00
* Documentation : <https://www.unbound.net/documentation/index.html>
* Rôle Ansible : <https://forge.evolix.org/projects/ansible-roles/repository/show/unbound>
Unbound est un serveur DNS récursif avec cache et sachant faire de la
2017-07-25 15:22:19 +02:00
validation DNSSEC. Contrairement à [Bind](../HowtoBind), il ne sait pas
2017-07-25 15:36:12 +02:00
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.
2017-07-25 15:20:52 +02:00
Cette présente page se concentre sur unbound sur OpenBSD mais
nonobstant les spécificités lié à ce système d'exploitation, celle-ci
est globalement valable pour les autres systèmes aussi.
2017-07-25 16:11:33 +02:00
# Installation
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`.
On peut l'activer et le démarrer :
~~~
# rcctl enable unbound
# rcctl start unbound
~~~
2017-07-25 15:20:52 +02:00
# Configuration
2017-01-20 11:17:20 +01:00
Voici ce que doit contenir le fichier `/var/unbound/etc/unbound.conf`
2016-12-29 11:25:39 +01:00
~~~
server:
2017-01-20 11:17:20 +01:00
# interface sur laquelle le daemon écoute
interface: XX.XX.XX.XX
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
# important, on précise qui pourra interroger le service
2017-01-24 16:13:44 +01:00
access-control: XX.XX.XX.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-01-20 11:17:20 +01:00
hide-identity: yes
hide-version: yes
2016-12-29 11:25:39 +01:00
2017-01-20 11:17:20 +01:00
auto-trust-anchor-file: "/var/unbound/db/root.key"
2016-12-29 11:25:39 +01:00
~~~
2017-01-20 11:17:20 +01: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
~~~
## 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."
~~~
2017-01-24 16:13:44 +01:00
## 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.
2017-07-25 15:44:11 +02:00
## 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`.