[tuto] [version 2] Installer DNScrypt sur son réseau local

Un tuto relativement concis pour installer le résolveur de dns dnscrypt pour un usage sur son réseau local.

Prérequis: Debian 9. Pour les autres linux, il faudra simplement vérifier si dnscrypt est dans les paquets de votre distribution.

Edit du 17 mars 2018: le proxy utilisé dans ce tuto a été abandonné, il existe désormais une version en go à cette page. Pour ma part je n'utilise plus dnscrypt que j'ai trouvé de moins en moins fiable, sur fond de rumeur d'abandon du projet. À la place je vous recommande plutôt Unbound.

Ce tuto est une mise à jour d'un précédent papier. Pour l'intérêt d'utiliser dnscrypt, ce sera . # Ce tutoriel s'inspire d'un commentaire de Frank Denis laissé à la publication du précédent tuto. Merci à lui.

Au nombre des apports/changement:
- J'ai abandonné dnsmasq comme cache dns, dnscrypt faisant le travail lui-même
- J'ajoute la possibilité de bloquer les adresses connues pour être vilaines (espionnage, publicité...).

Il s'inscrit dans l'engouement soulevé par la sortie de quad9 qui présente l'intérêt de chiffrer ses requêtes DNS par TLS. C'est très bon, et c'est l'avenir. Cependant je trouve qu'on a encore peu de recule sur ce service: la promesse de ne pas stocker les ip ne tient qu'à la condition qu'on y croit; et surtout si quad9 filtre les résultats pour ne pas répondre aux requêtes de site néfaste, je n'aime pas l'idée que ce soit quad9 tout seul qui décide de ce qui est bon ou pas. Pour l'instant je reste donc chez dnscrypt qui a l'avantage d'être décentralisé.

 

Installation du soft

C'est une très bonne nouvelle, dnscrypt est désormais dans les dépôts sous strech, c'est bien plus propre que de l'installer depuis les sources, surtout pour les mises à jour...

apt install dnscrypt-proxy
apt install dnscrypt-proxy-plugins

 

Blocklist

On va récupérer un script qui écrit le fichier dnscrypt-blacklist-domains.txt. Ce fichier sert à dnscrypt pour bloquer les requêtes indésirables (comme pourrait le faire pihole):

apt install git
cd /etc/dnscrypt-proxy/
git clone https://github.com/jedisct1/dnscrypt-proxy.git

On écrit le fichier /etc/dnscrypt-proxy/dnscrypt-blacklist-domains.txt:

cd /etc/dnscrypt-proxy/dnscrypt-proxy/contrib
python generate-domains-blacklist.py > list.txt.tmp && mv list.txt.tmp /etc/dnscrypt-proxy/dnscrypt-blacklist-domains.txt

On reproduit cette action chaque jour avec un script et une tâche cron:

nano /etc/dnscrypt-proxy/cron-blacklist.sh
#!/bin/bash
cd /etc/dnscrypt-proxy/dnscrypt-proxy/contrib
python generate-domains-blacklist.py > list.txt.tmp && mv list.txt.tmp /etc/dnscrypt-proxy/dnscrypt-blacklist-domains.txt
systemctl restart dnscrypt-proxy.service
chmod a+x /etc/dnscrypt-proxy/cron-blacklist.sh
crontab -e 
@daily bash /etc/dnscrypt-proxy/cron-blacklist.sh

 

Configuration des services de dnscrypt

Le socket
# ATTENTION l'adresse 0.0.0.0 est à réserver pour un usage derrière un pare-feu (typiquement un réseau local)

nano /lib/systemd/system/dnscrypt-proxy.socket
[Unit]
Description=dnscrypt-proxy listening socket
Documentation=man:dnscrypt-proxy(8)
Wants=dnscrypt-proxy-resolvconf.service

[Socket]
ListenStream=0.0.0.0:53
ListenDatagram=0.0.0.0:53

[Install]
WantedBy=sockets.target

 

Le service

nano /etc/dnscrypt-proxy/dnscrypt-proxy.conf
# A more comprehensive example config can be found in
# /usr/share/doc/dnscrypt-proxy/examples/dnscrypt-proxy.conf

ResolverName d0wn-random-ns2
Daemonize no

# LocalAddress only applies to users of the init script. systemd users must
# change the dnscrypt-proxy.socket file.
LocalAddress 0.0.0.0:53

LocalCache on
EphemeralKeys on
LogLevel 6
BlackList domains:"/etc/dnscrypt-proxy/dnscrypt-blacklist-domains.txt"

 

Relance de dnscrypt avec la nouvelle configuration

systemctl daemon-reload
systemctl restart dnscrypt-proxy.socket
systemctl restart dnscrypt-proxy.service

 

Les tests pour voir si ça [juste marche]™

systemctl status dnscrypt-proxy.socket
systemctl status dnscrypt-proxy.service

 

Activation de dnscrypt au démarrage de la machine

systemctl enable dnscrypt-proxy.socket
systemctl enable dnscrypt-proxy.service

 

Bonus:

Dnscrypt propose avec la directive "Forward domains" de spécifier un autre résolveur que lui-même pour des adresses spécifiques. Cela peut être utiles quand on a un service local qui n'est pas déclaré dans un register. Par exemple chez moi j'ai deux fichiers de configuration apache pour ma vm cops, un protégé par un mot de passe, un autre avec une fausse adresse internet sans mot de passe.

Pour activer cette fonction, il faut ajouter une nouvelle ligne au fichier de conf:

nano /etc/dnscrypt-proxy/dnscrypt-proxy.conf
Forward domains:"cops.local" to:"192.168.1.25"

# Dans ce cas dnscrypt enverra la requête "cops.local" au résolveur situé à l'adresse 192.168.1.25. J'y ai installé dnsmasq parce que je le connais bien, mais n'importe lequel fera le job.

 

C'est tout. Je vous laisse vous reporter au précédent tuto sur dnscrypt pour le rendre disponible aux autres machines de votre réseau (freebox).

Bonne resolution dns à vous!

3 commentaires

Manasian

Bonjour, j'ai bien suivi ton tuto, ça a l'air de bien marcher (merci !) mais je me retrouve avec deux petits problèmes :

- Quand j'ouvre un nouvel onglet le about:newtab de firefox ne s'affiche pas ("Firefox ne peut trouver le fichier à l’adresse about:newtab.")

- J'ai un message d'erreur quand je fais /usr/bin/env python /etc/dnscrypt-proxy/contrib/generate-domains-blacklist.py > /etc/dnscrypt-proxy/contrib/dnscrypt-blacklist-domains.txt le voici :

raise Exception("[{}] could not be loaded: {}\n".format(url, err))
Exception: [file:domains-whitelist.txt] could not be loaded: <urlopen error [Errno 2] No such file or directory: 'domains-whitelist.txt'>

Merci encore.

propositionjoe

Salut,
Content que ça te plaises, c'est fait pour ;)
- Pour la première erreur: Je ne sais pas d'où ça peut venir... Un erreur de cache de firefox? Ça le fait toujours après un rédémarrage de ta machine?
- Pour la seconde erreur: Il y avait des choses qui n'allait pas dans le tuto, j'ai corrigé. Mets à jour les confs, ça devrait règler le problème.
N'hésite pas à me tenir au courant, et merci pour ton retour.
À+

Manasian

Alors pour mes deux soucis avec ton tuto :

- Je n'ai plus le souci avec Firefox en redémarrant mon pc le lendemain du problème. Donc RAS de ce côté.

- Pour la mise à jour des config, ça s'est bien placé, tes commandes fonctionnent bien cette fois. Bref, tout s'est résolu, merci !

Ah et sinon, tes commandes cd ne sont pas bonnes, il y a un dnscrypt-proxy en trop (cd /etc/dnscrypt-proxy/dnscrypt-proxy/contrib au lieu de cd /etc/dnscrypt-proxy/contrib).

A plus !

Fil RSS des commentaires de cet article