Skip to content

DNS, TLS & DNSSEC

Vincent Fortier edited this page Jul 11, 2020 · 3 revisions

Par défaut OpenWRT utilise dnsmasq pour le service de base et de redirection. Pour des raisons de performance, de risques de piratage, de fiabilité ou autres il peut parfois s'avérer intéressant d'utiliser un résolveur récursif tel que unbound ou stubby.

Personnellement je recommande d'utiliser stubby puisqu'il utilise moins d'espace sur des routeurs dont la capacité de stockage est réduite. De plus il s'avère que unbound crash au démarrage et est passablement plus compliqué à configurer. En comparaison stubby est fort simple d'utilisation et entièrement compatible uci au niveau de la gestion de sa configuration.

La solution proposé consiste à installer stubby et le configurer à titre de second service de résolution DNS:

  1. Écoute les requêtes DNS sur le port 5453 (plutôt que l'habituel port 53)
  2. Effectue les requêtes en mode TLS vers les serveurs DNS de notre choix (ex: quad9.net ou cloudflare-dns.com)

Ensuite il s'agit d'ajuster la configuration de notre résolveur DNS par défait dnsmasq afin de:

  1. Toujours résoudre les adresses de notre réseau locale (192.168.x.y) via dnsmasq
  2. Relayer toutes les autres requêtes reçues par dnsmasq vers stubby

OPTIONNEL: Pour terminer activer DNSSEC

stubby

Par défaut utilise les service DNS de cloudflare-dns.com. La configuration peut cependant être adaptée pour utiliser quad9.net ou autres:

Installer stubby:

root@openwrt:~# opkg install stubby

Configurer stubby afin d'écouter sur le port 5453 de notre réseau local:

uci add_list stubby.global.listen_address='192.168.80.1@5453'

Activer les journaux *.crit et plus (problème avec canal *.err):

uci set stubby.global.log_level='2'

Valider et appliquer les changements

uci changes stubby
uci commit

Redémarrer le service pour que les changements prennent effet:

root@th0ma7-router:~# /etc/init.d/stubby enable
root@th0ma7-router:~# /etc/init.d/stubby restart

Tester la résolution DNS à partir d'un client:

$ dig @192.168.80.1 -p5453 -t A +noall +answer www.google.com
www.google.com.		186	IN	A	172.217.13.132

Références:

dnsmasq

Ajuster dnsmasq afin de:

  1. Résoudre les adresses locales à notre réseau directement
  2. Faire pointer vers unbound pour les requêtes externes
uci set dhcp.@dnsmasq[0].noresolv='1'
uci delete dhcp.@dnsmasq[0].server
uci add_list dhcp.@dnsmasq[0].server='127.0.0.1#5453'

Valider et appliquer les changements:

uci changes dhcp
uci commit dhcp

Redémarrer le service dnsmqsq afin de prendre en charge les chagements:

root@openwrt:~# /etc/init.d/dnsmasq restart
udhcpc: started, v1.30.1
udhcpc: sending discover
udhcpc: no lease, failing
udhcpc: started, v1.30.1
udhcpc: sending discover
udhcpc: no lease, failing

Tester la résolution DNS à partir d'un client:

$ dig @192.168.80.1 -t A +noall +answer www.google.com
www.google.com.		131	IN	A	172.217.13.100

Références:

DNSSEC

Avec la combinaison de stubby+dnsmasq la portion DNSSEC peut être exécutée à l'une ou l'autre de ces 2x couches DNS. J'ai opté pour configurer stubby afin d'effecuter la validation DNSSEC avec dnsmasq servant de proxy afin de retransmettre les données DNSSEC aux clients. Voir excellent guide complet à cet effet:

Pour ce faire il faut tout d'abord remplacer le paquet dnsmasq par sa version complète dnsmasq-full:

root@openwrt:~# cd /tmp
root@openwrt:~# opkg install dnsmasq-full --download-only
root@openwrt:~# opkg remove dnsmasq
root@openwrt:~# opkg install dnsmasq-full --cache .
root@openwrt:~# rm *.ipk

Afin que stubby effectue la validation DNSSEC il est requis d'ajuster l'option dnssec_return_status='1' via:

uci set stubby.global.dnssec_return_status=1
uci commit && reload_config

Une fois la validation DNSSEC activée au niveau de stubby, la portion dnsmasq doit être configurée afin de permettre la transmission des données DNSSEC jusqu'aux clients. Ceci s'effectue en ajustant l'option proxydnssec='1' via:

uci set dhcp.@dnsmasq[0].proxydnssec=1
uci commit && reload_config

Valider que la résolution DNS avec DNSSEC (option +dnssec)fonctionne autant sur le port 5453 de stubby que le port par défaut de dnsmasq:

$ dig @192.168.80.1 -p5453 -t A +noall +answer +dnssec www.google.com
www.google.com.		107	IN	A	172.217.13.164
$ dig @192.168.80.1 -t A +noall +answer +dnssec www.google.com
www.google.com.		102	IN	A	172.217.13.164
Clone this wiki locally