%
image/svg+xml

OpenWRT + Unbound : utiliser le protocole DoT

Article publié, le et modifié le
5 minutes de lecture

Cet article contient 963 mots.
Source brute de l'article :
Commit version : d52797e

Description

Le propos de cet article est d’ajouter unbound pour permettre les requêtes DNS sur le protocole DoT , tout en modifiant légèrement dnsmasq, installé par défaut.

Le but est de :

  • chiffrer le trafic DNS afin d’améliorer la confidentialité de celui-ci.
  • prévenir d’une fuite DNS et les détournements de votre trafic DNS
  • bypasser les restrictions régionales ou celles du FAI .

Installation

Installons les paquets nécessaires : unbound unbound-control luci-app-unbound

# opkg update
# opkg install unbound unbound-control luci-app-unbound

Il peut être utile d’installer ces autres paquets liés à unbound :

  • unbound-checkconf : qui permet de s’assurer de la conformité de la configuration
  • unbound-control-setup : qui permet d’installer/créer les certificats nécessaires pour le contrôle de l’outil
  • unbound-host : pour tester…

Configuration

dnsmasq

Éditons le fichier de configuration du serveur dnsmasq /etc/config/dhcp, pour s’assurer des deux options suivantes :

option noresolv '1'
list server '127.0.0.1#531'
  • la première oblige à ne pas utiliser le fichier /etc/resolv.conf
  • la seconde oblige à rediriger les requêtes DNS localement vers le port choisi, ici 531.

Bien-sûr, ces options peuvent être modifiées directement par LuCI :

  • onglet ‘Resolv and Hosts Files’ > option Ignore resolv file, pour la première
  • onglet ‘General Settings’ > option DNS forwardings, pour la seconde.

Pensez à redémarrer le service dnsmasq !

unbound

La chose la plus simple est d’activer Unbound, et de cocher l’option Manual Conf pour modifier manuellement le fichier de configuration, au-travers de LuCI. Ajoutez vos réseaux dans l’option Trigger Networks, à-minima lan.

  • Fichier de configuration : /var/lib/unbound/unbound.conf

Les changements minimum à faire correspondent aux variables suivantes :

server:
(…)
    port: 531
    do-ip4: yes
    do-ip6: yes
    do-tcp: yes
    hide-identity: yes
    hide-version: yes
    qname-minimisation: yes
    prefetch: yes
    rrset-roundrobin: yes
    minimal-responses: yes
    tls-cert-bundle: "/etc/ssl/certs/ca-certificates.crt"
(…)

À-propos du numéro de port choisi, ici 531 : non, on ne choisit pas 5353 qui est réservé normalement au service mdns ; bien-sûr, vous pouvez le modifier, faites-le en conséquence dans la configuration de dnsmasq, mais veillez à le choisir dans le contexte des numéros de ports privilégiés, à savoir en deçà des 1024 premiers…


⇒ Pensez absolument à ajouter/modifier des variables access-control pour n’autoriser que :

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

Puis à déclarer l’adressage IPv(4|6) de votre LAN, voire de votre Wifi…


Il est nécessaire ensuite de modifier la section forward-zone :

forward-zone:
    name: "."
    forward-tls-upstream: yes

Puis d’ajouter toutes les adresses IP de serveurs concernés par DoT ; bien-sûr les deux protocoles IPv4 et IPv6 sont fonctionnels.

    forward-addr: 9.9.9.9@853       # Quad9
    forward-addr: 1.1.1.1@853       # Cloudflare
    forward-addr: 149.112.112.112@853       # Quad9 secondaire
    forward-addr: 1.0.0.1@853       # Cloudflare secondaire
    forward-addr: 2620:fe::fe@853       # Quad9 / IPv6
    forward-addr: 2606:4700:4700::1111@853  # Cloudflare / IPv6
    forward-addr: 2606:4700:4700::1001@853  # Cloudflare secondaire / IPv6

Cet exemple ci-dessus montre l’usage des “grands” de ce monde… Voici pour le propos des alternatives intéressantes :

    # FDN DoT
    ## https://www.fdn.fr/ouverture-des-services-dot-doh/
    forward-addr: 80.67.169.12@853
    forward-addr: 80.67.169.40@853
    forward-addr: 2001:910:800::12@853
    forward-addr: 2001:910:800::40@853
    # see: https://dnsprivacy.org/public_resolvers/
    # adguard.com: family protection
    ## https://adguard.com/en/blog/adguard-dns-announcement.html
    forward-addr: 94.140.14.15@853
    forward-addr: 94.140.15.16@853
    forward-addr: 2a10:50c0::bad1:ff@853
    forward-addr: 2a10:50c0::bad2:ff@853
    # applied-privacy.net
    forward-addr: 146.255.56.98@853
    forward-addr: 2a02:1b8:10:234::2@853
    # cleanbrowsing.org: family filter
    forward-addr: 185.228.168.168@853
    forward-addr: 185.228.169.168@853
    forward-addr: 2a0d:2a00:1::@853
    forward-addr: 2a0d:2a00:2::@853
    # controld.com
    ## https://controld.com/free-dns?
    forward-addr: 76.76.2.4@853
    forward-addr: 76.76.10.4@853
    forward-addr: 2606:1a40::4@853
    forward-addr: 2606:1a40:1::4@853
    # cz.nic
    forward-addr: 193.17.47.1@853
    forward-addr: 185.43.135.1@853
    forward-addr: 2001:148f:ffff::1@853
    forward-addr: 2001:148f:fffe::1@853
    # dnsforfamily.com
    forward-addr: 78.47.64.161@853
    forward-addr: 94.130.180.225@853
    forward-addr: 2a01:4f8:1c0c:40db::1@853
    forward-addr: 2a01:4f8:1c17:4df8::1@853
    # dot.sb
    forward-addr: 185.222.222.222@853
    forward-addr: 45.11.45.11@853
    forward-addr: 2a09::@853
    forward-addr: 2a11::@853
    # he.net
    forward-addr: 74.82.42.42@853
    forward-addr: 2001:470:20::2@853
    # libredns.gr
    forward-addr: 116.202.176.26@853
    forward-addr: 2a01:4f8:1c0c:8274::1@853
    # switch.ch
    forward-addr: 130.59.31.248@853
    forward-addr: 130.59.31.251@853
    forward-addr: 2001:620:0:ff::2@853
    forward-addr: 2001:620:0:ff::3@853

Voilà pour la configuration de base, qui doit/devrait permettre d’utiliser unbound conjointement avec dnsmasq.

Pensez impérativement à redémarrer le service unbound !

Vérifications

Si vous avez eu l’idée d’installer l’outil unbound-checkconf, c’est le moment de l’exécuter pour vérifier que les modifications/écritures faites dans le fichier de configuration sont correctes. Si tout va bien, l’outil vous retournera ce message d’information :

# unbound-checkconf
unbound-checkconf: no errors in /var/lib/unbound/unbound.conf

S’il y a des erreurs, il vous dira où !


Si vous avez eu l’idée d’installer l’outil unbound-host, il sera possible de tester la connexion qui devrait être sécurisée, de telle manière, par exemple :

# unbound-host -vf /var/lib/unbound/root.key com.
com. has no address (secure)
com. has no IPv6 address (secure)
com. has no mail handler record (secure)

Faites de même pour les adresses www.ripe.net, www.afnic.fr, dnssec.cz. La mention (secure) assure de la connexion sécurisée.

Contrôler

Un petit laïus à-propos du fait de contrôler le fonctionnement d’unbound. Il est nécessaire d’initialiser le paramètrage :

# unbound-control-setup
setup in directory /var/lib/unbound/
generating unbound_server.key
Generating RSA private key, 3072 bit long modulus
...............................................................................................................++
............................................................++
e is 65537 (0x10001)
generating unbound_control.key
Generating RSA private key, 3072 bit long modulus
........................................................................++
..................++
e is 65537 (0x10001)
create unbound_server.pem (self signed certificate)
create unbound_control.pem (signed client certificate)
Signature ok
subject=/CN=unbound-control
Getting CA Private Key
Setup success. Certificates created. Enable in unbound.conf file to use

Puis de modifier le fichier de configuration d’unbound, pour ajouter/décommenter la section remote-control, tel que :

remote-control:
    control-enable: yes
    control-interface: 127.0.0.1
    control-interface: ::1
    control-port: 8953
    control-use-cert: no
    server-key-file: "/var/lib/unbound/unbound_server.key"
    server-cert-file: "/var/lib/unbound/unbound_server.pem"
    control-key-file: "/var/lib/unbound/unbound_control.key"
    control-cert-file: "/var/lib/unbound/unbound_control.pem"

Après avoir redémarré le service, il ne reste plus qu’à tester avec l’outil unbound-control, tel que pour l’exemple :

# unbound-control -s ::1 status
version: 1.17.0
verbosity: 1
threads: 4
modules: 2 [ validator iterator ]
uptime: 3482 seconds
options: reuseport control
unbound (pid 32307) is running...

Il est ainsi possible de connaître la valeur de toute option par l’usage de l’option get_option suivie du nom de l’option. De même, il reste possible de faire un dump du cache pour analyse du flux, par le biais de l’option dump_cache redirigé vers un nom de fichier.


Voilà, c’est terminé.

Documentation


Enjoy-ID! Enjoy-IT!