Post

🔮 VPS Islande iceyan.xyz serveur DNS DOT et DOH

🔮 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

OpenSSH

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
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

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/group avec 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

LetsEncrypt.png

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 le reloadcmd sera 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

Article original

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

  1. Taper about:config dans la barre d’adresse
  2. Chercher network.trr.mode et définisser à 2
  3. Chercher network.trr.uri et 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é)

  1. ParamĂštres → RĂ©seau et Internet → AvancĂ© → DNS privĂ©
  2. SĂ©lectionner « Nom d’hĂŽte du fournisseur DNS privé »
  3. Entrer : dns.mondomaine.tld

Vpn Wireguard

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_...

Maintenance

Mises Ă  jour automatiques sur debian

Mises Ă  jour automatiques sur Debian

Cet article est sous licence CC BY 4.0 par l'auteur.