Wireguard Manager 1toN

Di, 8. Februar 2022, Hanser

Kennt ihr das? Ihr seid von Linux begeistert und bringt nach und nach immer mehr Menschen dazu, das auch zu nutzen. So nutzen mittlerweile Familie, Freunde und der Verein von euch aufgesetzte Systeme. Da aber du mehr die/der Haeckse/r bist als der Systembesitzer selbst, schaust du da noch immer nach dem Rechten.
Mir geht es so – und da ich nicht wegen jeder Support-Anfrage gleich einen Hausbesuch machen will, habe ich mir ein VPN-Netz aufgebaut und meinen public key für SSH auf den entsprechenden Rechnern zu den authorized_keys hinzugefügt. Durch dieses Netz können natürlich auch andere Dienste (VNC/samba/…) genutzt werden.

Meine Netzwerk-Topologie sieht wie folgt aus:

Ein Virtual Private Server (VPS) – gemietet bei einem der vielen Anbieter (zum Beispiel: Hetzner, netcup, …) – stellt den zentralen Knoten dar, wohin sich alle anderen Clients über die öffentliche IP verbinden. Über diesen Knoten können sich die Clients untereinander via VPN-IP kontaktieren.

So kann ich z.B. mit meinem Laptop auf sowohl den VPS, als auch alle Clients von überall aus zugreifen und diese warten. Ein weiterer grosser Vorteil ist, dass aufseiten des Client-Internets keine eingehenden Port-Forwards notwendig sind, weil der Client selbst nur 'nach draussen telefoniert'.

Wireguard ist bei mir das Mittel der Wahl für die VPN-Tunnel und es gibt sehr viele Tutorials (Link zu MetaGer), wie die einzurichten sind. Auch auf GNU/Linux.ch wurde schon öfter über Wireguard berichtet.
Was für eine einfache Peer-to-Peer Verbindung nicht schwierig ist händisch zu konfigurieren, wird bei einer zweistelligen zu verwaltenden PC-Anzahl jedoch sehr unübersichtlich, weshalb ich mir für genau diesen Fall ein kleines Tool geschrieben habe.

Grössere Lösungen wie z.B. headscale können zwar für diesen und viele weitere Zwecke verwendet werden, sind jedoch auch komplexer zu bedienen und den Grossteil derer Funktionalität benötige ich schlicht nicht.

Wireguard Manager 1toN

Der wgman1tonWireGuardMANager1TON – ist ein kleines Python-Paket mit einem TUI (Text-based User Interface), das dazu gedacht ist, auf einem Verwaltungs-PC verwendet zu werden – also nicht zwangsläufig auf dem VPS läuft.

Es hat diese Features:

  • Einfache Konfiguration der Basisparameter, so zum Beispiel:
    • der zu verwendende Wireguard-Port
    • die Wireguard-interne IP-Adresse und Netzmaske
    • der VPS hostname (extern erreichbarer Domainname – ich empfehle immer einen Domainnamen zu verwenden, für den Fall, dass der Server umgezogen wird und sich die IP ändert. Zur Not kann eine statische Adresse in einem (kostenlosen) dynDNS-Dienst eingetragen werden)
  • Einfaches Hinzufügen und Entfernen von Clients
  • Anzeige einer Client-Konfiguration als QR-Code
  • Die Basiskonfiguration und Schlüssel werden in einer SQLite-Datei persistent gespeichert
  • Einfacher Export aller Konfigurationen als conf-file bzw. QR-Code-png

Es wird nur Traffic durch die Tunnel geroutet, der für einen anderen Client aus dem VPN-Netzwerk bestimmt ist.

Installation

Sowohl auf dem Verwaltungs-PC, als auch auf allen Clients und dem VPS muss Wireguard installiert sein. Sofern in der Distro direkt vorhanden, heisst das notwendige Paket meist wireguard-tools.

Verwaltungs-PC

Auf dem Verwaltungs-PC muss Python installiert sein. Der Manager selbst kann mittels pip install wgman1ton installiert werden. Dieser Schritt ist nur hier notwendig und nicht auf jedem Client.

VPS

Um die direkte Verbindung zwischen den Clients untereinander zu erlauben, muss auf dem VPS IPv4-forwarding aktiviert werden (Link zu MetaGer).

Benutzung

Der Manager wird mittels wgman1ton aus einem Terminal heraus gestartet. Er speichert die Konfiguration in wgman1ton.db im aktuellen Verzeichnis. Die Navigation durch die Menüs sollte selbsterklärend sein – falls nicht, freue ich mich über ein neues issue. Die IP-Adressen neu angelegter Clients werden zufällig (aber persistent) über die gesamte konfigurierte IP-Range verteilt.

$ wgman1ton
:: Select an option 
   1 edit general settings
   2 add node
   3 remove node
   4 display qr-code for node
   5 export all configs
   6 exit
> █

Nach einem Aufruf von export all configs, liegen die Konfigurationsdateien im lokalen Verzeichnis wgman1ton_configs und müssen nur noch an die entsprechenden Rechner ausgeliefert werden – über einen möglichst sicheren Kanal ;)

Meist konfiguriere ich Wireguard auf den Clients derart, dass der Dienst direkt beim Bootvorgang aktiviert wird. Ein bedarfsgesteuerter Start mittels wg-quick oder gar grafisch als Plugin für den Netzwerk-Manager ist auch denkbar – für Letzteres habe ich Installationspakete gesehen, sie jedoch nie selbst eingesetzt.

A word of caution

  • Sowohl die Speicherung der Datenbank, als auch die der exportierten Schlüssel erfolgt unverschlüsselt.
  • Dieser Artikel umfasst lediglich die Funktionalität des Managers. Etwaige Firewall-Regeln, die editiert werden müssen, sind nicht Teil des Artikels.
  • In dieser Netzwerk-Konfiguration können sich alle Clients und der VPS untereinander kontaktieren und je nachdem als wie demilitarisiert man diese Zone ansieht, sollten diese sich auch gegenseitig vertrauen. Im Zweifel lieber z.B. ein weiteres Interface mit einem getrennten Subnet verwenden.

In eigener Sache

Deine Meinung und etwaige Verbesserungsvorschläge zur Software interessieren mich sehr.
Zu erreichen bin ich am besten über Mastodon.