Sommaire :
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.