Files
vpn_watchdog/Readme.md
2026-05-19 12:26:34 +00:00

3.2 KiB

VPN Watchdog — WireGuard

Script de surveillance automatique du tunnel WireGuard. Détecte toute fuite ou déconnexion VPN et relance l'interface sans intervention manuelle.


Objectif

Garantir qu'une machine ne tourne jamais sans VPN actif.

Cas couverts :

  • Interface wg0 absente ou non démarrée
  • Tunnel mort (handshake trop ancien)
  • Trafic réseau qui sort hors du tunnel WireGuard (fuite)

Compatibilité

Critère Requis
OS Linux (testé sur Ubuntu 24.04)
Systemd Oui — obligatoire
WireGuard wg-quick + interface configurée
Shell Bash

Dépendances

Outil Usage Paquet
wg Lecture état WireGuard wireguard-tools
ip Vérification routage iproute2 (inclus par défaut)
systemctl Redémarrage du service systemd
awk Parsing des sorties gawk (inclus par défaut)

Installation si manquant :

apt install wireguard-tools iproute2

Fonctionnement

Le script s'exécute en 3 étapes séquentielles :

Étape 1 — Présence de l'interface

Vérifie que wg0 est active via wg show.
Si absente : tente un systemctl restart wg-quick@wg0.service.
Si le redémarrage échoue : log l'erreur et quitte.

Étape 2 — Âge du handshake

Récupère le timestamp du dernier handshake WireGuard.
Si supérieur à 180 secondes : le tunnel est considéré mort, WireGuard est redémarré.

Étape 3 — Vérification du routage

Exécute ip route get 8.8.8.8 et vérifie que l'interface de sortie est bien wg0.
Si le trafic sort par une autre interface (fuite) : redémarre WireGuard et vérifie le résultat.
Si le trafic sort toujours hors VPN après redémarrage : log l'erreur et quitte avec code 1.


Installation

1. Copier le script

cp vpn_watchdog.sh /usr/local/bin/vpn_watchdog.sh

2. Rendre exécutable

chmod +x /usr/local/bin/vpn_watchdog.sh

3. Créer la tâche cron (toutes les minutes)

crontab -e

Ajouter :

* * * * * /usr/local/bin/vpn_watchdog.sh

Logs

Les événements sont enregistrés dans :

/var/log/vpn_watchdog.log

Exemple de sortie :

[2025-05-19 14:00:01] OK : Trafic sur wg0 — VPN actif.
[2025-05-19 14:01:01] ALERTE : Fuite détectée — trafic sur 'ens18' au lieu de 'wg0'. Redémarrage...
[2025-05-19 14:01:12] OK : Trafic rétabli sur wg0 après redémarrage.

Configuration

Variables modifiables en tête de script :

Variable Défaut Description
WG_INTERFACE wg0 Nom de l'interface WireGuard
LOG_FILE /var/log/vpn_watchdog.log Chemin du fichier de log
MAX_HANDSHAKE_AGE 180 Seuil en secondes avant de considérer le tunnel mort

Limitations connues

  • Si le réseau physique est indisponible au moment de l'exécution du cron, WireGuard ne peut pas monter — le script échouera et réessaiera à la minute suivante.
  • Le script ne bloque pas le trafic en cas de fuite détectée — il redémarre WireGuard. Une fenêtre de fuite d'une durée maximale d'une minute est possible entre deux exécutions cron.
  • Nécessite les droits root pour wg show et systemctl restart.