WireGuard-Adapter für ioBroker
Stellen Sie eine Verbindung zu WireGuard-Hosts her und erfassen Sie Verbindungsinformationen zu den Peers. Dieser Adapter dient als Überwachungsinstanz für Ihre WireGuard-Hosts. Er unterstützt sowohl Standardinstallationen als auch Docker.
Wenn Ihnen dieser Adapter gefällt und Sie mich unterstützen möchten
Voraussetzungen
- Auf jedem Host einen SSH-Server betreiben, um die Überwachung zu gewährleisten.
- Die ausführbare Datei wg (wg.exe unter Windows) muss im Suchpfad enthalten sein.
- Benutzername und Passwort eines Benutzers mit der Berechtigung zur Ausführung des wg-Befehls
Installationsschritte
- Prüfen Sie, ob auf Ihrem WireGuard-Host ein SSH-Server läuft. Falls nicht, installieren Sie einen. Wenn Sie mit PuTTY (oder einem ähnlichen Programm) eine Kommandozeile öffnen können, läuft auf Ihrem System ein SSH-Server.
- Stellen Sie sicher, dass der Benutzer, den Sie dafür verwenden möchten, die Anweisung ausführen kann.
wg(Gilt für Windows und Linux). Dieser Benutzer benötigt Administratorrechte! - Zusammenfassend lässt sich der Test wie folgt beschreiben: Öffnen Sie eine Remote-Befehlszeile, melden Sie sich an und führen Sie den folgenden Befehl aus:
wg showBefehl. Wenn Sie ein korrektes Ergebnis erhalten, sind Sie fertig und können diese Daten verwenden, um den Adapter auszuführen. - Führen Sie diese Schritte für jeden Host durch, den Sie überwachen möchten.
- Installieren Sie den Adapter und konfigurieren Sie ihn.
Konfigurationsoptionen
Da WireGuard intern ausschließlich öffentliche Schlüssel zur Peer-Identifizierung verwendet, diese aber für Menschen schwer lesbar sind, wurde die Übersetzungsseite hinzugefügt. Sie können dort öffentliche Schlüssel und Namen hinzufügen, um die Namen in die Objektstruktur zu integrieren.
- Startseite
- Name: Nur ein symbolischer Name für den Host, da er praktischer und einprägsamer ist als seine IP-Adresse.
- Hostadresse: IP-Adresse des Hosts. Ein FQDN oder DNS-Name funktioniert ebenfalls. Wenn Sie WireGuard und ioBroker auf demselben Host ausführen, können Sie einfach Folgendes verwenden:
localhostals IP. - Port: Portnummer Ihres SSH-Servers. Standard: 22
- Benutzer: Der Benutzer, der das Skript auf dem Host ausführt (wird verschlüsselt gespeichert).
- Passwort: Passwort für diesen Benutzer (wird verschlüsselt gespeichert)
- sudo: Gibt an, ob der wg-Befehl mit sudo ausgeführt werden soll oder nicht (erfordert eine gültige Konfiguration der sudoers! -> siehe [Sicherheitshinweise])
- Docker: Führt einen aus
docker execBefehl zum Erreichen eines WireGuard-Servers innerhalb eines Docker-Containers. Bitte prüfen Sie, ob dies Ihren Anforderungen entspricht oder ob Sie auf einen unterstützten Container umsteigen können. - Abfrageintervall: Pause zwischen den einzelnen Abfragen in Sekunden (verzögert auch den ersten Durchlauf nach dem Start des Adapters)
- Container: Name Ihres Docker-Containers. Häufig „wireguard“, kann aber abweichen, insbesondere wenn mehrere Container auf einem Server ausgeführt werden.
- Übersetzungsseite
- Öffentlicher Schlüssel: Der öffentliche Schlüssel eines Ihrer Kollegen
- Gruppenname: Ein symbolischer Name für diesen Peer
- Seite mit Konfigurationsdateien
- Name: Muss mit dem Namen auf der Hauptseite übereinstimmen.
- Schnittstelle: Name der in dieser Konfigurationsdatei gespeicherten Schnittstelle (wg0, wg1, ...)
- Konfigurationsdatei: Vollständiger Pfad und Name der Konfigurationsdatei für diese Schnittstelle (/etc/wireguard/wg0.conf, ...)
Die Ausführung der Befehlszeile hängt von den Kontrollkästchen ab:
- Kein Kontrollkästchen aktiviert:
wg show all dumpwird ausgeführt (für Benutzer mit Root-Rechten und Verwendung des SetUID-Bits) - Das Kontrollkästchen „Sudo“ ist aktiviert:
sudo wg show all dumpwird ausgeführt (funktioniert mit der korrekten sudoers-Zeile) - Das Docker-Kontrollkästchen ist aktiviert:
docker exec -it wireguard /usr/bin/wg show all dumpwird ausgeführt - Die Kontrollkästchen für Sudo und Docker sind aktiviert:
sudo docker exec -it wireguard /usr/bin/wg show all dumpwird ausgeführt
Wenn Sie WireGuard in einem Docker-Container verwenden, gehe ich davon aus, dass Sie mit beiden Technologien und Sicherheitskonzepten ausreichend vertraut sind, um Ihr System so zu konfigurieren, dass die gezeigten Befehle auf eine Weise ausgeführt werden, die nicht nach einem Passwort fragt.
Docker
Grundsätzlich gilt alles, was für reguläre Installationen gesagt wird, auch für Docker und funktioniert genauso. Ausgenommen sind die notwendigen Kontrollkästchen, um den richtigen Befehl auszuführen, und die erforderliche sudoers-Zeile. Wenn Sie WireGuard in einem Docker-Container verwenden, benötigen Sie möglicherweise sudoers-Zeilen ähnlich den folgenden:
<wg-monitoring-user> ALL=NOPASSWD:/usr/bin/docker exec -it wireguard /usr/bin/wg show all dump
<wg-monitoring-user> ALL=NOPASSWD:/usr/bin/docker exec -it wireguard /usr/bin/wg set * peer * remove
<wg-monitoring-user> ALL=NOPASSWD:/usr/bin/docker exec -it wireguard /usr/bin/wg set * peer * allowed-ips *
<wg-monitoring-user> ALL=NOPASSWD:/usr/bin/docker exec -it wireguard /usr/bin/wg syncconf * *
Dieser Adapter erwartet den Namenwireguard für Ihren WireGuard-Container und denwg Befehl in/usr/bin/ innerhalb des Containers. Diese Werte können derzeit nicht angepasst werden.
So funktioniert es
- Die Info.Verbindung des Adapters wird verwendet, um anzuzeigen, dass mindestens eine WireGuard-Schnittstelle online ist und gemeldet wird.
wg show allWenn keine WireGuard-Schnittstelle online ist, wird nichts gemeldet. In diesem Fall wird ein Fehler protokolliert und die Ampel der Adapter leuchtet gelb. - Dieser Adapter öffnet eine SSH-Shell auf jedem konfigurierten Host und führt die folgenden Befehle aus:
wg show all dumpDer Befehl beendet die Shell und analysiert das Ergebnis. - Da jeder öffentliche Schlüssel einzigartig ist, verwendet der Adapter diese, um den öffentlichen Schlüssel in benutzerfreundliche, lesbare und erkennbare Namen zu übersetzen.
- WireGuard liefert leider nicht selbst den Verbindungsstatus, sondern nur die Informationen zum letzten Handshake. Da Handshakes üblicherweise alle 120 Sekunden stattfinden, berechnet dieser Adapter den Verbindungsstatus folgendermaßen: Er geht davon aus, dass ein Peer verbunden ist, wenn der letzte Handshake weniger als 130 Sekunden zurückliegt.
Sicherheitshinweise
Ich empfehle die Verwendung von sudoers unter Linux dringend!
Diese Sicherheitshinweise beziehen sich hauptsächlich auf Linux, da dessen Sicherheitssystem komplexer ist als das von Windows. Auf einem Windows-Server benötigen Sie lediglich einen Administratorbenutzer.wg Der Befehl (der den Status von WireGuard abfragt) erfordert Administratorrechte. Überlegen Sie sich daher gut, was Sie tun und wie Sie den Benutzer in der Konfiguration festlegen. Um diese Zugangsdaten bestmöglich zu schützen, werden sowohl Benutzername als auch Passwort verschlüsselt.
Grundsätzlich gibt es drei Möglichkeiten, den Befehl auszuführen:
- Verwenden Sie einen Administratorbenutzer (root oder ähnlich). Dies funktioniert zwar, gefährdet aber Ihren gesamten Server, falls die Zugangsdaten verloren gehen oder gestohlen werden.
- Verwendung des SetUID-Bits: Durch Setzen dieses Bits (soweit ich es verstanden habe) kann jeder Benutzer die markierte Datei mit Administratorrechten und ohne Passwort ausführen. Dies schließt auch Hacker ein . Das Setzen dieses Bits im Befehl `wg` legt also dessen gesamte Macht offen. Wenn Sie dies tun möchten, führen Sie folgenden Befehl aus:
chmod u+s /usr/bin/wgals Administrator. - Verwendung von sudoers: Meiner Ansicht nach ist die sicherste Methode, einen neuen Benutzer mit grundlegenden Berechtigungen anzulegen und der sudoers-Datei eine Zeile hinzuzufügen, die diesem Benutzer erlaubt, den benötigten Befehl ohne Passworteingabe auszuführen – und zwar NUR DIESEN Befehl. Genaue Informationen zum Bearbeiten der sudoers-Datei und zur Verwendung von visudo finden Sie in der Dokumentation Ihrer Distribution. Der Screenshot unten zeigt, was der Datei hinzugefügt werden muss.
wireguard-monitoring-userist der Benutzer Ihrer Wahl. Der Rest muss genau so sein, wie Sie es sehen.
Diese Einstellung ermöglicht Folgendes:#iobroker.wireguard adapter wireguard-monitoring-user ALL=NOPASSWD:/usr/bin/wg show all dump wireguard-monitoring-user ALL=NOPASSWD:/usr/bin/wg set * peer * remove wireguard-monitoring-user ALL=NOPASSWD:/usr/bin/wg set * peer * allowed-ips * wireguard-monitoring-user ALL=NOPASSWD:/usr/bin/wg syncconf * *<wireguard-monitoring-user>AnALLHosts, um die Ausführung durchzuführenwg show all dumpBefehl aus dem Verzeichnis/usr/bin/(muss möglicherweise in Ihrer Distribution angepasst werden) ohne Passwort erforderlich (NOPASSWD).
bekannte Probleme
- keiner
sentry.io
Dieser Adapter nutzt sentry.io, um Details zu Abstürzen zu erfassen und diese automatisch an den Autor zu melden. Hierfür wird das Plugin ioBroker.sentry verwendet. Auf der Homepage des Plugins finden Sie detaillierte Informationen zu dessen Funktionsweise, den erfassten Daten und wie Sie die Erfassung deaktivieren können, falls Sie den Autor nicht mit Ihren Absturzinformationen unterstützen möchten.
Haftungsausschluss
Dieses Projekt steht in keinerlei Verbindung zu WireGuard. Der Name WireGuard und das WireGuard-Logo werden lediglich zur Kennzeichnung dieses Projekts verwendet und sind Eigentum ihrer jeweiligen Inhaber. Sie sind nicht Bestandteil dieses Projekts.
Copyright
Copyright © 2025 grizzelbee open.source@hingsen.de
Changelog
1.8.0 (2025-02-15)
- (grizzelbee) Upd: #137minor fixes for adapter checker
- (grizzelbee) Upd: Dependencies got updated
- (grizzelbee) Upd: Removed snyk
- (grizzelbee) Fix: #138 moved to eslint 9 and fixed new lint errors
- (grizzelbee) Fix: #119 Fixed log warning "invalid JsonConfig"
1.7.0 (2024-10-01)
- (grizzelbee) Upd: Dependencies got updated
- (grizzelbee) Fix: #120 Fixed some issues mentioned by adapter-checker
1.6.4 (2024-05-08)
- (grizzelbee) Upd: Dependencies got updated
1.6.3 (2024-04-16)
- (grizzelbee) Upd: Dependencies got updated
- (grizzelbee) Fix: Removed annoying warning when setting null or undefined values (introduced in v1.6.2)
- (grizzelbee) Upd: Requiring at least admin v6.13.16
1.6.2 (2024-03-26)
- (grizzelbee) Upd: Dependencies got updated
- (grizzelbee) Fix: fixed sentry issues WIREGUARD-2B & WIREGUARD-2C
- (grizzelbee) Upd: Adapter requires at least node 18.x
1.6.1 (2023-09-14)
- (mcm1957) Fix: #90 adapter-core 3.x.x is known to fail during installation at node 14 as npm 6 fails to install peerDependencies. So this adapter requires node 16 or newer
- (grizzelbee) Upd: Dependencies got updated
- (grizzelbee) Upd: removed some old news entries in io-package file
1.5.11 (2023-08-30)
- (grizzelbee) Fix: #88 Avoid warning: Cannot read properties of undefined (reading 'at') when user- or devicename is empty
1.5.10 (2023-08-17)
- (grizzelbee) Fix: Adapter doesn't crash anymore when user or device name is missing in config.
1.5.9 (2023-08-12)
- (grizzelbee) Fix: First device of any user was missing in users viewing
- (grizzelbee) New: Added an icon to peers, users, peer and user
1.5.8 (2023-08-11)
- (grizzelbee) Fix: Interface is now correctly set to offline if host is not reachable.
1.5.7 (2023-08-10)
- (grizzelbee) Fix: Added missing icon file
- (grizzelbee) Fix: Some fixes to make iobroker.adapterchecker happy
- (grizzelbee) Fix: Another icon fix
1.5.2 (2023-08-09)
- (grizzelbee) Fix: Adapter does not crash anymore when host isn't reachable
- (grizzelbee) Fix: Added .releaseconfig file
- (grizzelbee) Fix: Added icon to interface-device
- (grizzelbee) Fix: Some fixes to make iobroker.adapterchecker happy
1.5.1 (2023-08-08)
- (grizzelbee) Fix: #65 No names in object tree
- (grizzelbee) Fix: #64 Online state of interface isn't set correctly if more than one server is queried
- (grizzelbee) Upd: Dependencies got updated
1.5.0 (2023-06-27)
- (grizzelbee) Deprecated: The current peer name/description will be dropped in one of the next versions. So please move over to Username/Device config.
- (grizzelbee) New: Splitted Peer names in config in user and device names; So that you are able to group devices by user
- (grizzelbee) New: Some new data fields: connectedPeers, connectedPeersCount, connectedUsers, connectedUsersCount and connection states per user
- (grizzelbee) Fix: #61 Fixed continuous recreation of objects
- (grizzelbee) Upd: Dependencies got updated
- (grizzelbee) Upd: Dropped support for NodeJS 12
- (grizzelbee) Upd: Added support for NodeJS 18
1.4.1 (2022-10-26)
- (grizzelbee) New: Showing number of currently connected peers for each interface
1.4.0 (2022-09-09)
- (grizzelbee) New: #37 Added config options for port and docker container name
- (grizzelbee) Chg: Moved over to new jsonConfig Admin UI
1.3.2 (2022-09-07)
- (grizzelbee) New: #38 Fixed "Adapter doesn't come online" bug caused by pseudo-tty settings
1.3.1 (2022-06-26)
- (grizzelbee) New: #33 Added button to resume a single peer
1.3.0 (2022-06-25)
- (grizzelbee) New: #33 Added buttons to suspend single and restore all peers of an interface
- (grizzelbee) Chg: Changed polling log entry from info to debug
- (grizzelbee) Upd: dependencies got updated
1.2.1 (2022-04-24)
- (grizzelbee) Fixed: #20 Fixed a bug in tty linking which prevented docker option to work.
1.2.0 (2022-04-21)
- (grizzelbee) New: #20 Added support for WireGuard inside a docker container
1.1.3 (2022-03-31)
- (grizzelbee) New: Fixed sentry error WIREGUARD-1
- (grizzelbee) New: Fixed sentry error WIREGUARD-H
- (grizzelbee) New: Fixed sentry error WIREGUARD-C
- (grizzelbee) Upd: dependencies got updated
1.1.2 (2022-03-17)
- (grizzelbee) New: Added donate button
- (grizzelbee) Upd: dependency update
1.1.1 (2022-03-13)
- (grizzelbee) Upd: Changed titleLang from WireGuard to WireGuard monitoring
- (grizzelbee) Upd: dependency update
1.1.0 (2022-03-06)
- (grizzelbee) New: Added support for sudo when using a proper sudoers rule
- (grizzelbee) Upd: Documentation update regarding security
- (grizzelbee) Upd: dependency update
1.0.0 (2022-02-25)
- (grizzelbee) New: Added individual online state indicator for each interface
- (grizzelbee) fix: Improved some data roles
- (grizzelbee) fix: Improved documentation
v0.9.5 (2022-02-22)
- (grizzelbee) New: dropped use of wg-json script - not needed anymore
- (grizzelbee) New: making internal use of wg show all dump command and self parsing the result
- (grizzelbee) New: Added windows support by using the wg show all command
- (grizzelbee) Upd: moved dependency admin to globalDependency as requested during adapter review
v0.9.2 (2022-02-20)
- (grizzelbee) Fix: removed unnecessary secret from index_m.html file
- (grizzelbee) Fix: Using info.connection of adapter to indicate that at least one interface is online.
- (grizzelbee) Fix: Updated adapter icon
v0.9.1 (2022-02-19)
- (grizzelbee) New: Improved optical quality of admin page - no technical improvements
v0.9.0 (2022-02-18)
- (grizzelbee) New: Improved documentation
- (grizzelbee) New: Username and password for WireGuard hosts are getting encrypted now
v0.8.0 (2022-02-17)
- (grizzelbee) New: admin extended with second page
- (grizzelbee) New: data file is getting parsed
- (grizzelbee) New: data tree is getting populated
- (grizzelbee) New: entire basic functionality is implemented
- (grizzelbee) New: added plugin sentry
v0.2.0 (2022-02-16)
- (grizzelbee) New: admin is working as expected
- (grizzelbee) New: first steps in backend
v0.1.0 (2022-02-14)
- (grizzelbee) working on admin
v0.0.1
- (grizzelbee) initial release
License
MIT License
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
