mirroir readonly du Gitit wiki.evolix.org (attention, ne rien commiter/merger sur ce dépôt) https://wiki.evolix.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

5.1 KiB

categories title
openbsd network DNS Howto Unbound

Unbound est un serveur DNS récursif. Il gère notamment 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 nom de 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.

Configuration

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 :

server:
  interface: 192.0.2.254
  interface: 127.0.0.1
  interface: ::1

  access-control: 0.0.0.0/0 refuse
  access-control: 127.0.0.0/8 allow
  access-control: 192.0.2.0/24 allow
  access-control: ::0/0 refuse
  access-control: ::1 allow

Activation sous OpenBSD

On active Unbound dans rc.conf.local et on démarre le daemon :

# rcctl enable unbound
# rcctl start unbound

Monitoring

Avoir des statistiques

On peut accéder à des statistiques avec unbound-control(8).

Pour cela, le remote-control doit être activé :

remote-control:
    control-enable: yes
    control-use-cert: no
    control-interface: /var/run/unbound.sock

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

dnstop

Voir HowtoBind#dnstop

FAQ

Vider le cache pour un domaine particulier

unbound-control flush_zone foo.local

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:
  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 JAMAIS 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 @IP-routeur
;; 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.

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