Comme pas mal de monde, j’en ai un peu marre des résolveurs DNS menteurs. De plus, j’utilise un boitier VPN mobile et plutôt que de me servir des serveurs DNS de mon fournisseur d’accès associatif, j’ai décidé de mettre en place mon propre serveur DNS récursif sur ce dernier. Voulant quelque chose de simple et efficace, j’ai choisi Unbound.

admin@boitier$ sudo aptitude install unbound

admin@boitier$ cd /var/lib/unbound/

admin@boitier$ sudo wget ftp://ftp.internic.net/domain/named.cache

admin@boitier$ sudo mv named.cache root.hints

admin@boitier$ sudo chown unbound:unbound root.hints

admin@boitier$ sudo vim /etc/unbound/unbound.conf

# Unbound configuration file for Debian.
#
# See the unbound.conf(5) man page.
#
# See /usr/share/doc/unbound/examples/unbound.conf for a commented
# reference config file.

server:
# The following line will configure unbound to perform cryptographic
# DNSSEC validation using the root trust anchor.
auto-trust-anchor-file: "/var/lib/unbound/root.key"

# Interface d’écoute IPv4 et IPv6 sur le réseau
interface: 192.0.2.1
interface: 2001:db8::ffff:ffff:ffff:ffff

# Quels réseaux ont le droit de se servir du serveur DNS
# Attention !! Ne pas laisser votre serveur récursif ouvert à tous !
access-control: 2001:db8::/64 allow
access-control: 192.0.2.0/24 allow

# Fichier indiquant les serveurs DNS racines
root-hints: "/var/lib/unbound/root.hints"

# 0n cache la version de Unbound
hide-version: yes
hide-identity: yes

# On autorise l’IPv4 et l’IPv6
do-ip4: yes
do-ip6: yes

La directive auto-trust-anchor-file permet d’avoir l’empreinte de la clef publique des serveurs racines nommée DS. Cette empreinte permet d’établir une chaine de confiance entre la racine, les TLD et le domaine que vous possédez.

Comme les clefs sont régulièrement renouvelées, cette directive permet également de mettre à jour le fichier en cas de changement de clefs au niveau de la racine DNS. Un élément relativement important pour que tout se passe bien est que votre machine sur laquelle est installée Unbound doit être à l’heure et donc synchronisée à l’aide du protocole NTP.

Je rappelle également que DNSSEC est un mécanisme permettant de signer les enregistrements d’une zone DNS évitant ainsi les problèmes de mensonges ou d’empoisonnement de cache. Ce n’est pas, contrairement à ce que certains pensent, un outil de chiffrement point à point comme TLS mais un outil servant à la signature.

Enfin, je n’ai volontairement pas indiquer de fichier de log afin de préserver la carte SD de mon boitier VPN (je sais ce n’est pas bien !!), ni cherché à gérer ou améliorer les performances de mon résolveur. Bref, une configuration minimale qui me permet d’avoir mon propre serveur récursif en lieu et place de ceux de chez Frxx, Oraxxx, Sxx, ou Bouxxxx avec cerise sur le gâteau, la possibilité d’utiliser DNSSEC pour les domaines où ce dernier a été implémenté !

Pour vérifier si votre Unbound tout neuf gère correctement DNSSEC, rien de plus simple, dig est votre ami depuis l’une de vos machines clientes préférées.

user@laptop$ dig +dnssec debian.org @2001:db8::ffff:ffff:ffff:ffff

; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> +dnssec debian.org @2001:db8::ffff:ffff:ffff:ffff
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61493
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 7, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;debian.org. IN A

;; ANSWER SECTION:
debian.org. 276 IN A 130.89.148.14
debian.org. 276 IN A 200.17.202.197
debian.org. 276 IN A 150.203.164.38
debian.org. 276 IN A 140.211.15.34
debian.org. 276 IN A 128.31.0.62
debian.org. 276 IN A 5.153.231.4
debian.org. 276 IN RRSIG A 8 2 300 20150412211032 20150303201032 283
8 debian.org. HwK/TacgcEj31X2Y+xpUZ3sJ+nIOYUv9dVhmFdjrU33JufBgqN1Zw/t+ KylS54/A1kpSoswxM26+
uQa0bjKeXUmstwJZAPy10Nzucaahl8LTKtJW pL4U9E91j3VRgTiJqZ1zpPrao82yc57zmMu6cekkhqdwE6GePeqK+B
er tuOh0dInt1TeIjh4NcyL20hvom9wUKEM3afCSyqt8Ox8B0YXJxtszG6O X+kECmVUlLjiB0Fn2UqIUkKJok2GY/S
O

;; Query time: 2 msec
;; SERVER: 2001:db8::ffff:ffff:ffff:ffff#53(2001:db8::ffff:ffff:ffff:ffff)
;; WHEN: Sun Mar 8 02:25:43 2015
;; MSG SIZE rcvd: 369

Et enjoy ! ;)

PS : J’ai volontairement mis en gras le flags ad qui signifie que la signature DNSSEC e