[gelöst] Script gesucht, damit Wireguard die IP neu auflöst

erik

IPPF-Promi
Mitglied seit
30 Nov 2004
Beiträge
6,430
Punkte für Reaktionen
436
Punkte
83
Hallo,
kann mir mal jemand helfen? Mein Heimnetz ist über Wireguard (openWRT) mit einem entfernten Netz verbunden, welches über Mobilfunk angebunden und deshalb von außen nicht anders erreichbar ist. Der dortige Wireguard-Server bekommt über dynv6.com die IP meines heimischen Anschlusses und verbindet sich, so dass ich Zugriff bekomme und die IP-Kamera und diverse Schalter erreiche. Das klappt so lange, bis sich meine heimische IP wegen Routerneustart oder Stromausfall irgendwann mal ändert.

Leider gibt es bei Wireguard noch keine Funktion, die dafür sorgt, die IP des Servers in diesem Fall erneut beim Dyndns-Account anzufragen. In diversen Artikeln zum Thema steht nur, man solle die Verbindung kurz trennen, was bei einem Handy ja auch kein Problem ist. Bei LAN-LAN Verbindungen wird immer auf Scripte oder Cronjobs verwiesen, nur wird man nirgends konkret. Bisher habe ich den entfernten Wireguard-Server deshalb an einer noch nicht mit Tasmota geflashten Wlan-Steckdose betrieben, um über die China-Cloud den Server aus der Ferne ab- und wieder anschalten zu können. Diese Lösung ist aber unbefriedigend, denn man muss ja erst mal merken, dass die Verbindung unterbrochen ist, und der Neustart dauert dann auch noch einige Zeit.

Bei openWRT kann man Scripte ausführen lassen, in Luci gibt es einen System-Crontab, wo das einfach einzurichten sein soll. Nur finde ich keine Hilfe, was man da eingeben könnte, ich will ja keine regelmäßigen Neustarts. Am einfachsten wäre es, die IP zum Dyndns-Namen z.B. alle 5 Minuten abzufragen, und wenn sich die IP geändert hat, die Wireguard-Schnittstelle neu zu starten. Ich hoffe, mir kann jemand auf die Sprünge helfen, auch Links zum Thema wären sehr hilfreich. Danke schon mal!

Erik.

Verbindungsabbruch​

FAQ: VPNs mit WireGuard

Mein Smartphone verliert die Verbindung zu meinem WireGuard-Server hinter dem heimischen Router, wenn die DSL-Verbindung neu aufgebaut wird. Dann muss ich immer von Hand die WireGuard-Verbindung trennen und wieder aufbauen. Was kann ich tun?



FAQ: VPNs mit WireGuard

Letztlich wenig. Es gibt zwar eine Einstellung PersistentKeepAlive = 15, mit der man WireGuard dazu bringen kann, in regelmäßigem Zeitabstand (im Beispiel 15 Sekunden) Pakete über die Verbindung zu schicken. Doch leider erzwingt das keine neue Namensanfrage, die bei geänderter IP-Adresse des WireGuard-Servers nötig wäre. Auf Mobilgeräten, bei denen man kein Hilfskonstrukt für solche Fälle bauen kann, etwa mit einem Skript, das die IP-Adresse des Servers auf Änderungen prüft, muss man vorerst damit leben.
 
Zuletzt bearbeitet:
Wenn ich mich recht entsinne, gibt es in der Originaldokumentation von Wireguard ein derartiges Script.

Ich habe auch selbst an etwas Derartigem gebastelt, es aber dann schnell aufgegeben, weil es nicht notwendig war. Einfach die Zeiten der sinnfreien Zwangstrennung so gelegt, dass niemals mehrere Endstellen betroffen waren und damit konnte ich das Problem sauber umgehen. Aber bei dir ist das ja anders.
Ich verweise nochmals darauf, dass das Beigelegte ein erster schneller Versuch war. Aber es könnte ein Ausgangspunkt für eigene Entwicklung sein.

Und noch ein edit:
Das Script war aus meinen "RasPi-Zeiten". Als Betriebssystem lief ein vollständiges Linux. Ob das in dieser Hinsicht beschränkte OpenWrt das auch kann (=> Programm "dig"!) weiß ich nicht, da ich das ja nicht weiter verfolgt habe.
 

Anhänge

  • wgstatus.zip
    1.2 KB · Aufrufe: 6
Danke, durch genauere Suche (das fehlende entscheidende Suchwort war "resolve dns") und die Analyse eines Reserveservers hier vor Ort habe ich es gefunden:
Code:
* * * * * /usr/bin/wireguard_watchdog
Das benötigte Script ist nach Installation der wireguard-tools schon vorhanden, man muß es nur noch über den Chrontab starten, indem man oben genanntes dort einfügt. Damit wird bei allen Peers, die sich länger als eine Minute lang nicht gemeldet haben, der Hostname neu aufgelöst.
 
Zuletzt bearbeitet:
Danke, das hatte ich noch nicht gefunden (und auch mangels Bedarf nicht gesucht).
Wie schon geschrieben, finden sich meine 8 WG-Server immer automatisch, da es ja wegen der entsprechenden Einstellung "niemals" passieren dürfte, dass die Zwangstrennung gleichzeitig bei 2 Routern passiert.
Dieses Problem tritt (bei mir) also nur auf, wenn bei einem meiner insgesamt rund 40-50 angeschlossenen oder anschließbaren Nutzer-Clients der Tunnel aktiv war und zwischenzeitlich die neue IP kam. Wie ich schon mehrfach schrieb, ist bei meinen Smartphones der Tunnel ja ständig aktiv (auch zu Hause). Aber da ich mein heimisches WLAN in der Nacht per Timer deaktiviere und meine Smartphones in den Flugmodus schalte, kann ich das damit gut umgehen.
 
Hallo
da ich auch nach einem IP wechsel (Neu verbinden) keine Verbindung mit wireguard hatte habe ich das script installiert.

Es wird alle Minute mit cron gestartet.
Aber das was es tun sollte tut es nicht.

Ich habe das script von wireguart heruntergeladen.Weil von Ubuntu nichts mitgeliefert wurde.

Ist dein Script das gleiche?

Bash:
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
#
# Copyright (C) 2015-2020 Jason A. Donenfeld <[email protected]>. All Rights Reserved.

set -e
shopt -s nocasematch
shopt -s extglob
export LC_ALL=C

CONFIG_FILE="$1"
[[ $CONFIG_FILE =~ ^[a-zA-Z0-9_=+.-]{1,15}$ ]] && CONFIG_FILE="/etc/wireguard/$CONFIG_FILE.conf"
[[ $CONFIG_FILE =~ /?([a-zA-Z0-9_=+.-]{1,15})\.conf$ ]]
INTERFACE="${BASH_REMATCH[1]}"

process_peer() {
    [[ $PEER_SECTION -ne 1 || -z $PUBLIC_KEY || -z $ENDPOINT ]] && return 0
    [[ $(wg show "$INTERFACE" latest-handshakes) =~ ${PUBLIC_KEY//+/\\+}\    ([0-9]+) ]] || return 0
    (( ($EPOCHSECONDS - ${BASH_REMATCH[1]}) > 135 )) || return 0
    wg set "$INTERFACE" peer "$PUBLIC_KEY" endpoint "$ENDPOINT"
    reset_peer_section
}

reset_peer_section() {
    PEER_SECTION=0
    PUBLIC_KEY=""
    ENDPOINT=""
}

reset_peer_section
while read -r line || [[ -n $line ]]; do
    stripped="${line%%\#*}"
    key="${stripped%%=*}"; key="${key##*([[:space:]])}"; key="${key%%*([[:space:]])}"
    value="${stripped#*=}"; value="${value##*([[:space:]])}"; value="${value%%*([[:space:]])}"
    [[ $key == "["* ]] && { process_peer; reset_peer_section; }
    [[ $key == "[Peer]" ]] && PEER_SECTION=1
    if [[ $PEER_SECTION -eq 1 ]]; then
        case "$key" in
        PublicKey) PUBLIC_KEY="$value"; continue ;;
        Endpoint) ENDPOINT="$value"; continue ;;
        esac
    fi
done < "$CONFIG_FILE"
process_peer
 
Zuletzt bearbeitet:
Beim schnelle Überfliegen des Scriptes wird eine Konfigurationsdatei "/etc/wireguard/$CONFIG_FILE.conf" erwartet, in der die folgenden Variablen gesetzt sind:
INTERFACE
PUBLIC_KEY
ENDPOINT
 
Ok, Habs jetzt gefunden auf meinem Server unter /usr/share/doc/wireguard-tools/examples/reresolve-dns/reresolve-dns.sh
ist das selbe wie oben.

Lt einer Anleitung wird das mit einem Timer gestartet,was es auch tut.Aber die verbindung wird trotzdem nicht automatisch hergestellt.

Code:
Feb 16 13:51:03 hp-server systemd[1]: Starting wg-reresolve-dns@...
Feb 16 13:51:03 hp-server systemd[1]: [email protected]: Succeeded.
Feb 16 13:51:03 hp-server systemd[1]: Finished wg-reresolve-dns@.
Feb 16 13:51:36 hp-server systemd[1]: Starting wg-reresolve-dns@...
Feb 16 13:51:36 hp-server systemd[1]: [email protected]: Succeeded.
Feb 16 13:51:36 hp-server systemd[1]: Finished wg-reresolve-dns@.
Hier ein Abschnitt vom script

reset_peer_section() {
PEER_SECTION=0
PUBLIC_KEY=""
ENDPOINT=""

Muss da was ausgefüllt werden`? Wenn ja was muss in PEER_SECTION rein?
 

Zurzeit aktive Besucher

Statistik des Forums

Themen
246,592
Beiträge
2,254,572
Mitglieder
374,483
Neuestes Mitglied
the-duke
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.