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
- 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.
[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.