Ajouter Readme.md
This commit is contained in:
120
Readme.md
Normal file
120
Readme.md
Normal file
@@ -0,0 +1,120 @@
|
||||
# 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 :
|
||||
```bash
|
||||
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**
|
||||
```bash
|
||||
cp vpn_watchdog.sh /usr/local/bin/vpn_watchdog.sh
|
||||
```
|
||||
|
||||
**2. Rendre exécutable**
|
||||
```bash
|
||||
chmod +x /usr/local/bin/vpn_watchdog.sh
|
||||
```
|
||||
|
||||
**3. Créer la tâche cron (toutes les minutes)**
|
||||
```bash
|
||||
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`.
|
||||
Reference in New Issue
Block a user