l’Almanet doLys Gnu/Linux – Open Source – Entreprises › Forums › L’almanet doLys Open Source › Astuce : un petit script pour alterner entre vos deux stacks DNS-DoT et DNS-DoH
- This topic is empty.
-
AuteurArticles
-
avril 12, 2025 à 5:17 pm #12841
Si, comme moi, vous souhaitez disposer de plusieurs configurations DNS sécurisées et souveraines tout en limitant la censure, voici un outil pratique pour basculer facilement entre les méthodes DoT et DoH.
Rappel : DoT vs DoH
DNS over TLS (DoT) : Utilise le chiffrement TLS sur un port dédié (853). Plus facile à identifier sur le réseau mais offre une bonne sécurité avec validation DNSSEC.
DNS over HTTPS (DoH) : Masque les requêtes DNS dans le trafic HTTPS normal (port 443). Idéal pour contourner les blocages DNS et la censure, car quasi indiscernable du trafic web habituel.
Le script en ligne de commande
Créez le script dans votre répertoire bin :
sudo nano ~/bin/switch-dns
Contenu du script :
#!/bin/bash set -euo pipefail USER_HOME="$(getent passwd "$SUDO_USER" | cut -d: -f6)" : "${USER_HOME:=$HOME}" # Fallback si SUDO_USER non défini DNS_PIHOLE_IP="127.0.0.1" DOT_DIR="$USER_HOME/docker/dns-dot" DOH_DIR="$USER_HOME/docker/dns-doh" if [[ $# -eq 0 ]]; then if docker ps --format '{{.Names}}' | grep -q pihole; then if docker inspect -f '{{.HostConfig.NetworkMode}}' pihole 2>/dev/null | grep -q "dns-doh"; then echo "Stack active : DNSCrypt-Proxy (DoH)" else echo "Stack active : Unbound (DoT)" fi else echo "Aucune stack DNS actuellement active" fi exit 0 fi if [[ "$1" != "dns-dot" && "$1" != "dns-doh" ]]; then echo "Usage: switch-dns [dns-dot|dns-doh]" exit 1 fi sudo -v if [[ "$1" == "dns-doh" ]]; then echo "Arrêt de dns-dot..." cd "$DOT_DIR" || { echo "Dossier introuvable: $DOT_DIR"; exit 1; } docker-compose down echo "Démarrage de dns-doh..." cd "$DOH_DIR" || { echo "Dossier introuvable: $DOH_DIR"; exit 1; } docker-compose up -d else echo "Arrêt de dns-doh..." cd "$DOH_DIR" || { echo "Dossier introuvable: $DOH_DIR"; exit 1; } docker-compose down echo "Démarrage de dns-dot..." cd "$DOT_DIR" || { echo "Dossier introuvable: $DOT_DIR"; exit 1; } docker-compose up -d fi echo "Redirection DNS locale → Pi-hole" echo "nameserver $DNS_PIHOLE_IP" | sudo tee /etc/resolv.conf > /dev/null echo "Stack '$1' activée."
Rendez le script exécutable :
chmod +x ~/bin/switch-dns
Interface graphique (optionnel)
Pour plus de confort, nous pouvons créer une interface graphique avec yad :
1. Script pour la demande de mot de passe :
sudo nano ~/bin/yad-askpass.sh
#!/bin/bash yad --entry --title="Authentification requise" \ --text="Veuillez entrer votre mot de passe pour continuer :" \ --hide-text --center
2. Script pour l’interface graphique :
sudo nano ~/bin/dns-switcher-gui.sh
#!/bin/bash export SUDO_ASKPASS="$HOME/bin/yad-askpass.sh" SWITCH_SCRIPT="$HOME/bin/switch-dns" # Vérifier que le script existe if [ ! -x "$SWITCH_SCRIPT" ]; then yad --error --title="DNS Switcher" --text="Script de basculement introuvable à : $SWITCH_SCRIPT" exit 1 fi # Affichage du menu avec liste à puces, sans ligne d'en-tête CHOICE=$(yad --width=550 --height=200 --center --title="DNS Switcher" \ --text="Configuration DNS\n\nSélectionnez la méthode à utiliser:" \ --list --radiolist --no-headers \ --column="" --column="Type" --column="Description" \ TRUE "dns-dot" "Unbound (DoT) - Sécurité maximale, DNSSEC" \ FALSE "dns-doh" "DNSCrypt-Proxy (DoH) - Anti-censure") # Vérifier si l'utilisateur a annulé [ $? -ne 0 ] && exit 0 # Extraire le choix sélectionné CHOICE_VALUE=$(echo "$CHOICE" | cut -d'|' -f2) # Exécuter avec le choix RESULT=$(sudo -A "$SWITCH_SCRIPT" "$CHOICE_VALUE" 2>&1) if [ $? -eq 0 ]; then yad --info --title="DNS Switcher" --text="DNS configuré avec succès : $CHOICE_VALUE" else yad --error --title="DNS Switcher" --text="Erreur lors du basculement :\n$RESULT" fi
3. Rendez les scripts exécutables :
chmod +x ~/bin/yad-askpass.sh chmod +x ~/bin/dns-switcher-gui.sh
4. Créez un raccourci dans le menu d’applications :
mkdir -p ~/.local/share/applications nano ~/.local/share/applications/dns-switcher.desktop
[Desktop Entry] Version=1.0 Type=Application Name=DNS Switcher Comment=Basculer entre configurations DNS (DoH/DoT) Exec=/home/VOTRE_UTILISATEUR/bin/dns-switcher-gui.sh Icon=network-server Terminal=false Categories=Network;System; Keywords=DNS;network;privacy;security;
Utilisation
En ligne de commande :
# Pour activer DNS over TLS (Unbound) switch-dns dns-dot # Pour activer DNS over HTTPS (DNSCrypt-Proxy) switch-dns dns-doh # Pour vérifier la configuration active switch-dns
Avec l’interface graphique :
Lancez « DNS Switcher » depuis votre menu d’applications et sélectionnez la configuration souhaitée.Bonus : script de fallback DNS
Pour éviter de perdre la connectivité en cas de panne DNS locale, ajoutez ce script à votre crontab :
nano ~/bin/dns-fallback-check.sh
#!/bin/bash # Fichier de log LOGFILE="$HOME/dns-check.log" # Configuration DNS LOCAL_DNS="127.0.0.1" # DNS fallbacks hors 14-Eyes et discrets FALLBACK_DNS1="89.233.43.71" # Mullvad DNS (Suède) FALLBACK_DNS2="116.202.176.26" # LibreDNS (Allemagne) # Test du DNS local if ! dig +time=3 +tries=1 debian.org @$LOCAL_DNS > /dev/null 2>&1; then echo "[dns-fallback] $(date): DNS local indisponible, fallback activé" >> "$LOGFILE" echo -e "nameserver $FALLBACK_DNS1\nnameserver $FALLBACK_DNS2" | sudo tee /etc/resolv.conf > /dev/null # Notification optionnelle (si notify-send est installé) if command -v notify-send > /dev/null; then notify-send "DNS Fallback" "Serveurs DNS alternatifs activés" --icon=network-server fi else # Vérifier si on est en mode fallback et si le DNS local est revenu en ligne if ! grep -q "$LOCAL_DNS" /etc/resolv.conf; then echo "[dns-fallback] $(date): DNS local restauré" >> "$LOGFILE" echo -e "nameserver $LOCAL_DNS" | sudo tee /etc/resolv.conf > /dev/null # Notification optionnelle if command -v notify-send > /dev/null; then notify-send "DNS restauré" "Service DNS local rétabli" --icon=network-server fi fi fi
Ajoutez à votre crontab (crontab -e) :
*/5 * * * * ~/bin/dns-fallback-check.sh
Ce système complet vous donne un contrôle total sur vos résolutions DNS, tout en assurant une haute disponibilité et une protection contre la censure. Discret et efficace, comme tout bon outil Linux 😉
Un jeune site que j'aime bien, la ferrari du T-shirt ...bio en plus : GoudronBlanc
-
AuteurArticles
- Vous devez être connecté pour répondre à ce sujet.