--- categories: ['OpenWRT','Service'] date: 2023-02-19T15:37:43+01:00 description: "Ajouter unbound pour faire des requêtes DNS chiffrées par le protocole DoT à OpenWRT." draft: false include_toc: true show_comments: false tags: ['OpenWRT','unbound','DNS','DNSSEC','DoT'] title: "OpenWRT + Unbound : utiliser le protocole DoT " translationKey: 'openwrt-unbound-dot' --- ## Description Le propos de cet article est d'ajouter unbound pour permettre les requêtes DNS sur le protocole {{< abbr DoT "DNS-over-TLS" >}}, 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 {{< abbr FAI "Fournisseur d'Accès Internet" >}}. ## Installation Installons les paquets nécessaires : **unbound unbound-control luci-app-unbound** ```ash # 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, pour s'assurer des deux options suivantes : ```cfg 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 : ```cfg 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 : ```cfg 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` : ```cfg 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. ```cfg 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 : ```cfg # 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 : ```ash # 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 : ```ash # 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 : ```ash # 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 : ```cfg 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 : ```ash # 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 - Et sinon, OpenWRT peut aussi agir en tant que proxy DoH ; n'hésitez pas à lire : {{< inside "sys/openwrt/dns-doh-proxy" >}} --- ***Enjoy-ID!
Enjoy-IT!*** ---