3.7 KiB
categories | title |
---|---|
openbsd network DNS | Howto Unbound |
- 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. Il gère du cache et la validation DNSSEC. Par rapport à Bind il est léger et sécurisé, mais il ne sait pas faire autorité pour un domaine. Il a été écrit et est maintenu par NLnet Labs.
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).
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).
# sous Debian
$ sudo unbound-control stats
# sous OpenBSD
$ doas -u _unbound unbound-control stats