OVH Debian (vps-5351f610) Nebula + Serveur DNS (dot doh) xoyaz.xyz
vps-5351f610.vps.ovh.net
4 vCPU Cores
8 Go RAM
75 Go SSD NVME
1 Backup auto
Location: Gravelines
IP: 51.254.133.45
IPv6: 2001:41d0:305:2100::f148
OS: Debian 13
Nom d’utilisateur : debian
OVH VPS-1
Première connexion
Après avoir récupére le mot de passe sur sur le site OVH
Se connecter utilisateur debian via SSH
1
ssh debian@51.254.133.45
La procédure nous demande la création d’un nouveau mot de passe puis reconnexion utilisateur “debian”
Modifier le mot de passe root
1
2
3
sudo -s
passwd
exit
Autoriser la connexion root en créant le fichier /etc/ssh/sshd_config.d/10-root.conf
1
echo "PermitRootLogin yes" > /etc/ssh/sshd_config.d/10-root.conf
Redémarrer le service sshd
1
systemctl restart sshd
Se déconnecter de la session SSH en cours
Se connecter en root via SSH
1
ssh root@51.254.133.45
Mise à jour debian
Mise à jour
1
apt update && apt upgrade -y
Renommer utilisateur debian en userb
Renommer l’utilisateur debian en userb
1
2
3
4
# Renommer l’utilisateur
usermod -l userb debian
# Renommer le dossier /home
usermod -d /home/userb -m userb
Modifier les accès sudo en remplaçant debian par userb
1
sed -i 's/debian/userb/g' /etc/sudoers.d/90-cloud-init-users
Modifier le paramétrage SSH pour interdire la connexion root
1
2
3
4
# Supprimer le PermitRootLogin yes
rm /etc/ssh/sshd_config.d/10-root.conf
# Redémarrer le serveur sshd:
systemctl restart sshd
Date et heure + Synchro
Reconfigurer locales
Activer uniquement fr_FR.UTF-8
1
dpkg-reconfigure locales
Default fr_FR.UTF-8 et en_US.UTF-8
1
2
3
4
Generating locales (this might take a while)...
en_US.UTF-8... done
fr_FR.UTF-8... done
Generation complete.
Activer le fuseau Europe/Paris
1
timedatectl set-timezone Europe/Paris
Horloge système synchronisée : timedatectl
1
2
3
4
5
6
7
Local time: Wed 2026-01-14 20:32:00 CET
Universal time: Wed 2026-01-14 19:32:00 UTC
RTC time: Wed 2026-01-14 19:32:00
Time zone: Europe/Paris (CET, +0100)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
Motd
Motd
1
rm /etc/motd && nano /etc/motd
1
2
3
4
5
6
7
8
9
10
11
12
___ __ __ _ _ __ __ ___ ___ _
/ _ \\ \ / /| || | \ \ / /| _ \/ __| ___ / |
| (_) |\ V / | __ | \ V / | _/\__ \|___|| |
\___/ \_/ |_||_| \_/ |_| |___/ |_|
___ _ _ _ ____
| \ ___ | |__ (_) __ _ _ _ / ||__ /
| |) |/ -_)| '_ \| |/ _` || ' \ | | |_ \
|___/ \___||_.__/|_|\__,_||_||_| |_||___/
___ _ ___ ___ _ _ _ ____ ____ _ _ ___
| __|/ | |_ )| __|| | | / ||__ /|__ / | | | | __|
|__ \| | _ / / |__ \|_ _|_ | | |_ \ |_ \ _|_ _||__ \
|___/|_|(_)/___||___/ |_|(_)|_||___/|___/(_) |_| |___/
Outils
Quelques outils
1
apt install rsync curl tmux jq figlet git tree -y
Hostname
Hostname xoyaz.xyz
1
hostnamectl set-hostname xoyaz.xyz
Vérifier: hostnamectl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Static hostname: xoyaz.xyz
Icon name: computer-vm
Chassis: vm 🖴
Machine ID: 576c980dfde948a79e8997eefa039c78
Boot ID: 56b1562d718543e0a78bc9c5be88bae7
Product UUID: 576c980d-fde9-48a7-9e89-97eefa039c78
AF_VSOCK CID: 1
Virtualization: kvm
Operating System: Debian GNU/Linux 13 (trixie)
Kernel: Linux 6.12.48+deb13-cloud-amd64
Architecture: x86-64
Hardware Vendor: OpenStack Foundation
Hardware Model: OpenStack Nova
Hardware Serial: 576c980d-fde9-48a7-9e89-97eefa039c78
Firmware Version: 1.16.3-debian-1.16.3-2~bpo12+1
Firmware Date: Tue 2014-04-01
Firmware Age: 11y 9month 2w 1d
Déconnexion ‘root’
Se déconnecter de la session ssh root
OpenSSH, clé et script

connexion avec clé
sur l'ordinateur de bureau
Générer une paire de clé curve25519-sha256 (ECDH avec Curve25519 et SHA2) pour une liaison SSH avec le serveur.
1
ssh-keygen -t ed25519 -o -a 100 -f ~/.ssh/vps-5351f610
Envoyer les clés publiques sur le serveur KVM
1
ssh-copy-id -i ~/.ssh/vps-5351f610.pub userb@51.254.133.45
sur le serveur KVM On se connecte via SSH
1
ssh userb@51.254.133.45
Créer la configuration utilisateur SSH dans le VPS
1
sudo nano /etc/ssh/sshd_config.d/10-userb.conf
Ajouter le contenu suivant
1
2
3
#PasswordAuthentication yes
Port = 55045
PasswordAuthentication no
Relancer le serveur
1
sudo systemctl restart sshd
Test connexion
1
ssh -p 55045 -i ~/.ssh/vps-5351f610 userb@51.254.133.45
Historique de la ligne de commande
Ajoutez la recherche d’historique de la ligne de commande au terminal Se connecter en utilisateur debian Tapez un début de commande précédent, puis utilisez shift + up (flèche haut) pour rechercher l’historique filtré avec le début de la commande.
1
2
3
# Global, tout utilisateur
echo '"\e[1;2A": history-search-backward' | sudo tee -a /etc/inputrc
echo '"\e[1;2B": history-search-forward' | sudo tee -a /etc/inputrc
Parefeu
Alternative: Configurer le pare-feu sous Linux avec Iptables
Installation UFW sur Debian / Ubuntu
1
sudo apt install ufw
Les règles
1
2
3
4
5
# Pour autoriser un port personnalisé et correspondant à votre accès SSH
sudo ufw allow 55045/tcp # port SSH
sudo ufw allow https # port 443
# Activer le parefeu
sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
Vérifier : sudo ufw status
1
2
3
4
5
6
7
8
Status: active
To Action From
-- ------ ----
55045/tcp ALLOW Anywhere
443 ALLOW Anywhere
55045/tcp (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
OVH DNS xoyaz.xyz
OVH: Domaine xoyaz.xyz , DNSSEC Actif
1
2
3
4
5
6
7
8
$TTL 3600
@ IN SOA dns106.ovh.net. tech.ovh.net. (2026011800 86400 3600 3600000 300)
IN NS ns106.ovh.net.
IN NS dns106.ovh.net.
IN A 51.254.133.45
IN AAAA 2001:41d0:305:2100::f148
* IN A 51.254.133.45
* IN AAAA 2001:41d0:305:2100::f148
Borgbackup
Timer, service et bash
1
2
3
/etc/systemd/system/borgbackup-xoyaz.timer
/etc/systemd/system/borgbackup-xoyaz.service
/root/.borg/borgbackup-xoyaz.sh
Nebula lighthouse
Réseau
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether fa:16:3e:d4:bd:98 brd ff:ff:ff:ff:ff:ff
altname enp0s3
altname enxfa163ed4bd98
inet 51.254.133.45/32 metric 100 scope global dynamic ens3
valid_lft 71910sec preferred_lft 71910sec
inet6 2001:41d0:305:2100::f148/128 scope global
valid_lft forever preferred_lft forever
inet6 fe80::f816:3eff:fed4:bd98/64 scope link proto kernel_ll
valid_lft forever preferred_lft forever
4: nebula1: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1300 qdisc fq_codel state UNKNOWN group default qlen 500
link/none
inet 10.239.100.254/24 brd 10.239.100.255 scope global nebula1
valid_lft forever preferred_lft forever
Résolveur (Unbound)
Pour l’installation complète Unbound qui ajoute la mise à jour des serveurs “racine”, le blocage des publicités et des DMP (Data Management Platforms), voir lien Résolveur DNS Unbound
Maintenant que Unbound est installé, il ne reste plus qu’à le configurer avant de démarrer le service.
Il s’agit du résolveur DNS, celui ci n’est accessible que depuis la machine locale via le port 5353.
Créer le fichier de configuration /etc/unbound/unbound.conf.d/unbound-xoyaz.conf avec le contenu suivant :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
server:
# ne rien enregistrer dans les journaux hormis les erreurs
verbosity: 0
# n'écouter que sur l'interface locale en IPv4
# unbound nécessite d'être relancé si modifié
interface: 127.0.0.1
interface: ::1
port: 5353
# support IPv4
do-ip4: yes
# support IPv6
do-ip6: yes
# support udp
do-udp: yes
# support tcp
do-tcp: yes
# Lancer sous forme de Daemon
do-daemonize: yes
# refuser tout le monde sauf les connexions locales (pas forcément
# nécessaire vu que le serveur n'écoute que sur la boucle locale en IPv4)
access-control: 0.0.0.0/0 refuse
access-control: 127.0.0.1/32 allow
# par défaut, unbound ne log pas les requêtes ni les réponses
# on peut le rappeler au cas où
log-queries: no
log-replies: no
# imposer la QNAME minimisation (RFC 7816)
# Pour mieux protéger la vie privée
qname-minimisation: yes
# même si le serveur faisant autorité ne le veut pas
# après discussion, il est possible que cette option ne soit
# pas recommandée dans le cadre d'un résolveur ouvert
qname-minimisation-strict: yes
Vérifier la validité du fichier de configuration avec la commande suivante :
1
sudo unbound-checkconf /etc/unbound/unbound.conf.d/unbound-xoyaz.conf
unbound-checkconf: no errors in /etc/unbound/unbound.conf.d/unbound-xoyaz.conf
Toutes les règles disponibles sont détaillées dans le manuel man 5 unbound.conf ou dans le manuel en ligne.
Démarrer et activer le résolveur.
1
sudo systemctl enable unbound --now
S’assurer que tout fonctionne bien à l’aide de la commande
dig disponible dans le paquet bind9-dnsutils ou dnsutils. Pour cela il
suffit de spécifier l’adresse de notre résolveur, ici 127.0.0.1 ou ::1 et
d’effectuer une requête DNS. Ici on demande à Unbound de récupérer
l’enregistrement AAAA associé au nom de domaine afnic.fr.
1
dig @127.0.0.1 -p 5353 A afnic.fr # IPV4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
; <<>> DiG 9.20.18-1~deb13u1-Debian <<>> @127.0.0.1 -p 5353 A afnic.fr
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12063
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;afnic.fr. IN A
;; ANSWER SECTION:
afnic.fr. 600 IN A 51.178.83.21
;; Query time: 424 msec
;; SERVER: 127.0.0.1#5353(127.0.0.1) (UDP)
;; WHEN: Tue Jan 27 08:59:22 CET 2026
;; MSG SIZE rcvd: 53
1
dig @127.0.0.1 -p 5353 AAAA afnic.fr # IPV6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
; <<>> DiG 9.20.18-1~deb13u1-Debian <<>> @127.0.0.1 -p 5353 AAAA afnic.fr
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62073
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;afnic.fr. IN AAAA
;; ANSWER SECTION:
afnic.fr. 600 IN AAAA 2001:41d0:404:200::2df6
;; Query time: 8 msec
;; SERVER: 127.0.0.1#5353(127.0.0.1) (UDP)
;; WHEN: Tue Jan 27 09:01:09 CET 2026
;; MSG SIZE rcvd: 65
Une réponse est bien renvoyée. Le résolveur fonctionne.Vérifier que tout est opérationnel en IPv4, et en utilisant UDP et TCP.
1
2
dig +notcp @127.0.0.1 -p 5353 A afnic.fr # connexion UDP en IPv4 au résolveur
dig +tcp @127.0.0.1 -p 5353 A afnic.fr # connexion TCP en IPv4 au résolveur
À ce stade, un résolveur Unbound est configuré en local et écoute sur le port
5353. Il peut donc être utilisé pour résoudre toutes les requêtes en provenance
de la machine.
Frontal DNS (dnsdist)

dnsdist est un répartiteur de charge pour serveurs DNS avec la particularité de gérer DoH et DoT. Le but est donc de l’installer sur la même machine qu’Unbound et de le mettre devant : Unbound n’écoutera que localement et dnsdist, lui, sera ouvert au public
- POWERDNS - dnsdist documentation
- Documentation technique de mon résolveur DoH (bortzmeyer)
- Une zone locale home.arpa signée avec DNSSEC
DNS DoT DoH
DNS over TLS (DoT) et DNS over HTTPS (DoH) sont deux protocoles standardisés par l’IETF dans les RFC 7858 et RFC 8484 respectivement. Ces deux protocoles ont pour but de sécuriser les requêtes DNS entre un client et le résolveur (encapsulation du protocole DNS dans une session TLS pour DoT ou HTTPS pour DoH.)
DNS

Les requêtes DNS sont envoyées en texte brut, ce qui signifie que tout le monde peut les lire. Le DNS sur HTTPS et le DNS sur TLS chiffrent les requêtes et les réponses du DNS pour que la navigation des utilisateurs reste sécurisée et privée. Cependant, les deux approches ont leurs avantages et leurs inconvénients.
DNS sur HTTPS et le DNS sur TLS

Le DNS sur TLS et le DNS sur HTTPS</u> sont deux normes développées pour le chiffrement du trafic DNS en texte brut afin d’empêcher les parties malveillantes, les annonceurs, les FAI et autres de pouvoir interpréter les données. Pour poursuivre l’analogie, ces normes visent à enfermer les cartes postales envoyées par courrier dans une enveloppe, pour que quiconque puisse envoyer une carte postale sans craindre les indiscrétions d’un tiers.
DoH vs DoT
Outre DNS sur HTTPS, il existe un autre protocole qui vise également à chiffrer les requêtes DNS. C’est ce qu’on appelle DNS sur TLS (DoT).
Pour les personnes vivant dans des pays où la censure d’Internet est sévère, il est plus avantageux d’utiliser DoH.
- DoT fonctionne sur le port TCP 853 , qui peut être facilement bloqué par un pare-feu national.
- DoH fonctionne sur le port TCP 443 , qui est le port standard pour les sites Web HTTPS, ce qui rend DoH très difficile à bloquer, car si le port TCP 443 est bloqué, alors presque tous les sites Web HTTPS seront également bloqués.
- DoH permet aux applications Web d’accéder aux informations DNS via les API de navigateur existants, de sorte qu’aucun résolveur de stub n’est nécessaire.
Installer dnsdist
Installation et configuration d’un frontal DoT/DoH qui transmettra les requêtes DNS à un résolveur local écoutant sur le port 5353 de l’interface local 127.0.0.1 (dnsdist se trouve être une très bonne solution pour remplir ce rôle.).
1
sudo apt install dnsdist
Version
1
2
3
4
dnsdist --version
dnsdist 1.9.10 (Lua 5.1.4 [LuaJIT 2.1.1737090214])
Enabled features: AF_XDP cdb dns-over-tls(openssl) dns-over-https(nghttp2) dnscrypt ebpf fstrm ipcipher libedit libsodium lmdb protobuf re2 recvmmsg/sendmmsg snmp systemd
Pour une utilisation dns doh et dot, il faut ouvrir les ports tcp 53, 443 et 853
1
2
3
sudo ufw allow dns
sudo ufw allow https
sudo ufw allow 853/tcp
Status: sudo ufw status
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Status: active
To Action From
-- ------ ----
55045/tcp ALLOW Anywhere
443 ALLOW Anywhere
54254/udp ALLOW Anywhere
DNS ALLOW Anywhere
853/tcp ALLOW Anywhere
55045/tcp (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
54254/udp (v6) ALLOW Anywhere (v6)
DNS (v6) ALLOW Anywhere (v6)
853/tcp (v6) ALLOW Anywhere (v6)
Configurer dnsdist
Créer le fichier de configuration IPV4 /etc/dnsdist/dnsdist.conf pour une utilisation avec les certificats qui seront générés par acme dans le dossier /etc/dnsdist
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
-- le resolveur DoT/DoH est public, on accepte tout le monde en IPv4 et IPv6
setACL({'0.0.0.0/0', '[::]/0'})
-- serveur DNS où transférer les requêtes entrantes
newServer({address="127.0.0.1:5353", name="Unbound (local)"})
-- DNSdist écoute sur port 53 pour DNS classique
setLocal("51.254.133.45:53", {})
-- configuration de DoT
addTLSLocal("51.254.133.45:853", "/etc/dnsdist/dns-server.pem", "/etc/dnsdist/dns-server.key", {
minTLSVersion="tls1.2"
})
addTLSLocal("[2001:41d0:305:2100::f148]:853", "/etc/dnsdist/dns-server.pem", "/etc/dnsdist/dns-server.key", {
minTLSVersion="tls1.2"
})
-- configuration de DoH
addDOHLocal("51.254.133.45:443", "/etc/dnsdist/dns-server.pem", "/etc/dnsdist/dns-server.key", "/dns-query", {
minTLSVersion="tls1.2",
reusePort=true
})
addDOHLocal("[2001:41d0:305:2100::f148]:443", "/etc/dnsdist/dns-server.pem", "/etc/dnsdist/dns-server.key", "/dns-query", {
minTLSVersion="tls1.2",
reusePort=true
})
-- Configuration de sécurité
setMaxTCPClientThreads(20)
setMaxTCPQueriesPerConnection(20)
setMaxTCPConnectionDuration(30)
-- Désactiver le sondage de sécurité via DNS
setSecurityPollSuffix("")
-- Cache pour améliorer les performances
pc = newPacketCache(10000, {
maxTTL=86400,
minTTL=60,
temporaryFailureTTL=60,
staleTTL=60
})
getPool(""):setCache(pc)
print("DNSdist configuration loaded - DoH on port 443, DoT on port 853")
-- Accès console de dnsdist
setKey("secret")
controlSocket("127.0.0.1:5199")
Pour créer le secret: openssl rand -base64 32
L’ensemble des options de configuration est détaillé sur le site de dnsdist.
L’option
setSecurityPollSuffix("")a été ajoutée pour contourner l’erreur suivante :
Error while retrieving the security update for version dnsdist-1.6.1: Unable to get a valid Security Status update
Explication : Le paquet Debian pour dnsdist désactive l’interrogation de sécurité en lui attribuant une chaîne vide dans le fichier de configuration par défaut. Nous devons faire de même pour le fichier dnsdist.conf afin que l’interrogation de sécurité soit désactivée et que le journal systemd de dnsdist reste propre.
Vérifier que le fichier de configuration est valide avec la commande :
1
2
3
4
sudo dnsdist --check-config
DNSdist configuration loaded - DoH on port 443, DoT on port 853
Configuration '/etc/dnsdist/dnsdist.conf' OK!
dnsdist est configuré pour écouter sur l’interface publique de la machine sur les ports 443 (DoH) et 853 (DoT). Toutes les requêtes sont ensuite relayées à un serveur unbound écoutant le port 5353 sur l’interface locale.
Pour l’instant les fichiers dot-server.crt, dot-server.key,
doh-server.crt et doh-server.key n’existent pas. Il est nécessaire de les
générer. Cela peut se faire avec openssl dans le cas de certificats
auto-signés. Il est aussi possible de passer par une autorité de certification,
ceci est le but de la prochaine partie.
Remarque: attention aux droits des fichiers du certificat et de la clé, l’utilisateur ou le groupe
dnsdist(parfois_dnsdist, vérifier le contenu du fichier/etc/groupavec la commande
1
grep dnsdist /etc/group
_dnsdist:x:105:
Avec le protocole de création des certificats Acme
Autoriser les droits en écriture à l’utilisateur sur le dossier /etc/dnsdist
1
2
3
4
5
6
# Vérifier à quel groupe appartient l'utilisateur
# id --> uid=1000(userb) gid=1000(debian)
# ajout utilisateur au groupe _dnsdist
sudo usermod -a -G _dnsdist $USER
# droits _dnsdist, utilisateur appartient au groupe debian
sudo chown $USER:_dnsdist -R /etc/dnsdist
Certificat Let’s Encrypt
Acme.sh Suivre la procédure Acme.sh - Certificats Let’s Encrypt
Installer acme
1
2
3
4
# Git
git clone https://github.com/acmesh-official/acme.sh.git
cd ./acme.sh
./acme.sh --install
Fermer puis réouvrir la session
Génération des certificats
1
2
3
acme.sh --dns dns_ovh --server letsencrypt \
--issue --keylength ec-384 \
-d 'xoyaz.xyz' -d '*.xoyaz.xyz'
Installation certificats dans les dossiers
1
2
3
4
acme.sh --install-cert -d xoyaz.xyz --ecc \
--key-file /etc/dnsdist/dns-server.key \
--fullchain-file /etc/dnsdist/dns-server.pem \
--reloadcmd "sudo chown _dnsdist -R /etc/dnsdist/dns-server.* && sudo systemctl restart dnsdist.service"
Lors de l’exécution
--cron, tout nouveau certificat sera automatiquement installé, et lereloadcmdsera exécuté.
--cron installera automatiquement les certificats sur les informations de renouvellement réussies.
Il semble se baser sur la dernière fois que vous avez exécuté --install-cert, alors assurez-vous que vous exécutez manuellement au moins une fois pour être sûr que cron job fonctionnera comme prévu.
Renouvellement automatique
Le cron job crontab -l
1
21 18 * * * "/home/ouestyan/.acme.sh"/acme.sh --cron --home "/home/ouestyan/.acme.sh" > /dev/null
Ports en écoute
Vérifier unbound en écoute sur le port 5353
1
2
3
4
ss -tlnp | grep :5353
LISTEN 0 256 127.0.0.1:5353 0.0.0.0:*
LISTEN 0 256 [::1]:5353 [::]:*
Vérifier les ports en écoute
1
2
3
4
5
6
7
8
9
10
11
12
13
ss -tlnp | grep -E ":(53|443|853|5353)"
LISTEN 0 4096 0.0.0.0:5355 0.0.0.0:*
LISTEN 0 4096 51.254.133.45:443 0.0.0.0:*
LISTEN 0 4096 51.254.133.45:53 0.0.0.0:*
LISTEN 0 4096 51.254.133.45:853 0.0.0.0:*
LISTEN 0 4096 127.0.0.54:53 0.0.0.0:*
LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:*
LISTEN 0 256 127.0.0.1:5353 0.0.0.0:*
LISTEN 0 256 [::1]:5353 [::]:*
LISTEN 0 4096 [::]:5355 [::]:*
LISTEN 0 4096 [2001:41d0:305:2100::f148]:853 [::]:*
LISTEN 0 4096 [2001:41d0:305:2100::f148]:443 [::]:*
Consultation des logs
1
2
3
4
5
6
7
8
# Logs DNSdist en temps réel
journalctl -u dnsdist -f
# Logs unbound en temps réel
journalctl -u unbound -f
# Logs des erreurs uniquement
journalctl -u dnsdist -u unbound | grep -i error
Statistiques dnsdist
1
2
# Affichage des statistiques
echo "showServers();" | dnsdist -c -k "vGRMy/juaM2Qu8NwXDPoxYPEGtJZgJGk+p3WSBicbJo="
Résultat
1
2
3
4
DNSdist configuration loaded - DoH on port 443, DoT on port 853
# Name Address State Qps Qlim Ord Wt Queries Drops Drate Lat TCP Outstanding Pools
0 Unbound (local) 127.0.0.1:5353 up 0.0 0 1 1 0 0 0.0 - - 0
All 0.0 0 0
Test DNS DOT DOH avec kdig
kdig est un utilitaire en ligne de commande issu de la suite Knot DNS, développé par le registre CZ.NIC. Il se présente comme une alternative moderne au traditionnel dig (issu de BIND9). Son intérêt principal réside dans la prise en charge des protocoles DNS sécurisés (DNSSEC, DoT, DoH) et une sortie en JSON facilitant l’automatisation.
| Info | dig | kdig |
|---|---|---|
| Présentation | Outil historique issu de BIND9, répandu et fiable. | Outil moderne fourni par Knot DNS (CZ.NIC). |
| Fonctionnalités | Résolution classique (A, AAAA, MX, etc.), support DNSSEC basique. | Support avancé DNSSEC, sortie JSON (+json), ergonomie moderne. |
| Protocoles supportés | DNS (UDP/TCP). | DNS + DNSSEC + DoT (DNS over TLS) + DoH (DNS over HTTPS). |
| Installation | Souvent installé par défaut avec BIND utils. | Nécessite le paquet knot-dnsutils (Debian/Ubuntu) ou knot (Arch/Fedora). |
| Usage conseillé | Dépannage DNS quotidien, documentation universelle. | Tests avancés de DNSSEC et DNS chiffrés, automatisation (JSON). |
Installation
1
sudo apt install knot-dnsutils
Exemples d’utilisation
1
2
3
4
5
6
7
8
# Requête classique
kdig A example.com
# Résolution AAAA avec sortie JSON
kdig +json example.com AAAA
#Tester un résolveur DoH (DNS over HTTPS)
kdig +https @dns.quad9.net#443 example.com A
# Tester un résolveur DoT (DNS over TLS)
kdig +tls @9.9.9.9 example.com AAAA
Test DNS-over-TLS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# IPV4
kdig +tls @dot.xoyaz.xyz yannir.xyz A
;; TLS session (TLS1.3)-(ECDHE-X25519)-(ECDSA-SECP384R1-SHA384)-(AES-256-GCM)
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 30972
;; Flags: qr rd ra ad; QUERY: 1; ANSWER: 1; AUTHORITY: 0; ADDITIONAL: 1
;; EDNS PSEUDOSECTION:
;; Version: 0; flags: ; UDP size: 1232 B; ext-rcode: NOERROR
;; QUESTION SECTION:
;; yannir.xyz. IN A
;; ANSWER SECTION:
yannir.xyz. 2911 IN A 144.91.89.149
;; Received 55 B
;; Time 2026-01-27 11:23:38 CET
;; From 2001:41d0:305:2100::f148@853(TLS) in 46.1 ms
# IPV6
kdig +tls @dot.xoyaz.xyz yannir.xyz AAAA
;; TLS session (TLS1.3)-(ECDHE-X25519)-(ECDSA-SECP384R1-SHA384)-(AES-256-GCM)
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 56231
;; Flags: qr rd ra ad; QUERY: 1; ANSWER: 1; AUTHORITY: 0; ADDITIONAL: 1
;; EDNS PSEUDOSECTION:
;; Version: 0; flags: ; UDP size: 1232 B; ext-rcode: NOERROR
;; QUESTION SECTION:
;; yannir.xyz. IN AAAA
;; ANSWER SECTION:
yannir.xyz. 2833 IN AAAA 2a02:c207:2278:6143::1
;; Received 67 B
;; Time 2026-01-27 11:25:32 CET
;; From 2001:41d0:305:2100::f148@853(TLS) in 42.8 ms
Test DNS-over-HTTPS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# IPV4
kdig +https @doh.xoyaz.xyz yannir.xyz A
;; TLS session (TLS1.3)-(ECDHE-SECP256R1)-(ECDSA-SECP384R1-SHA384)-(AES-256-GCM)
;; HTTP session (HTTP/2-POST)-(doh.xoyaz.xyz/dns-query)-(status: 200)
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 0
;; Flags: qr rd ra ad; QUERY: 1; ANSWER: 1; AUTHORITY: 0; ADDITIONAL: 1
;; EDNS PSEUDOSECTION:
;; Version: 0; flags: ; UDP size: 1232 B; ext-rcode: NOERROR
;; QUESTION SECTION:
;; yannir.xyz. IN A
;; ANSWER SECTION:
yannir.xyz. 3592 IN A 144.91.89.149
;; Received 55 B
;; Time 2026-01-19 13:56:45 CET
;; From 185.112.146.46@443(HTTPS) in 218.9 ms
# IPV6
kdig +https @doh.xoyaz.xyz yannir.xyz AAAA
;; TLS session (TLS1.3)-(ECDHE-X25519)-(ECDSA-SECP384R1-SHA384)-(AES-256-GCM)
;; HTTP session (HTTP/2-POST)-([2001:41d0:305:2100::f148]/dns-query)-(status: 200)
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 0
;; Flags: qr rd ra ad; QUERY: 1; ANSWER: 1; AUTHORITY: 0; ADDITIONAL: 1
;; EDNS PSEUDOSECTION:
;; Version: 0; flags: ; UDP size: 1232 B; ext-rcode: NOERROR
;; QUESTION SECTION:
;; yannir.xyz. IN AAAA
;; ANSWER SECTION:
yannir.xyz. 2741 IN AAAA 2a02:c207:2278:6143::1
;; Received 67 B
;; Time 2026-01-27 11:27:04 CET
;; From 2001:41d0:305:2100::f148@443(HTTPS) in 47.1 ms
Configuration des clients
Firefox
- Taper
about:configdans la barre d’adresse - Chercher
network.trr.modeet définisser à2 - Chercher
network.trr.uriet définisser àhttps://doh.iceyan.xyz/dns-query
Chrome
1
2
# Lancement avec DoH
google-chrome --dns-over-https-server=https://dns.mondomaine.tld/dns-query
Android (DNS privé)
- Paramètres → Réseau et Internet → Avancé → DNS privé
- Sélectionner « Nom d’hôte du fournisseur DNS privé »
- Entrer :
doh.xoyaz.xyz








