| | | | | | |

🚀 On automatise le contrôle de la propagation DNS après une migration

Introduction 📢 Quand on migre un site WordPress vers un nouveau VPS, on se retrouve souvent face à une attente frustrante : la propagation DNS. C’est le moment où les serveurs du monde entier mettent à jour l’adresse IP associée à notre domaine. Pour ne plus avoir à faire F5 sur son navigateur, on a décidé de coder un petit outil de surveillance automatique. 🛠️

🔍 Pourquoi surveiller plusieurs sources ?

Pendant une migration, on constate souvent des différences flagrantes :

  • Notre VPS voit déjà la nouvelle adresse (ex: 79.137.xxx.xxx).
  • Google (8.8.8.8) pointe encore sur l’ancien serveur (ex: 137.74.xxx.xxx).
  • Cloudflare (1.1.1.1) peut être entre les deux !

Pourquoi utiliser Cloudflare et Google pour le test ?

On utilise ces deux géants car ils possèdent les serveurs DNS les plus rapides au monde. Si Google voit encore l’ancienne IP (137.74.xxx.xxx) alors que notre VPS affiche déjà la nouvelle (79.137.xxx.xxx), c’est que la propagation mondiale est toujours en cours.

Schéma de surveillance DNS sur serveur VPS

🛠️ Le script « Watchdog » qu’on a mis en place

On a créé un script Bash qui boucle sur tous nos dossiers dans /var/www/html/. Il identifie les noms de domaines et compare les IP en temps réel.

sudo nano /usr/local/bin/check_dns.sh

Voici le code (check_dns.sh) :

#!/bin/bash

# --- CONFIGURATION ---
TOKEN="VOTRE_TOKEN_TELEGRAM"
CHAT_ID="VOTRE_CHAT_ID"
WEB_DIR="/var/www/html"

# --- DETECTION AUTOMATIQUE DE L'IP DU SERVEUR ---
# On récupère l'IP publique réelle du VPS via un service externe fiable
SERVER_IP=$(curl -s https://api.ipify.org)

for dir in $WEB_DIR/*/; do
    domain=$(basename "$dir")
    if [[ ! "$domain" == *"."* ]]; then continue; fi

    # Récupération des IPs actuelles sur le web
    VPS_IP=$(nslookup "$domain" | grep -A 1 "Name:" | grep "Address" | awk '{print $2}' | head -n 1)
    GOOGLE_IP=$(nslookup "$domain" 8.8.8.8 | grep -A 1 "Name:" | grep "Address" | awk '{print $2}' | head -n 1)
    CF_IP=$(nslookup "$domain" 1.1.1.1 | grep -A 1 "Name:" | grep "Address" | awk '{print $2}' | head -n 1)

    STATUS_FILE="${dir}.last_known_ip"

    # LOGIQUE : Succès uniquement si tout pointe vers l'IP réelle du serveur actuel
    if [[ "$VPS_IP" == "$SERVER_IP" && "$GOOGLE_IP" == "$SERVER_IP" && "$CF_IP" == "$SERVER_IP" ]]; then
        if [ -f "$STATUS_FILE" ]; then
            MESSAGE="✅ PROPAGATION TERMINÉE : $domain
            
🚀 Le domaine pointe maintenant vers l'IP de ce serveur : $SERVER_IP"
            curl -s -X POST "https://api.telegram.org/bot$TOKEN/sendMessage" -d "chat_id=$CHAT_ID" -d "text=$MESSAGE"
            rm "$STATUS_FILE"
        fi
    else
        # Si au moins une IP est différente de l'IP du serveur (ancienne IP détectée)
        CURRENT_STATE="${VPS_IP}-${GOOGLE_IP}-${CF_IP}"
        LAST_STATE=$(cat "$STATUS_FILE" 2>/dev/null)

        if [[ "$CURRENT_STATE" != "$LAST_STATE" ]]; then
            # On ignore l'alerte si tout est déjà "propre" mais que le fichier n'existait pas
            if [[ "$VPS_IP" != "$SERVER_IP" || "$GOOGLE_IP" != "$SERVER_IP" || "$CF_IP" != "$SERVER_IP" ]]; then
                MESSAGE="⚠️ PROPAGATION EN COURS : $domain
🏠 VPS (Local) : $VPS_IP
🔍 Google : $GOOGLE_IP
☁️ Cloudflare : $CF_IP
📌 IP Cible (Serveur) : $SERVER_IP"
                
                curl -s -X POST "https://api.telegram.org/bot$TOKEN/sendMessage" -d "chat_id=$CHAT_ID" -d "text=$MESSAGE"
                echo "$CURRENT_STATE" > "$STATUS_FILE"
            fi
        fi
    fi
done

⚙️ Installation et Automatisation

Pour que ce contrôle tourne tout seul sur notre VPS, on suit ces étapes :

  1. On place le fichier dans /usr/local/bin/check_dns.sh
  2. On rend le script exécutable : sudo chmod +x /usr/local/bin/check_dns.sh
  3. On planifie la tâche avec Cron pour une vérification toutes les 15 minutes :
# On ouvre la crontab
crontab -e

# On ajoute cette ligne à la fin
*/15 * * * * /usr/local/bin/check_dns.sh > /dev/null 2>&1
Telegram avec alerte de propagation DNS en cours
Propagation en cours
Telegram avec alerte de propagation DNS fini.
Propagation terminer

L’avantage de cette méthode, c’est qu’on ne dépend plus d’un seul outil. En interrogeant à la fois le résolveur local du VPS, les serveurs DNS de Google (8.8.8.8) et ceux de Cloudflare (1.1.1.1), on obtient une vision globale et ultra-fiable de la propagation. Dès que les trois adresses correspondent, on est certain à 100% que nos visiteurs arrivent sur la nouvelle infrastructure.

✅ Résultat final

Désormais, on reçoit une notification Telegram détaillée dès qu’un problème est détecté. Une fois que les trois sources (VPS, Google, Cloudflare) sont d’accord, on reçoit le signal « OK » et on sait que notre migration est officiellement terminée !


Conclusion : C’est un petit gain de temps qui évite beaucoup de stress. On sait exactement quand nos visiteurs commencent à arriver sur le nouveau serveur. 🌟

Laisser un commentaire