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
Wireguard Script um Hostname neu zu resolven
Re: Wireguard Script um Hostname neu zu resolven
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.
Zuletzt geändert von smutbert am 10.10.2021 23:21:05, insgesamt 1-mal geändert.
Grund: Grammatik
Grund: Grammatik
Re: Wireguard Script um Hostname neu zu resolven
Hey das klingt gut, das wäre super interessant! :=)
Re: Wireguard Script um Hostname neu zu resolven
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
Das eigentliche Skript »/usr/local/bin/ddns« sieht dann etwa so aus
41489
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«:
Wenn irgendein Teil unklar ist (oder nicht funktioniert) einfach fragen bzw. bescheid sagen.
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

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
Re: Wireguard Script um Hostname neu zu resolven
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.
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.
- 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
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
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.