Wireguard | Tunnel Status überwachen

Wireguard | Tunnel Status überwachen
Photo by Iva Rajović / Unsplash

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 an syslog zu senden (journalctl -u wg0-healthcheck.service).
  • Routen prüfen: Falls du spezielle Routing-Tabellen nutzt, sicherstellen, dass ping den richtigen Pfad nimmt.

✅ Zusammenfassung

  1. wg-quick@wg0 automatisch mit systemd neu starten.
  2. Health-Check-Skript erstellt und alle 5 Minuten per Timer ausgeführt.
  3. Automatischer, sicherer „Self-Healing“-Mechanismus für deinen WireGuard-Tunnel.

Read more