Surveiller et gérer vos connexions internet avec OpenMPTCProuter

Si vous utilisez OpenMPTCProuter pour agréger plusieurs connexions Internet (4G, fibre, ADSL…), vous savez à quel point il est crucial de surveiller l’état de chaque box. Imaginez que l’une de vos connexions tombe sans que vous le sachiez : cela peut entraîner des perturbations, surtout si vous avez des services critiques en ligne.

Pour résoudre ce problème, nous avons conçu un script de surveillance automatique qui détecte les pannes de chaque box et vous alerte immédiatement via Telegram. Une fois la connexion rétablie, vous recevez également une notification.


Fonctionnalités du script

Surveillance de la connectivité locale

  • Vérifie si chaque box est accessible depuis le routeur.
  • Utilise la commande ping pour détecter la perte de connectivité locale.

Surveillance de la connectivité Internet

  • Vérifie si chaque box peut accéder à Internet via le DNS Google (8.8.8.8).
  • Détecte les box connectées localement mais sans accès Internet.

Notifications Telegram en temps réel

  • Reçoit une alerte si une box tombe ou si l’accès à Internet est perdu.
  • Reçoit une notification lorsque la box est de nouveau fonctionnelle.

Éviter les alertes en double

  • Une box ne génère qu’une seule alerte tant que le problème persiste.
  • Lorsqu’elle revient en ligne, une notification est envoyée pour signaler le rétablissement.

Mode test pour vérifier le bon fonctionnement

  • Permet de recevoir des messages « OK » si tout fonctionne.

Comment fonctionne le script

Le script fonctionne en boucle toutes les 5 minutes (configuré via cron) et vérifie l’état de chaque box définie dans sa configuration.

Voici les étapes :

1. Initialisation

  • Chargement des paramètres (tokens Telegram, chat ID, lieu).
  • Chargement des erreurs précédemment détectées depuis le fichier de log (/tmp/errors_OMR.log).

2. Vérification de la connectivité

Pour chaque box définie, le script :

  • Ping l’IP locale pour vérifier la connectivité réseau.
  • Ping le DNS Google (8.8.8.8) pour vérifier l’accès Internet.

3. Gestion des notifications

  • Si une box tombe (locale ou Internet), le script vérifie si cette erreur a déjà été enregistrée :
    • Si non, il enregistre l’erreur et envoie une notification Telegram.
    • Si oui, il ne fait rien pour éviter les alertes redondantes.
  • Si une box est de nouveau en ligne, il supprime l’erreur du fichier de log et envoie une notification de rétablissement.

4. Gestion des logs

Les erreurs sont stockées dans un fichier dédié pour éviter les alertes répétées et les pertes d’informations en cas de redémarrage.


Les box suivies dans cet exemple

Nom Interface WAN Adresse IP
4G wan2 192.168.7.1
Orange wan3 192.168.6.1
Freebox wan4 192.168.5.1

Installation et configuration

1. Installation des prérequis

Assurez-vous d’avoir installé curl pour envoyer les notifications Telegram :

sudo apt update
sudo apt install curl -y

2. Téléchargement du script

Copiez le script dans votre serveur :

nano /root/check_boxes.sh

Collez le contenu du script et enregistrez (CTRL + X).

3. Rendre le script exécutable

chmod +x /root/check_boxes.sh

4. Configuration des variables

Ouvrez le script pour modifier les informations :

  • Token Telegram et Chat ID (Comment créer un bot Telegram)
  • Adresse IP des box
  • Interfaces WAN associées
  • Nom du lieu pour identifier les alertes
  • Nom des boxes
  • Mode Test (true/false)

➡️ Pensez à donner des noms explicites aux boxes pour qu’ils apparaissent clairement dans les notifications (par exemple « 4G », « Orange », « Freebox », etc.).


Mode test

Pour tester le bon fonctionnement, activez le mode test en modifiant la variable :

TEST_MODE=true

Exécutez le script manuellement pour vérifier :

bash /root/check_boxes.sh

Si tout est en ordre, vous recevrez une notification Telegram indiquant que toutes les box fonctionnent correctement.


Exemple de notification

Si une box tombe :

⚠️ Maison - Freebox (192.168.5.1) est hors ligne via wan4 !

Si une box revient en ligne :

✅ Maison - Freebox fonctionne à nouveau !

Le Script Complet

#!/bin/bash

# Configuration
TELEGRAM_BOT_TOKEN="xxxTOKENxxx"           # Remplacer par ton token de bot Telegram
TELEGRAM_CHAT_ID="-xxxIDxxx"             # Remplacer par ton ID de chat Telegram

# Mode test (true = envoi des messages OK, false = envoi seulement en cas de problème)
TEST_MODE=false  # Mettre false en production

LIEU="XXX" # Nommer l'emplacement de openmptcprouter - Maison, Bureaux...

# Fichier de stockage des erreurs
ERROR_FILE="/tmp/errors_OMR.log"

# Définition des box avec leur IP et interface WAN
declare -A BOXES
BOXES["4G"]="192.168.7.1"
BOXES["Orange"]="192.168.6.1"
BOXES["Freebox"]="192.168.5.1"

declare -A INTERFACES
INTERFACES["4G"]="wan2"
INTERFACES["Orange"]="wan3"
INTERFACES["Freebox"]="wan4"

# Fonction pour envoyer une alerte Telegram
send_telegram_message() {
    local message="$1"
    curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
        -d "chat_id=${TELEGRAM_CHAT_ID}" \
        -d "text=${message}"
}

# Création du fichier d'erreurs s'il n'existe pas
touch "$ERROR_FILE"

# Chargement des erreurs existantes en mémoire
declare -A ERROR_LOGGED
while read -r line; do
    ERROR_LOGGED["$line"]=1
done < "$ERROR_FILE" # Vérification des box PROBLEM_FOUND=false ALL_OK=true # Sert pour le mode test for box in "${!BOXES[@]}"; do IP=${BOXES[$box]} INTERFACE=${INTERFACES[$box]} BOX_ERROR="false" # Vérifie si la box répond en local (timeout 3s) if ! timeout 3 ping -I "$INTERFACE" -c 1 "$IP" > /dev/null 2>&1; then
        if [[ -z "${ERROR_LOGGED[$box]}" ]]; then
            send_telegram_message " zM-  o $LIEU - $box ($IP) est hors ligne via $INTERFACE !"
            echo "$box" >> "$ERROR_FILE"  # Stocker l'erreur
        fi
        PROBLEM_FOUND=true
        ALL_OK=false
        BOX_ERROR="true"
    else
        # Vérifie si la box peut sortir sur Internet (test Google DNS 8.8.8.8)
        if ! timeout 3 ping -I "$INTERFACE" -c 1 8.8.8.8 > /dev/null 2>&1; then
            if [[ -z "${ERROR_LOGGED[$box]}" ]]; then
                send_telegram_message " zM-  o $LIEU - $box ($INTERFACE) est connectée localement mais n'a plus Internet !"
                echo "$box" >> "$ERROR_FILE"  # Stocker l'erreur
            fi
            PROBLEM_FOUND=true
            ALL_OK=false
            BOX_ERROR="true"
        fi
    fi

    # Si la box est réparée, envoyer une notification et la retirer du fichier
    if [[ "$BOX_ERROR" == "false" && -n "${ERROR_LOGGED[$box]}" ]]; then
        send_telegram_message " |^e $LIEU - $box fonctionne à nouveau !"
        sed -i "/^$box$/d" "$ERROR_FILE"  # Supprimer la ligne correspondante
    fi
done

# Mode test : envoyer un message "OK" si tout marche bien
if $TEST_MODE && $ALL_OK; then
    send_telegram_message " |^e $LIEU - Toutes les box fonctionnent correctement !"
fi

Automatiser l’exécution avec cron

Pour que le script tourne toutes les 5 minutes, utilisez crontab :

crontab -e

Ajoutez la ligne suivante à la fin :

*/5 * * * * /bin/bash /root/check_boxes.sh

Cela garantira que le script est exécuté automatiquement sans intervention manuelle.


Conclusion

Ce script est un excellent moyen de surveiller en temps réel vos connexions Internet avec OpenMPTCProuter. Grâce aux notifications Telegram, vous êtes immédiatement informé en cas de problème et vous pouvez réagir rapidement.

Cela vous permet de vous assurer que votre réseau est toujours opérationnel, même en cas de coupure d’un des liens.