đŽ VPS Islande iceyan.xyz serveur DNS DOT et DOH
VPS vpsg1btm3e
- debian 12
- 1 GB RAM
- 25GB NVMe SSD DISK
- 1TB TRANSFER(tx+rx)
- 1 x vCPU Core
- 1 x IPv4 Address 185.112.146.46
Debian bookworm
Connexion serveur
Lâintialisation du serveur VPS sâest faite en fournissant une une clĂ© publique SSH
Connexion ssh avec la clé
1
ssh -i .ssh/iceyan-vps root@185.112.146.46
Mise Ă jour
1
apt update && apt -y upgrade
Installer sudo
1
apt install sudo
Versions noyau et debian
1
uname -a && cat /etc/debian_version
Linux iceyan.xyz 6.1.0-9-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.27-1 (2023-05-08) x86_64 GNU/Linux
12.5
Adressage : ip -a
1
2
3
4
5
6
7
8
9
10
11
12
13
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
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 52:54:b9:70:92:2e brd ff:ff:ff:ff:ff:ff
altname enp0s3
inet 185.112.146.46/24 brd 185.112.146.255 scope global ens3
valid_lft forever preferred_lft forever
inet6 fe80::5054:b9ff:fe70:922e/64 scope link
valid_lft forever preferred_lft forever
Modifier ou créer /etc/hostname : iceyan.xyz
Ajouter 185.112.146.46 iceyan.xyz au fichier /etc/hosts
Utilisateur
Créer un utilisateur iceyan avec shell par défaut et son mot de passe
1
2
useradd --create-home --user-group iceyan
passwd iceyan
Shell par défaut
1
usermod -s /bin/bash iceyan
Autoriser sudo pour utilisateur
1
echo "iceyan ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
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/iceyan-vps
Envoyer les clés publiques sur le serveur KVM
1
ssh-copy-id -i ~/.ssh/iceyan-vps.pub iceyan@185.112.146.46
sur le serveur KVM
On se connecte
1
ssh iceyan@185.112.146.46
Modifier la configuration serveur SSH
1
sudo nano /etc/ssh/sshd_config
Modifier
1
2
3
Port = 55046
PermitRootLogin no
PasswordAuthentication no
Relancer le serveur
1
sudo systemctl restart sshd
Test connexion
1
ssh -p 55046 -i ~/.ssh/iceyan-vps iceyan@185.112.146.46
Utilitaires et historique
Installer utilitaires
1
sudo apt install rsync curl tmux jq figlet git dnsutils tree -y
Motd
1
sudo rm /etc/motd && sudo nano /etc/motd
1
2
3
4
5
6
7
8
9
_
(_) __ ___ _ _ __ _ _ _ __ __ _ _ ___
| |/ _|/ -_)| || |/ _` || ' \ _ \ \ /| || ||_ /
|_|\__|\___| \_, |\__,_||_||_|(_)/_\_\ \_, |/__|
|__/ |__/
_ ___ ___ _ _ ___ _ _ _ __ _ _ __
/ |( _ )| __| / |/ ||_ ) / || | | / / | | | / /
| |/ _ \|__ \ _ | || | / / _ | ||_ _|/ _ \ _|_ _|/ _ \
|_|\___/|___/(_)|_||_|/___|(_)|_| |_| \___/(_) |_| \___/
Script ssh_rc_bash
ATTENTION!!! Les scripts sur connexion peuvent poser des problĂšmes pour des appels externes autres que ssh
1
2
3
wget https://static.xoyize.xyz/files/ssh_rc_bash
chmod +x ssh_rc_bash # rendre le bash exécutable
./ssh_rc_bash # exécution
Prise en charge historique, modification bashrc et inputrc
POUR tous les utilisateurs ,y compris root et avec touche SHIFT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
echo "
# appel alphabétique commandes
shopt -s histappend
PROMPT_COMMAND='history -a'" | sudo tee -a $HOME/.bashrc
echo "
# appel alphabétique commandes
shopt -s histappend
PROMPT_COMMAND='history -a'" | sudo tee -a /root/.bashrc
echo '
# AVEC la touche SHIFT
"\e[1;2A": history-search-backward
"\e[1;2B": history-search-forward
' | sudo tee -a /etc/inputrc
Redémarrer le terminal la prise en compte
Hostname
Domaine iceyan.xyz
1
hostnamectl
1
2
3
4
5
6
7
8
9
10
11
12
Static hostname: iceyan.xyz
Icon name: computer-vm
Chassis: vm đŽ
Machine ID: 75971165a9bd46a6814eeb1061620d63
Boot ID: 6620df06ff2d4ccd851f310805a20ed2
Virtualization: kvm
Operating System: Debian GNU/Linux 12 (bookworm)
Kernel: Linux 6.1.0-9-amd64
Architecture: x86-64
Hardware Vendor: QEMU
Hardware Model: Standard PC _i440FX + PIIX, 1996_
Firmware Version: 1.14.0-2
Parefeu

UFW, ou pare - feu simple , est une interface pour gĂ©rer les rĂšgles de pare-feu dans Arch Linux, Debian ou Ubuntu. UFW est utilisĂ© via la ligne de commande (bien quâil dispose dâinterfaces graphiques disponibles), et vise Ă rendre la configuration du pare-feu facile (ou simple).
Installer ufw
1
sudo apt install ufw
Les rÚgles par défaut
1
2
sudo ufw default allow outgoing
sudo ufw default deny incoming
Ajout des rÚgles spécifiques
1
2
3
4
5
6
sudo ufw allow 55046/tcp # Port ssh
sudo ufw allow 80/tcp # http
sudo ufw allow 443/tcp # https
sudo ufw allow 4443/tcp # searXNG
sudo ufw allow dns # DNS port 53
sudo ufw allow 853/tcp # DNS over TLS
Désactiver IPV6
1
sudo nano /etc/default/ufw
Changez la ligne qui dit : IPV6=yes en IPV6=no puis redĂ©marrez le service ufw. ExĂ©cuter sudo ufw reload si lâinstance ufw est dĂ©jĂ activĂ©e.
Activation parefeu
1
sudo ufw enable
Valider la commande par touche y au clavier
1
2
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
Status du parefeu : sudo ufw status
1
2
3
4
5
6
7
8
9
10
11
Status: active
To Action From
-- ------ ----
55046/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
DNS ALLOW Anywhere
51820/udp ALLOW Anywhere
54254/udp ALLOW Anywhere
853/tcp ALLOW Anywhere
OVH DNS iceyan.xyz
OVH: Domaine iceyan.xyz , DNSSEC Actif
1
2
3
4
5
6
7
8
9
$TTL 3600
@ IN SOA dns12.ovh.net. tech.ovh.net. (2025120106 86400 3600 3600000 60)
IN NS dns12.ovh.net.
IN NS ns12.ovh.net.
IN A 185.112.146.46
_acme-challenge.doh 60 IN TXT "PUz_zL23--MjNVJwE259rb5pVfnu7rLBJpSbYeWYuwc"
_acme-challenge.dot 60 IN TXT "6VA7Px0zYmwJCF_tH2cRM1rpIxP3gscpjJhrAyfcf38"
doh IN CNAME iceyan.xyz.
dot IN CNAME iceyan.xyz.
Postfix messagerie

On va configurer Postfix afin quâil puisse ĂȘtre utilisĂ© pour envoyer des notifications par e-mail uniquement par les applications locales installĂ©es sur le mĂȘme serveur que Postfix
Installation outils
1
sudo apt install mailutils postfix
Installation postfix, répondre aux questions :
Internet site â OK
iceyan.xyz â OK
Configurer Postfix pour quâil traite les demandes dâenvoi dâe-mails uniquement Ă partir du serveur sur lequel il sâexĂ©cute, câest-Ă -dire Ă partir de localhost.
Postfix doit ĂȘtre configurĂ© pour nâĂ©couter que sur lâ interface loopback , lâinterface rĂ©seau virtuelle que le serveur utilise pour communiquer en interne.
Modifier les lignes suivantes dans le fichier de configutration /etc/postfix/main.cf
1
2
mydestination = $myhostname, localhost.$mydomain, $mydomain
inet_interfaces = loopback-only
Redémarrez Postfix.
1
sudo systemctl restart postfix
Test envoi message
1
echo "Test envoi via postfix smtp" | mail -s "serveur debian iceyan.xyz" vpn@cinay.eu
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.
- Le 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.
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
Commençons par installer et configurer le rĂ©solveur DNS. Il existe plusieurs logiciels pour faire de la rĂ©solution comme BIND 9, Knot Resolver ou encore Unbound. Nous avons choisi dâutiliser Unbound et cette partie documente comment installer et configuer ce rĂ©solveur.
En rĂšgle gĂ©nĂ©ral Unbound est disponible dans les dĂ©pĂŽts des distributions, lâinstaller depuis le gestionnaire de paquet de votre machine.
1
sudo apt install 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-iceyan.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
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
port: 5353
# 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-iceyan.conf
unbound-checkconf: no errors in /etc/unbound/unbound.conf.d/unbound-iceyan.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
Résultat commande
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
; <<>> DiG 9.18.41-1~deb12u1-Debian <<>> @127.0.0.1 -p 5353 A afnic.fr
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40311
;; 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: 4 msec
;; SERVER: 127.0.0.1#5353(127.0.0.1) (UDP)
;; WHEN: Mon Jan 19 11:02:43 GMT 2026
;; MSG SIZE rcvd: 53
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
53. 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
Installer dnsdist
Prérequis
1
sudo apt install gnupg git
Cette section sâattarde sur lâinstallation et la 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.).
Choix A ou B pour installer dnsdist
A - Installation version courante
depuis juin 2023 pour debian bookworm
1
sudo apt install dnsdist
B - Installer la derniĂšre version dnsdist
dnsdist - master branch (development)
CrĂ©ation fichier â/etc/apt/sources.list.d/pdns.listâ
1
deb [signed-by=/etc/apt/keyrings/dnsdist-master-pub.asc] http://repo.powerdns.com/debian bookworm-dnsdist-master main
CrĂ©ation fichier â/etc/apt/preferences.d/dnsdist-masterâ:
1
2
3
Package: dnsdist*
Pin: origin repo.powerdns.com
Pin-Priority: 600
Exécuter la commande suivante
1
2
3
sudo install -d /etc/apt/keyrings; curl https://repo.powerdns.com/CBC8B383-pub.asc | sudo tee /etc/apt/keyrings/dnsdist-master-pub.asc &&
sudo apt-get update &&
sudo apt-get install dnsdist
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
-- le résolveur DoT/DoH est public, on accepte tout le monde en IPv4
setACL({"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("0.0.0.0:53", {})
-- configuration de DoT
addTLSLocal("0.0.0.0:853", "/etc/dnsdist/dns-server.crt", "/etc/dnsdist/dns-server.key", {
minTLSVersion="tls1.2"
})
-- configuration de DoH
addDOHLocal("0.0.0.0:443", "/etc/dnsdist/dns-server.crt", "/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
sudo dnsdist --check-config
# 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:118:
Avec le protocole de création des certificats Acme
Autoriser les droits en Ă©criture Ă lâutilisateur sur le dossier /etc/dnsdist
1
sudo chown $USER -R /etc/dnsdist
Certificats
Acme
Suivre la procĂ©dure Acme.sh - Certificats Letâs Encrypt
Génération des certificats dans le dossier /etc/dndist avec une chaßne préférentielle pour android
1
2
3
4
acme.sh --dns dns_ovh --server letsencrypt \
--issue --keylength ec-384 \
-d 'doh.iceyan.xyz' \
-d 'dot.iceyan.xyz'
Installation certificats dans les dossiers
1
2
3
4
5
acme.sh --install-cert -d doh.iceyan.xyz --ecc \
--preferred-chain 'ISRG Root X1' \
--key-file /etc/dnsdist/dns-server.key \
--fullchain-file /etc/dnsdist/dns-server.crt \
--reloadcmd "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
30 0 * * * "/home/iceyan/.acme.sh"/acme.sh --cron --home "/home/iceyan/.acme.sh" > /dev/null
Configurer la notification par email de Letâs Encrypt lorsquâun certificat est ignorĂ©, renouvelĂ© ou erronĂ© (OPTION)
On utilise la méthode SMTP pour obtenir une notification par email
pour un serveur smtp local postfix
1
2
3
4
5
6
7
8
9
cat >> $HOME/.bashrc << EOF
export SMTP_FROM="iceyan@iceyan.xyz"
export SMTP_TO="vpn@cinay.eu"
export SMTP_HOST="127.0.0.1" # mĂȘme serveur sans authentification
export SMTP_SECURE="none"
export SMTP_BIN="/usr/bin/python3"
export SMTP_TIMEOUT="30"
EOF
source $HOME/.bashrc
Enfin, exĂ©cutez la commande suivante pour activer la notification smtp pour votre Letâs Encrypt lorsquâun certificat est ignorĂ©, renouvelĂ© ou erronĂ©.
1
acme.sh --set-notify --notify-hook smtp
Vous obtiendrez des informations dâerreur ou de succĂšs Ă lâĂ©cran comme suit :
Et voici lâemail de test :
Vérifications
Ports en écoute
Vérifier unbound en écoute sur le port 5353
1
ss -tlnp | grep :5353
LISTEN 0 256 127.0.0.1:5353 0.0.0.0:*
Vérifier des ports en écoute
1
ss -tlnp | grep -E ":(53|443|853|5353)"
1
2
3
4
LISTEN 0 4096 0.0.0.0:443 0.0.0.0:*
LISTEN 0 256 127.0.0.1:5353 0.0.0.0:*
LISTEN 0 4096 0.0.0.0:853 0.0.0.0:*
LISTEN 0 4096 0.0.0.0:53 0.0.0.0:*
Consultation des logs
1
2
3
4
5
6
7
8
# Logs DNSdist en temps réel
journalctl -u dnsdist -f
# Logs BIND9 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 "secret"
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 7 0 0.0 1.2 0.7 0
All 0.0 7 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
kdig +tls @dot.iceyan.xyz yannir.xyz A
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
;; TLS session (TLS1.3)-(ECDHE-X25519)-(ECDSA-SECP384R1-SHA384)-(AES-256-GCM)
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 11048
;; 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. 3600 IN A 144.91.89.149
;; Received 55 B
;; Time 2026-01-19 13:56:36 CET
;; From 185.112.146.46@853(TLS) in 391.3 ms
Test DNS-over-HTTPS
1
kdig +https @doh.iceyan.xyz yannir.xyz A
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
;; TLS session (TLS1.3)-(ECDHE-SECP256R1)-(ECDSA-SECP384R1-SHA384)-(AES-256-GCM)
;; HTTP session (HTTP/2-POST)-(doh.iceyan.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
Test DNS DOT DOH depuis un client (homer)
Pour sâassurer que le rĂ©solveur fonctionne de maniĂšre nominal, on va utiliser Homer.
Homer est un outil dĂ©veloppĂ© par lâAfnic, qui permet de tester et dĂ©bugger un rĂ©solveur DoT/DoH en ligne de commande.
Homer est un logiciel libre et le code est disponible sur la forge logicielle Framagit.
Lâoutil nĂ©cessite python3, et certains modules associĂ©s :
1
2
sudo apt-get install python3 python3-pycurl python3-dnspython python3-openssl python3-netaddr # debian
yay -S python-pycurl python-dnspython python-pyopenssl python-netaddr # archlinux
Il ne reste plus quâĂ rĂ©cupĂ©rer Homer
1
2
git clone https://framagit.org/bortzmeyer/homer
cd homer
et Ă le lancer
1
./remoh.py https://doh.iceyan.xyz afnic.fr
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
id 0
opcode QUERY
rcode NOERROR
flags QR RD RA AD
edns 0
payload 1232
option ECS 0.0.0.0/0 scope/0
;QUESTION
afnic.fr. IN AAAA
;ANSWER
afnic.fr. 600 IN AAAA 2001:41d0:404:200::2df6
;AUTHORITY
;ADDITIONAL
Total elapsed time: 0.60 seconds
1
./remoh.py --dot dot.iceyan.xyz framagit.org
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
id 17695
opcode QUERY
rcode NOERROR
flags QR RD RA AD
edns 0
payload 1232
option ECS 0.0.0.0/0 scope/0
;QUESTION
framagit.org. IN AAAA
;ANSWER
framagit.org. 3600 IN AAAA 2a01:4f8:231:4c99::75
;AUTHORITY
;ADDITIONAL
Total elapsed time: 0.73 seconds
Homer peut aussi ĂȘtre utilisĂ© pour tester la bonne configuration du rĂ©solveur :
1
2
3
4
5
$ ./remoh.py --check --dot dot.iceyan.xyz framasoft.org
OK
$ ./remoh.py --check https://doh.iceyan.xyz chatons.org
OK
Dans le cas oĂč votre rĂ©solveur est mal configurĂ©, Homer sâarrĂȘte est affiche lâerreur rencontrĂ©e. Par exemple pour un certificat non configurĂ© :
1
2
3
$ ./remoh.py --dot 198.51.100.19 framasoft.org
198.51.100.19: Certificate error: "198.51.100.19 is not in the certificate
Could not connect to "198.51.100.19"
On peut demander à Homer de ne pas vérifier le certificat
avec lâoption -k | --insecure :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ ./remoh.py --insecure --dot 198.51.100.19 framasoft.org
id 35430
opcode QUERY
rcode NOERROR
flags QR RD RA
edns 0
payload 4096
option ECS ::/0 scope/0
;QUESTION
framasoft.org. IN AAAA
;ANSWER
framasoft.org. 3600 IN AAAA 2a01:4f8:141:3421::212
;AUTHORITY
;ADDITIONAL
Total elapsed time: 0.04 seconds (41.83 ms/request)
DnsDist - 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 :
dns.mondomaine.tld
Vpn Wireguard
![]()
WireGuard est un serveur VPN Ă code source ouvert, gratuit, moderne et rapide, dotĂ© dâun chiffrement de pointe. Il est plus rapide et plus simple que lâIPSec et lâOpenVPN
- Les procédures pour une installation complÚte : VPN wireguard
BorgBackup
Sauvegarde serveur sur une boĂźte de stockage
Le fichier /root/.borg/borg-backup.sh
1
2
3
4
5
6
export BORG_RSH='ssh -i /root/.ssh/id_borg_ed25519'
export BORG_PASSPHRASE=$(cat /root/.borg/iceyan_xyz.passphrase)
BACKUP_DATE=`date +%Y-%m-%d-%Hh%M`
BORG_REPOSITORY=ssh://u326239@u326239.your-storagebox.de:23/./backup/borg/iceyan.xyz
borg create -v --progress --stats --exclude-from /root/.borg/exclusions-borg.txt ${BORG_REPOSITORY}::${BACKUP_DATE} /
borg prune -v --list --stats --keep-daily=7 --keep-weekly=4 --keep-monthly=6 $BORG_REPOSITORY
Ajouter ce qui suit Ă /root/.borg/borg-backup.sh pour envoi message via ntfy + email
1
2
3
4
5
6
7
8
9
# Message
curl \
-H "X-Email: ntfy@cinay.eu" \
-H "Title: VPS Islande iceyan.xyz" \
-H "Authorization: Bearer tk_jkrtwpoaqvgz2ic4nalzcfd447l5fzr" \
-H prio:low \
-H tags:information_source \
-d "Fin sauvegarde borgbackup `date +%d/%m/%Y-%Hh%M`" \
https://noti.rnmkcy.eu/yan_infos
Modifier la valeur Bearer tk_...













