Outils pour utilisateurs

Outils du site


logiciels:dnscrypt

Dnscrypt

Préambule

Dnscrypt permet de chiffrer et d'authentifier les requêtes DNS entre votre ordinateur et le serveur DNS.
Il sera couplé avec Pdnsd afin d'avoir un cache persistent.
Au cas ou le serveur DNS tombe, nous verrons comment mettre en place un second serveur.
L'installation suivante est réalisée sur une Arch Linux.

Installation

Rien de bien compliqué, taper dans un terminal :

# pacman -S dnscrypt-proxy pdnsd

DNSCrypt est lancé en root, mieux vaut créer un utilisateur pour le lancer :

# useradd -r -d /var/dnscrypt -m -s /sbin/nologin dnscrypt

Il suffira de modifier le service en utilisant –user=dnscrypt

Configuration des proxy

Le fichier /usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv contient la liste des résolveurs utilisables en première colonne, on peut lister avec :

$ cat /usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv | cut -d"," -f1

Il ne se met pas à jour automatiquement, pour avoir une liste à jour voir https://github.com/jedisct1/dnscrypt-proxy/blob/master/dnscrypt-resolvers.csv

Resolv.conf

Il faut modifier le fichier /etc/resolv.conf, il doit contenir cela :

# vim /etc/resolv.conf
nameserver 127.0.0.1
options edns0

Certains programmes peuvent modifier ce fichier, afin de les en empêcher :

# chattr +i /etc/resolv.conf

dnscrypt-proxy@.service

Commençons par créer le service suivant dans /etc/systemd/system/ :

# vim /etc/systemd/system/dnscrypt-proxy@.service

Insérer ces lignes :

[Unit]
Description=DNSCrypt client proxy
Documentation=man:dnscrypt-proxy(8)
Requires=dnscrypt-proxy@%i.socket

[Service]
Type=notify
NonBlocking=true
ExecStart=/usr/bin/dnscrypt-proxy --user=dnscrypt --resolver-name=%i
Restart=always

Ce service permettra de lancer un dnscrypt-proxy dont le nom sera spécifié derrière l'@. 8-O

Premier proxy

Mettons en place le premier proxy en écoute sur 127.0.0.1 et le port 40. J'ai choisi fvz-anyone, alias OpenNic.
Copier /lib/systemd/system/dnscrypt-proxy.socket sur /etc/systemd/system/dnscrypt-proxy@fvz-anyone.socket.

# cp /lib/systemd/system/dnscrypt-proxy.socket /etc/systemd/system/dnscrypt-proxy@fvz-anyone.socket

On met à jour le nouveau socket :

# systemctl enable dnscrypt-proxy@fvz-anyone.socket
# systemctl daemon-reload

Par défaut il est en écoute sur le port 53, pour qu'il écoute sur le port 40 il faut le modifier :

# systemctl edit dnscrypt-proxy@fvz-anyone.socket

Et insérer ces lignes :

[Socket]
ListenStream=
ListenDatagram=
ListenStream=127.0.0.1:40
ListenDatagram=127.0.0.1:40

Deuxième proxy

Cette fois j'ai choisi fvz-anytwo, il devra écouter sur le port 41.

# cp /lib/systemd/system/dnscrypt-proxy.socket /etc/systemd/system/dnscrypt-proxy@fvz-anytwo.socket
# systemctl enable dnscrypt-proxy@fvz-anytwo.socket
# systemctl daemon-reload
# systemctl edit dnscrypt-proxy@fvz-anytwo.socket

Et on y colle ces lignes :

[Socket]
ListenStream=
ListenDatagram=
ListenStream=127.0.0.1:41
ListenDatagram=127.0.0.1:41

On pourrait en ajouter autant qu'on veut du moment que les ports d'écoute soient différent les uns des autres.

Activer les proxy

# systemctl start dnscrypt-proxy@fvz-anyone.socket dnscrypt-proxy@fvz-anytwo.socket

Pdnsd

Modifier le fichier /etc/pdnsd.conf pour qu'il contienne ceci :

# vim /etc/pdnsd.conf
global {
    perm_cache = 16384;
    cache_dir = "/var/cache/pdnsd";
    run_as = "pdnsd";
    server_ip = 127.0.0.1;
    status_ctl = on;
    query_method = udp_tcp;
    min_ttl = 8h;
    max_ttl = 1w;
    timeout = 10;
    neg_domain_pol = on;
    udpbufsize = 1024;
    neg_rrs_pol=on;
    par_queries=1;
}

server {
    label = "fvz-anyone";
    ip = 127.0.0.1;
    port = 40;
    timeout = 2;
    proxy_only = on;
    purge_cache = off;
}

server {
    label = "fvz-anytwo";
    ip = 127.0.0.1;
    port = 41;
    timeout = 2;
    proxy_only = on;
    purge_cache = off;
}


source {
    owner = localhost;
    file = "/etc/hosts";
}

On active Pdnsd au démarrage et on le lance :

# systemctl enable pdnsd
# systemctl start pdnsd

Vérification des services

Vérifions si les proxys fonctionnent :

drill www.google.com 127.0.0.1 -p 40
;; ->>HEADER<<- opcode: QUERY, rcode: NXDOMAIN, id: 9340
;; flags: qr rd ra ; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 
;; QUESTION SECTION:
;; 127.0.0.1.   IN      A

;; ANSWER SECTION:

;; AUTHORITY SECTION:
.       3600    IN      SOA     ns0.opennic.glue. hostmaster.opennic.glue. 2017011806 1800 900 604800 3600

;; ADDITIONAL SECTION:

;; Query time: 102 msec
;; EDNS: version 0; flags: ; udp: 1252
;; SERVER: 127.0.0.1
;; WHEN: Wed Jan 18 08:53:38 2017
;; MSG SIZE  rcvd: 100

Et pdnsd :

drill www5.yahoo.com
;; ->>HEADER<<- opcode: QUERY, rcode: NXDOMAIN, id: 10351
;; flags: qr rd ra ; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 
;; QUESTION SECTION:
;; www5.yahoo.com.      IN      A

;; ANSWER SECTION:

;; AUTHORITY SECTION:
yahoo.com.      28797   IN      SOA     ns1.yahoo.com. hostmaster.yahoo-inc.com. 2017011806 3600 300 1814400 600

;; ADDITIONAL SECTION:

;; Query time: 145 msec
;; SERVER: 127.0.0.1
;; WHEN: Wed Jan 18 09:07:06 2017
;; MSG SIZE  rcvd: 93

Lançons cette requête une deuxième fois, le temps de réponse doit être proche de zéro.

drill www5.yahoo.com
;; ->>HEADER<<- opcode: QUERY, rcode: NXDOMAIN, id: 10351
;; flags: qr rd ra ; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 
;; QUESTION SECTION:
;; www5.yahoo.com.      IN      A

;; ANSWER SECTION:

;; AUTHORITY SECTION:
yahoo.com.      28797   IN      SOA     ns1.yahoo.com. hostmaster.yahoo-inc.com. 2017011806 3600 300 1814400 600

;; ADDITIONAL SECTION:

;; Query time: 0 msec
;; SERVER: 127.0.0.1
;; WHEN: Wed Jan 18 09:07:06 2017
;; MSG SIZE  rcvd: 93
logiciels/dnscrypt.txt · Dernière modification: 2018/10/25 18:19 (modification externe)