Benutzer-Werkzeuge

Webseiten-Werkzeuge


public:wg-dispatcher

WireGuard wg0 Auto-Dispatcher mit Heimnetzerkennung


Das folgende Bash-Script prüft bei einem Netwerkevent alle verfügbaren Netzwerkschnittstellen (außer `lo` und `wg0`) auf „interne“ IP-Adressen (Heimnetz, z.B. hier: 192.168.0.0/23).
Falls diese erkannt wird, wird das Interface `wg0` automatisch gestoppt. Bei allen anderen Netzen wird `wg0` automatisch gestartet.

#!/bin/bash
 
LOGFILE="/var/log/wg0-multi-check.log"
echo "[$(date)] Dispatcher ausgelöst – prüfe Netzstatus" >> "$LOGFILE"
 
# Alle NICs mit aktiver IPv4-Adresse, außer loopback und wg0
IFACES=($(ip -o -4 addr show scope global | awk '!/ lo / && !/ wg0 / {print $2}' | sort -u))
INTERN_NET=false
 
# Alle relevanten Interfaces prüfen
for IFACE in "${IFACES[@]}"; do
    # Warten auf gültige IP
    for i in {{1..5}}; do
        IP=$(ip -4 addr show dev "$IFACE" | awk '/inet / {print $2}' | cut -d'/' -f1)
        if [[ -n "$IP" ]]; then
            break
        fi
        sleep 1
    done
 
    if [[ -z "$IP" ]]; then
        echo "[$(date)] Keine IP auf $IFACE – überspringe." >> "$LOGFILE"
        continue
    fi
 
    echo "[$(date)] IP auf $IFACE: $IP" >> "$LOGFILE"
 
    if [[ "$IP" =~ ^192\\^168\\.(0|1)\\.[0-9]+$ ]]; then
        echo "[$(date)] $IFACE hat interne IP – wg0 soll gestoppt werden." >> "$LOGFILE"
        INTERN_NET=true
        break
    fi
done
 
# Aktion je nach Zustand
if $INTERN_NET; then
    if systemctl is-active --quiet wg-quick@wg0; then
        systemctl stop wg-quick@wg0
        echo "[$(date)] wg0 gestoppt." >> "$LOGFILE"
    else
        echo "[$(date)] wg0 war nicht aktiv." >> "$LOGFILE"
    fi
else
    if ! systemctl is-active --quiet wg-quick@wg0; then
        systemctl start wg-quick@wg0
        echo "[$(date)] wg0 gestartet." >> "$LOGFILE"
    else
        echo "[$(date)] wg0 bereits aktiv." >> "$LOGFILE"
    fi
fi
Hinweise:


- Das Script sollte unter /etc/NetworkManager/dispatcher.d/90-wg-multicheck.conf angelegt werden und ausführbar gemacht werden.
- Das Logfile liegt unter `/var/log/wg0-multi-check.log` und kann mit `tail -f` überwacht werden.
- `/etc/wireguard/wg0.conf` muss korrekt vorhanden sein.
- Der Start des Scripts wird als Hook durch ein Netzwerkevent (z.B.: Wechsel der Netzerkschnittstelle oder IP Wechsel) getriggert.

Beispielhafte Logausgabe:


[Sat Apr  5 00:19:36 CEST 2025] Dispatcher ausgelöst – prüfe Netzstatus
[Sat Apr  5 00:19:36 CEST 2025] IP auf enx000acd2bccfb: 172.16.12.13
[Sat Apr  5 00:19:36 CEST 2025] wg0 gestartet.
[Sat Apr  5 00:19:36 CEST 2025] Dispatcher ausgelöst – prüfe Netzstatus
[Sat Apr  5 00:19:37 CEST 2025] IP auf enx000acd2bccfb: 172.16.12.13
[Sat Apr  5 00:19:37 CEST 2025] wg0 bereits aktiv.
[Sat Apr  5 00:20:17 CEST 2025] Dispatcher ausgelöst – prüfe Netzstatus
[Sat Apr  5 00:20:17 CEST 2025] IP auf enx000acd2bccfb: 172.16.12.13
[Sat Apr  5 00:20:17 CEST 2025] IP auf wlo1: 192.168.1.23
[Sat Apr  5 00:20:17 CEST 2025] wlo1 hat interne IP – wg0 soll gestoppt werden.
[Sat Apr  5 00:20:17 CEST 2025] wg0 gestoppt.
public/wg-dispatcher.txt · Zuletzt geändert: 2025/04/05 11:23 von gerson

Seiten-Werkzeuge