Comme dit en intro, ce petit soft fait office de proxy pour envoyer toutes vos requêtes DNS à opendns (ou autre) sous forme cryptée. non pas en ssl, mais en Curve25519.
Ainsi, vos requtes DNS ne seront plus transmises en clair, ce qui permet de protéger un peu plus sa vie privée, et de se prémunir d'attaques de type man-in-the-middle. :)
Ce soft est open-source, et mis à disposition sur GitHub

un article de présentation sur le blog:
http://blog.opendns.com/2011/12/06/dnscrypt-%E2%80%93-critical-fundamental-and-about-time/
et un autre un peu plus détaillé:
http://www.opendns.com/technology/dnscrypt/
Egalement, le HOWTO officiel sur comment l'installer et les différentes options:
https://github.com/opendns/dnscrypt-proxy/blob/master/README.markdown

Commencons par l'installer sur un simple pc sous debian/ubuntu pour voir comment ça marche bien.
Afin de le compiler, on va avoir besoin de outils habituels :

aptitude install build-essential
aptitude install linux-headers-$(uname -r)

maintenant on récupere l'outil et on le compile

cd /opt/
wget https://github.com/downloads/opendns/dnscrypt-proxy/dnscrypt-proxy-0.8.tar.gz
tar xvzf ./dnscrypt-proxy-0.8.tar.gz
cd dnscrypt-proxy-0.8
./configure
make
make install

Lorsque la compilation est lancée, on peut aller se faire une petite pause café :p
sur mon pc perso (quad core @3Ghz), ça a pris 3/4 minutes. lorsque je l'ai installé sur le routeur, mon fidèle nettop zotac mag avec un atom 230, ça a pris 7/8 minutes Une fois la compilation terminée, et le make install envoyé, le binaire se trouve ici: /usr/local/sbin/dnscrypt-proxy

Afin d'avoir toutes les options d'utilisation; un petit

/usr/local/sbin/dnscrypt-proxy --help

vous donnera ceci :

dnscrypt-proxy 0.8
Copyright (C) 2011 OpenDNS, Inc.

Options:

  -a	--local-address=...
  -d	--daemonize
  -e	--edns-payload-size=...
  -h	--help
  -k	--provider-key=...
  -l	--logfile=...
  -n	--max-active-requests=...
  -p	--pidfile=...
  -r	--resolver-address=...
  -t	--tcp-port=...
  -u	--user=...
  -N	--provider-name=...
  -P	--local-port=...
  -V	--version

Afin de le tester de suite, on le lance (en root)

/usr/local/sbin/dnscrypt-proxy --daemonize

et on edite (temporairement) le fichier /etc/resolv.conf pour y mettre ceci

nameserver 127.0.0.1

pour l'arreter:

killall dnscrypt-proxy

Par défaut, dnscrypt écoute sur 127.0.0.1:53, mais on peut changer l'ip et le port. par exemple

/usr/local/sbin/dnscrypt-proxy --daemonize -a 192.168.0.1-P 52

fera écouter le démon sur l'IP 192.168.0.1, sur le port 52

Enfin, on teste une résolution DNS, par exemple

dig free.fr a

on obtient bien le résultat. :)
En écoutant ce qui passe avec tcpdump, on remarque que dnscrypt communique avec les 2 serveurs d'opendns (208.67.222.222 et 208.67.220.220), toujours sur le port 53.
Mais les requetes ne sont plus en clair ;)

A présent, on va l'installer sur un router, avec Bind comme serveur DNS. On va installer dnscrypt de manière à le "poser" en amont de bind.
De cette manière, bind recevra toujours les requêtes venant du réseau local. Mais au lieu de directement discuter en clair, il enverra les requêtes à DNScrypt. (pour rappel, dnscrypt ne fait pas de cache, il se contente d'envoyer les requêtes à opendns. d'ou l'utilité de bind, ou unbound comme cache)

Comme précédemment, on télécharge dnscrypt et on le compile. Ensuite on le configure de manière à écouter en local, sur un port autre que 53. par exemple 52. Afin de faciliter la configuration et le lancement du démon au démarrage du serveur, j'ai écrit un petit script d'init, que vous pouvez télécharger ici On l'installe dans /etc/init.d et on lui donne la permission d'execution

cd /etc/init.d
wget http://blog.crifo.org/public/201112/init-dnscrypt -O dnscrypt
chmod +x dnscrypt

ce script supporte les arguments start, stop, et status.

puis on créée le fichier de configuration /etc/default/dnscrypt, dans lequel on indique

# ip to listen on
DC_IP=127.0.0.1
# port to listen on
DC_PORT=52
# other args
DC_ARGS="--daemonize -l /var/log/dnscrypt.log"

Ce fichier sera chargé ("sourcé") par défaut lors du lancement. On peut ainsi facilement modifier l'ip ou le port sur lequel le démon écoute.
J'ai aussi rajouté l'option -l pour logger dans le fichier /var/log/dnscrypt.log. c'est optionnel. On peut à présent le lancer :

/etc/init.d/dnscrypt start

afin de vérifier son status :

/etc/init.d/dnscrypt status

pour l'arreter:

/etc/init.d/dnscrypt stop

Une fois lancé, on vérifier qu'il écoute bien sur l'ip et le port mentionné :

netstat -punta | grep dnscrypt

tcp    0    0 127.0.0.1:52    0.0.0.0:*         LISTEN      28994/dnscrypt-prox
udp   0    0 127.0.0.1:52    0.0.0.0:*                     28994/dnscrypt-prox

Un petit test pour vérifier que la résolution se fait bien :

dig @127.0.0.1 -p52 free.fr a

Enfin, histoire de le lancer automatiquement au démarrage :

update-rc.d -f dnscrypt defaults

A présent, passons à bind, dans lequel il faut juste modifier la partie "forwarders". on édite le fichier /etc/bind/named.conf.options
on a donc la section

forwarders { 208.67.222.222; 208.67.220.220; };

on la remplace par

forwarders { 127.0.0.1 port 52; };

et on relance bind

/etc/init.d/bind9 restart

Aand voila !
Désormais, toutes les requêtes DNS venant de votre lan et adressées au routeur seront transmises à OpenDNS via DNScrypt :coolfuck: