Description
- OpenBSD : 6.2
Coupler des requêtes DNSSEC en utilisant “DNS-over-TLS” sous OpenBSD est non seulement possible, mais envisageable, et fonctionnel… plus ou moins nativement !
Pour les requêtes DNSSEC, nous avons nativement sous OpenBSD – un outil fort puissant et utile, à savoir : ‘‘unbound’’.
Unbound est capable de discuter sur la pile DualStack IPv4, IPv6 ; il nous permet aussi de créer/d’avoir en local un resolveur cache qui nous fait des requêtes auprès des DNS publiques, si besoin…
Il y a quelques mois, j’écrivais cet article sur comment Utiliser Unbound avec DNSSEC sur OpenBSD. Vous l’avez lu ? Très bien, sinon faites-le…
- Il faudra impérativement vous familiariser et mettre en place votre fichier de configuration, avec toutes les autres options utiles – ce n’est pas compliqué du tout.
- Assurez-vous impérativement de vérifier que vos requêtes soient correctes…
Quant à la question des requêtes DNS sur TLS, hier, nous avons vu l’usage de Stubby : Client DNS/TLS sous OpenBSD (EXPÉRIMENTAL) , lui aussi capable de discuter sur la DualStack (IPv4, IPv6) – c’est là qu’est la partie “EXPÉRIMENTAL”, car non natif, ni en tant que package, ni dans les ports : du moins, pour l’instant… mais c’est vraiment fonctionnel !
Créons un resolveur cache local DNSSEC avec DNS/TLS
Alors comment faire pour utiliser sur notre machine ces deux logiciels de manière à avoir un resolveur cache local communiquant sur DNSSEC et avoir des requêtes DNS sur TLS, dans le même laps de temps ?
Il semble que nous soyons obligés de coupler :
- unbound, bien que capable de comprendre DNSSEC, et d’utiliser un flux SSL, semble ne pas être – encore ? - capable d’authentifier les flux, de ré-utiliser les connexions TCP et TLS, d’être configuré pour le mode Strict ou Opportun lié à l’usage de DNS/TLS , voire d’envoyer les options relatives à cet usage confidentiel.
- c’est justement là qu’intervient un logiciel comme stubby en complément d’unbound. Lui est capable de faire ce que n’est pas capable unbound, mais n’est pas fait pour être un resolveur cache, même s’il est capable d’utiliser DNSSEC, lui aussi.
Configuration
resolv.conf
La première chose à s’assurer est d’avoir paramétré correctement votre fichier
/etc/resolv.conf
pour n’interroger qu’en local !
nameserver 127.0.0.1
nameserver ::1
unbound.conf
Ensuite, il faut modifier légèrement votre fichier /var/unbound/etc/unbound.conf
,
pour veiller à ajouter quelques paramètres ; il y a :
- l’usage de l’option
do-not-query-localhost
- et le fait de transmettre les requêtes non connues à notre ami stubby
# $OpenBSD: unbound.conf,v 1.7 2016/03/30 01:41:25 sthen Exp $
server:
(...)
do-not-query-localhost: no
(...)
forward-zone:
name: "." # use for ALL queries
forward-addr: ::1@853
forward-addr: 127.0.0.1@853
Toute requête DNS qui n’est pas en cache dans la mémoire d’unbound sera transmise à stubby qui fera le nécessaire… unbound prendra absolument le relais pour toute requête DNS identique.
stubby.yml
Il nous faut modifier le fichier de configuration de stubby /usr/local/etc/stubby/stubby.yml
,
en rapport avec le port spécifié sur les adresses que le service de
stubby va devoir écouter :
(...)
listen_addresses:
- 127.0.0.1@853
- 0::1@853
(...)
Si dans le fichier de configuration d’unbound, vous utilisez un autre numéro que celui-ci, veillez impérativement renseigner le même !
Pour information, il est envisageable de demander à stubby d’exécuter
ses requêtes sur le protocole DNSSEC ; pour cela, il faut décommenter
l’option dnssec_return_status: GETDNS_EXTENSION_TRUE
!
Cela augmente assurément le temps de charge des requêtes. Laissez donc à unbound le soin de les faire !
Dans la partie # Additional server
du fichier de configuration de stubby,
vous avez la possibilité de décommenter un ou plusieurs serveurs à interroger,
autant sur IPv4 qu’IPv6, dont le fameux Quad9 @9999….
Redémarrer les services
Si (re)démarrer LE service relatif à unbound n’est pas bien difficile, à
coup de : # rcctl restart unbound
, (re)démarrer celui de stubby n’est
pas possible car rien n’existe par défaut pour que cela puisse être.
Avant de chercher à redémarrer les services, pensez d’abord à vérifier vos fichiers de configuration - pour rappel :
- pour unbound :
$ unbound-checkconf
- pour stubby :
$ stubby -i
Création du fichier rc pour stubby
Pour que stubby puisse interagir en tant que service sur votre système
OpenBSD, il faut lui créer un fichier rc, à positionner dans /etc/rc.d/stubby
avec pour contenu ceci, ni + ni - :
#!/bin/sh
#
# $OpenBSD: stubby,v 0.2.2 2018/03/22 12:00:00 Stephane HUC $
daemon="/usr/local/bin/stubby"
daemon_flags=""
. /etc/rc.d/rc.subr
#rc_reload=NO
rc_cmd $1
Attribuez-lui des droits suivants : # chmod 555 /etc/rc.d/stubby
Voilà, maintenant vous allez pouvoir jouer du contrôleur rc :
# rcctl enable stubby
# rcctl set stubby flags "-g"
# rcctl start stubby
Tests
Très basiquement avec l’outil dig
, tel que :
$ dig @::1 A www.gandi.net
; <<>> DiG 9.4.2-P2 <<>> @::1 www.gandi.net
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12892
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.gandi.net. IN A
;; ANSWER SECTION:
www.gandi.net. 46710 IN CNAME prod.gandi.map.fastly.net.
prod.gandi.map.fastly.net. 3600 IN A 151.101.37.103
;; Query time: 644 msec
;; SERVER: ::1#53(::1)
;; WHEN: Fri Mar 23 01:17:20 2018
;; MSG SIZE rcvd: 83
On la réitère pour se rendre compte de la différence en terme de temps d’accès :
$ dig @::1 www.gandi.net
; <<>> DiG 9.4.2-P2 <<>> @::1 www.gandi.net
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2032
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.gandi.net. IN A
;; ANSWER SECTION:
www.gandi.net. 46706 IN CNAME prod.gandi.map.fastly.net.
prod.gandi.map.fastly.net. 3596 IN A 151.101.37.103
;; Query time: 1 msec
;; SERVER: ::1#53(::1)
;; WHEN: Fri Mar 23 01:17:24 2018
;; MSG SIZE rcvd: 83
644 millisecondes la première interrogation ; 1 milliseconde, la seconde… unbound fait son travail de cache assurément !
Documentations
- La documentation de stubby, sa FAQ et sa partie de configuration avec un resolveur cache local
- La documentation d’unbound
- Stephane Bortzmeyer explique certaines choses à ce propos [ici et là… par exemple !