Wireguard | Tunnel Status überwachen
Automatischer Neustart des WireGuard-Tunnels bei Verbindungsverlust
Diese Anleitung beschreibt, wie du deinen WireGuard-Tunnel (wg-quick) automatisch neu starten kannst, wenn der Remote-Endpunkt nicht erreichbar ist.
1️⃣ systemd-Konfiguration für automatischen Neustart
WireGuard-Interfaces, die mit wg-quick up wg0 gestartet werden, erzeugen normalerweise einen systemd-Dienst namens [email protected].
Bearbeite die Service-Konfiguration:
sudo systemctl edit [email protected]
Füge folgende Zeilen hinzu:
[Service]
Restart=on-failure
RestartSec=15
Danach neu laden und aktivieren:
sudo systemctl daemon-reload
sudo systemctl enable --now wg-quick@wg0
Damit wird der Dienst neu gestartet, wenn er abstürzt.
2️⃣ Health-Check-Skript (Beispiel für wg0)
Erstelle ein Skript, das prüft, ob der Tunnel erreichbar ist, und ihn neu startet, wenn der Endpunkt nicht reagiert.
sudo mkdir -p /opt/scripts/
Datei: `/opt/scripts/wg0-healthcheck.sh`
```bash
#!/bin/bash
IFACE="wg0"
ENDPOINT_IP="192.168.1.1" # IP oder DNS des Peers
PING_COUNT=3
# Prüfen, ob Interface aktiv ist
if ! wg show "$IFACE" >/dev/null 2>&1; then
logger "[$IFACE] Interface nicht aktiv. Neustart..."
systemctl restart wg-quick@$IFACE
exit
fi
# Erreichbarkeit des Endpunkts testen
if ! ping -c $PING_COUNT -W 3 "$ENDPOINT_IP" >/dev/null 2>&1; then
logger "[$IFACE] Endpunkt nicht erreichbar. Neustart WireGuard."
systemctl restart wg-quick@$IFACE
fi
Datei ausführbar machen:
sudo chmod +x /opt/scripts/wg0-healthcheck.sh
3️⃣ systemd-Timer zur regelmäßigen Überprüfung
Dienstdefinition
sudo nano /etc/systemd/system/wg0-healthcheck.service
Inhalt:
[Unit]
Description=Check WireGuard tunnel health
[Service]
Type=oneshot
ExecStart=/opt/scripts/wg0-healthcheck.sh
Timer-Datei
sudo nano /etc/systemd/system/wg0-healthcheck.timer
Inhalt:
[Unit]
Description=Run WireGuard health check every 5 minutes
[Timer]
OnBootSec=1min
OnUnitActiveSec=5min
Persistent=true
[Install]
WantedBy=timers.target
Timer aktivieren:
sudo systemctl daemon-reload
sudo systemctl enable --now wg0-healthcheck.timer
4️⃣ Sicherheitshinweise
- Least Privilege: Das Skript benötigt nur Systemrechte zum Neustart des Dienstes, keine Schlüssel.
- Logging: Nutzt
logger, um Meldungen ansyslogzu senden (journalctl -u wg0-healthcheck.service). - Routen prüfen: Falls du spezielle Routing-Tabellen nutzt, sicherstellen, dass
pingden richtigen Pfad nimmt.
✅ Zusammenfassung
wg-quick@wg0automatisch mit systemd neu starten.- Health-Check-Skript erstellt und alle 5 Minuten per Timer ausgeführt.
- Automatischer, sicherer „Self-Healing“-Mechanismus für deinen WireGuard-Tunnel.