Ayant fait depuis peu l’acquisition d’un Ubiquiti Edge Router X, je souhaite anonymiser au maximum mes connexions sortantes depuis mon réseau local. Les requêtes DNS circulant en clair sur le port 53, j’opte pour la solution DoT écoutant sur un port dédié (853) plutôt que d’encapsuler mes requêtes DNS dans du HTTPS (DoH – DNS over HTTPS). Les requêtes DNS de mon routeur seront donc chiffrés !
Backup
Avant toute modifications, on sauvegarde la configuration actuelle !
La configuration est stockée dans le répertoire /config. On peut sauvegarder ce répertoire via l’interface web, mais également en CLI vers un serveur réseau distant (SCP, FTP, TFTP ..).
Unbound
Pour la résolution DNS, on n’utilise plus dnsmasq mais unbound. Attention, dnsmasq fait également office de serveur DHCP. On va donc le laisser, mais simplement lui retirer la fonction de serveur DNS.
Installation
Pour l’installer, il est nécessaire d’installer les repository Debian ajouter nos propres paquets sur l’EdgeRouter X
$ show version Version: v1.10.7
Avec cette version-là (firmware pas à jour), je doit utiliser les paquets de Debian 7 (Wheezy). Pour la V2.0, ce sont les paquets Debian 9.
$ configure
$ set system package repository wheezy components 'main contrib non-free' $ set system package repository wheezy distribution wheezy $ set system package repository wheezy url http://archive.debian.org/debian
On commit, et on sauvegarde
$ commit ; save
On met ensuite à jour la liste des paquets disponible
$ apt-get update
Installation d’unbound
$ apt-get install unbound wget
Désactivation de dnsmasq
Unbound est maintenant installé, mais non-fonctionnel car son port d’écoute est déja pris par le service DNS de dnsmasq qui est lui encore actif.
On lui indique son propre serveur DNS
$ configure
$ set system name-server 127.0.0.1
Si ça n’a pas déja été configuré, on indique l’adresse du serveur DNS distribuée dans les baux DHCP.
$ set service dhcp-server shared-network-name lan subnet MY_LAN/24 dns-server IP_EDGE_ROUTER
On désactive le service DNS de dnsmasq
$ set service dhcp-server use-dnsmasq disable$ commit ; save
$ exit
Configuration
Je me suis basé sur la configuration d’ici.
$ vi /etc/unbound/unbound.conf server: auto-trust-anchor-file: "/var/lib/unbound/root.key" verbosity: 1 interface: 0.0.0.0 interface: ::0 port: 53 do-ip4: yes do-ip6: yes do-udp: yes do-tcp: yes access-control: 192.168.0.0/16 allow access-control: 127.0.0.0/8 allow access-control: 10.0.0.0/8 allow root-hints: "/var/lib/unbound/root.hints" hide-identity: yes hide-version: yes harden-glue: yes harden-dnssec-stripped: yes cache-min-ttl: 3600 cache-max-ttl: 86400 prefetch: yes rrset-roundrobin: yes ssl-upstream: yes use-caps-for-id: yes private-address: 192.168.0.0/16 private-address: 172.16.0.0/12 private-address: 10.0.0.0/8 logfile: "/var/lib/unbound/unbound.log" verbosity: 0 val-log-level: 3 forward-zone: name: "." forward-addr: 9.9.9.9@853
Quelques valeurs importantes :
- L’emplacement du fichier de clé (auto-trust-anchor-file)
- L’emplacement du fichier contenant les serveurs racines DNS, les « premiers » serveurs (root-hints)
- Le port d’écoute (53)
- La gestion du cache du serveur (cache-min-ttl et cache-max-ttl)
- L’emplacement des logs (/var/lib/unbound/unbound.log). La verbosité 0 n’affichera que les erreurs
- Le forward-addr concerne le serveur DNS qui reçevras les requêtes, les requêtes qui n’auront pas été servies par mon serveur unbound
Je vais donc utiliser Quad9 en résolveur DNS sur le port 853, qui est le port du DoT ! Quad9 utilise l’IP 9.9.9.9.
Quad9 est un résolveur DNS public, géré par une organisation à but non-lucratif. En plus d’être respectueux de la vie privée de ses utilisateurs, il se classe parmi les top 10 en résolveurs DNS publiques.
Source de l’image : https://www.dnsperf.com/#!dns-resolvers
Serveurs racine DNS
Pour récupérer la liste :
$ wget ftp://FTP.INTERNIC.NET/domain/named.cache -O /var/lib/unbound/root.hints
Démarrage
A ce stade, unbound est prêt à démarrer ! 🙂
$ service unbound start
Le DoT est fonctionnel. Une écoute sur le port 853 nous le confirmeras.
$ tcpdump -i eth0 port 853
Il n’y a maintenant plus rien qui circule sur le port 53 !
EDIT : suite à des soucis rencontrés avec le root.key lors de chaque reboot du routeur (résolution DNS qui ne se fait plus), j’ai ajouté un petit script qui s’exécute à chaque démarrage pour corriger le problème.
Sources
J’ai repris et fait un mixe de deux documentations que j’ai trouvé à ce sujet :
https://www.chameth.com/2017/12/17/dns-over-tls-on-edgerouter-lite/
https://wiki.obsd4a.net/network:service:unbound-dnssec