Astuce : un petit script pour alterner entre vos deux stacks DNS-DoT et DNS-DoH

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.
Affichage de 1 message (sur 1 au total)
  • Auteur
    Articles
  • #12841
    nam1962nam1962
    Keymaster

      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

    Affichage de 1 message (sur 1 au total)
    • Vous devez être connecté pour répondre à ce sujet.