Wireguard Script um Hostname neu zu resolven

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
Knogle
Beiträge: 465
Registriert: 06.05.2016 19:29:00
Lizenz eigener Beiträge: MIT Lizenz

Wireguard Script um Hostname neu zu resolven

Beitrag von Knogle » 10.10.2021 10:21:58

Hallo Freunde.

Ich nutze aktuell ein Debian System mit Wireguard um sich zu meinem Hub zu verbinden. Der Host nutzt bei DynDNS, hat jedoch eine täglich wechselnde IP.
Daher benötige ich eine Art Script welche checkt ob der peer down ist, oder ob sich die IP geändert hat, um dann Wireguard neuzustarten.
Ich habe mir da bereits einige fertige von Github runtergezogen, jedoch hat das nicht funktioniert.
Mich wunder tatsächlich, warum ist bei wireguard-tools von Debian Bullseye nicht das Wireguard Watchdog Script dabei? Hat jemand eventuell ein Script welches man in einen Cronjob stecken könnte um das hier zu bewerkstelligen?
Leider sind meine Scripting Kentnisse nicht so groß weshalb ich das alleine nicht hinkriegen.

Freue mich auf Hilfe!
Viele Grüße

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Wireguard Script um Hostname neu zu resolven

Beitrag von smutbert » 10.10.2021 12:39:58

Da habe ich mir einmal etwas gebastelt, bei mir hat es aber nichts mit Wireguard zu tun. Ich bin mir nicht einmal sicher, dass das was ich mache eine besonders gute Idee ist, aber ich beschreibe es einfach einmal:
  • auf dem System mit der wechselnden IP-Adresse lasse ich einen ssh-Server laufen
  • ein Shellskript wird ebenfalls auf diesem System als Dienst gestartet und versucht sich über den öffentlichen Namen von DynDNS via ssh und mit einem public key zur Authentifizierung verbinden.

    Als Shell wird lediglich /bin/true zugelassen, weil ja niemand etwas tun können soll sondern nur geprüft wird ob die Verbindung hergestellt werden kann. Bei den Vorbereitungen muss man natürlich den (eigenen) Hostkey akzeptieren, der dann im laufenden Betrieb auch sicherstellt, dass sich kein fremdes System als das eigene ausgibt.
  • funktioniert das mit der Verbindung stimmt die IP-Adresse noch, andernfalls muss der DNS-Eintrag aktualisiert werden.

    Scheitert das Aktualisieren oder Verbinden zu oft, bricht das Skript (und abhängig von der Konfiguration der ganze Dienst) mit einem Fehler ab.
Wenn es dich interessiert, müsste ich das Skript und einige Konfigurationsschnipsel zusammensuchen, damit ich es posten kann.
Zuletzt geändert von smutbert am 10.10.2021 23:21:05, insgesamt 1-mal geändert.
Grund: Grammatik

Knogle
Beiträge: 465
Registriert: 06.05.2016 19:29:00
Lizenz eigener Beiträge: MIT Lizenz

Re: Wireguard Script um Hostname neu zu resolven

Beitrag von Knogle » 10.10.2021 23:15:16

Hey das klingt gut, das wäre super interessant! :=)

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Wireguard Script um Hostname neu zu resolven

Beitrag von smutbert » 11.10.2021 15:40:57

Zuerst habe ich einen eigenen Benutzer für das ganze Unterfangen eingerichtet, den ich ddns genannt habe und unter dem Benutzer ein ssh-Schlüsselpaar erstellt und auch gleich auf dem eigenen System zur Authentifizierung eingerichtet (ssh-keygen und ssh-copy-id).

Nachdem ich außerdem einmal sichergestellt habe, dass der Hostname gerade richtig aufgelöst wird, sollte die Anmeldung über ssh ohne Passwort oder sonstige Nachfrage klappen.

Das nächste ist den Benutzer ddns die Möglichkeit zu nehmen sich tatsächlich anzumelden, egal ob remote oder lokal, aber so, dass man trotzdem die Authentifizierung prüfen kann und das habe ich durch Setzen der Loginshell auf /bin/true gemacht und obendrein dem Benutzer kein Passwort gegeben. Also in die »/etc/shadow« in die Spalte mit dem Passwort einen * und die Zeile für den Benutzer in der »/etc/passwd« geändert, dass sie so aussieht

Code: Alles auswählen

ddns:x:1001:1001:dynamic dns,,,:/home/ddns:/usr/bin/true
Das eigentliche Skript »/usr/local/bin/ddns« sieht dann etwa so aus
NoPaste-Eintrag41489
DDNS_DOMAIN ist der Domainname unter dem das System zugänglich sein sollte und DDNS_URL ist die Adresse des Tokens, den man herunterladen muss, um die DNS-Informationen auf den aktuellen Stand zu bringen. Dafür ist die Funktion refresh_ip
check_ddns macht dagegen, die Überprüfung mit ssh. Um festzulegen auf welchen Port der ssh-Server lauscht, gibt es dann auch noch die Variable SSH_PORT – normalerweise ist das 22, aber ich habe einen anderen genommen.


Gestartet wird das ganze als systemd service unit »/etc/systemd/system/ddns«:

Code: Alles auswählen

[Unit]
Description=update ddns information
After=network-online.target
Requires=network-online.target

[Service]
Type=simple
ExecStart=/usr/local/bin/ddns
Restart=on-success
User=ddns

[Install]
WantedBy=multi-user.target
Wenn irgendein Teil unklar ist (oder nicht funktioniert) einfach fragen bzw. bescheid sagen.

Knogle
Beiträge: 465
Registriert: 06.05.2016 19:29:00
Lizenz eigener Beiträge: MIT Lizenz

Re: Wireguard Script um Hostname neu zu resolven

Beitrag von Knogle » 15.10.2021 09:32:52

Hey!! Herzlichen Dank! Das ist super.
Ich habe es geschafft auf meinen Case abzuändern, und das hat echt prima funktioniert, hätte ich nicht gedacht, dass man das auch so lösen kann!
Danke @smutbert für die Mühe.

Benutzeravatar
pangu
Beiträge: 1400
Registriert: 15.11.2011 20:50:52
Lizenz eigener Beiträge: GNU General Public License
Wohnort: /proc/1

Re: Wireguard Script um Hostname neu zu resolven

Beitrag von pangu » 15.11.2021 08:43:50

Hi Knogle,

zu deiner Info: das Paket wireguard-tools stellt für solchen Zweck ein Skript bereit, das nennt sich reresolve-dns. Du findest sämtliche Infos und auch das Skript unter /usr/share/doc/wireguard-tools/examples/reresolve-dns.

Weitere Hinweise finden sich auf der tollen Wiki hier:
https://wiki.archlinux.org/title/WireGu ... resolution

Viel Erfolg und viele Grüße
Man gibt Geld aus, das man nicht hat, um damit Dinge zu kaufen, die man nicht braucht, um damit Leute zu beeindrucken, die man nicht mag.

Antworten