Par les temps qui courent, il devient de plus en plus important de chiffrer ses communications. Dans cet article, je vais vous montrer comment activer les protocoles DoT et DoH dans un serveur ISC-Bind
Présentation des protocoles DoT et DoH
Le DNS over TLS (DoT) est un protocole de sécurité pour le chiffrement et l'encapsulation des requêtes et des réponses DNS via le protocole TLS ; normalisé dans la RFC 7858.
Le DNS over HTTPS (DoH) est un protocole permettant d’effectuer une résolution DNS à distance via le protocole HTTPS, normalisé dans la RFC 8484.
Ces deux protocoles ont le même but, chiffrer les requêtes DNS.
Ils servent entre autres à se protéger des violations de la neutralité du réseau imposées par les États ou les entreprises à des fins de censure, ou bien décidées par les FAI pour des raisons commerciales.
Cependant, le DoT, utilise un port dédié, le 853, contrairement au DoH qui se fonde sur le protocole HTTPS, rendant ainsi plus difficile le blocage du trafic DoH.
Aujourd'hui, beaucoup d'applications, privilégie le protocole DoH.
Néanmoins, dans certains cas, il est impossible de configurer un serveur DoH "Custom". C'est le cas, par exemple, d'Android, ou Google choisi (délibérément ?), de limiter le choix du DoH à Cloudflare et à son DNS (comme l'on peut le voir dans les sources du projet)..
C'est pour cela qu'il est préférable d'activer les deux protocoles sur son serveur DNS
Configuration
L'intégration du protocole DoT nécessite la version ⩾ 9.17.7 de Bind et pour le DoH ⩾ 9.17.10.
Pour activer ces deux protocoles, nous allons éditer le fichier named.conf
# vi /etc/named.conf
Section « tls » :
Dans la partie local-tls
se trouvera notre certificat TLS ainsi que notre clef privée.
tls local-tls {
key-file "/etc/letsencrypt/live/dns2.famillewallon.com/privkey.pem";
cert-file "/etc/letsencrypt/live/dns2.famillewallon.com/fullchain.pem";
dhparam-file "/etc/ssl/dhparam.pem";
ciphers "HIGH:!kRSA:!aNULL:!eNULL:!RC4:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!SHA1:!SHA256:!SHA384";
prefer-server-ciphers yes;
};
Pour générer le dhparam:
# openssl dhparam -out /etc/ssl/dhparam.pem 4096
Section « http » :
La section http local-http-server va contenir, la path URL pour les requêtes DoH (/dns-query
).
http local-http-server {
endpoints { "/dns-query"; };
};
Section « options » :
Ici nous allons indiquer à notre serveur Bind les ports d'écoute DoT et DoH.
options {
listen-on port 53 { any; };
listen-on port 443 tls local-tls http local-http-server { any; };
listen-on port 853 tls local-tls { any; };
[...]
}
[...]
Pour le port 443, la clef tls
local-tls définit le certificat et la clef privée que nous avons renseignée précédemment. Suivi, de la clef http
local-http-server qui va indiquer à notre serveur que ce port va résoudre des requêtes HTTPS.
Paramétrage des forwarders
Par défaut, BIND résout les requêtes en interrogeant de manière récursive un serveur DNS faisant autorité à partir des serveurs racine. Vous pouvez également configurer BIND pour qu'il transmette les requêtes à d'autres serveurs DNS, tels que ceux de OpenNic, Stéphane Borzmayer, ou encore FDN via l'option forwarders.
Section « tls » :
Cette section va permettre de communiquer avec les forwarder en DoT sur le port 853.
Elle doit être placée au début de votre fichier named.conf
.
# Serveurs DNS TLS forwarders
tls bortzmeyer-tls { remote-hostname "dot.bortzmeyer.fr"; };
tls ns0-fdn-tls { remote-hostname "ns0.fdn.fr"; };
tls ns1-fdn-tls { remote-hostname "ns1.fdn.fr"; };
La section « forwarders » :
options {
[...]
forwarders {
193.70.85.11 port 853 tls bortzmeyer-tls;
80.67.169.12 port 853 tls ns0-fdn-tls;
80.67.169.40 port 853 tls ns1-fdn-tls;
194.0.5.3;
};
[...]
}
[...]
Dans cet exemple, j'indique l'adresse IP du serveur (ex: 193.70.85.11
), le port TLS (853
) ainsi que sa configuration bortzmeyer-tls
configuré précédemment.
Test de la configuration avec l'outil Dig
Via le protocole TLS
$ dig +tls +tls-hostname=mydns.famillewallon.com @192.168.14.4 afnic.fr
; <<>> DiG 9.18.36 <<>> +tls +tls-hostname=mydns.famillewallon.com @192.168.14.4 afnic.fr
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42170
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: ee1d74276140eb8101000000682d46017af3c1d34f14d4e6 (good)
;; QUESTION SECTION:
;afnic.fr. IN A
;; ANSWER SECTION:
afnic.fr. 600 IN A 51.178.83.21
;; Query time: 170 msec
;; SERVER: 192.168.14.4#853(192.168.14.4) (TLS)
;; WHEN: Wed May 21 05:18:25 CEST 2025
;; MSG SIZE rcvd: 81
Via le protocole DoH
❯ dig @mydns.famillewallon.com +https=/dns-query afnic.fr
; <<>> DiG 9.18.36 <<>> @mydns.famillewallon.com +https=/dns-query afnic.fr
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61835
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: b27452fadcf2eb3701000000682d478977703e0654ea15dc (good)
;; QUESTION SECTION:
;afnic.fr. IN A
;; ANSWER SECTION:
afnic.fr. 208 IN A 51.178.83.21
;; Query time: 1 msec
;; SERVER: 192.168.14.4#443(mydns.famillewallon.com) (HTTPS)
;; WHEN: Wed May 21 05:24:57 CEST 2025
;; MSG SIZE rcvd: 81