Wireguard
Was ist Wireguard?
Das Team um Wireguard beschreibt ihre eigene Lösung als moderne und leicht verständliche VPN Lösung. Im Vergleich zu OpenVPN oder IPSec ist es performanter, schlanker und schneller. Zusätzlich beschränkt sich das Projekt auf wenige, jedoch zeitgemäße Kryptographiemethoden.
Vor- und Nachteile
Vorteile
Wireguard wurde für Linux entwickelt, bietet jedoch mittlerweile Clients für alle gängigen Betriebssysteme (Windows, Linux, macOS). Ein weiterer Pluspunkt ist die leichte Einrichtung. Auch ein Wechsel vom Heimnetzwerk (WLAN/LAN) zu mobilem Internet verläuft ohne größere Unterbrechungen im Betrieb. Im direkten Vergleich zu Konkurrenten wie OpenVPN sticht die höhere Durchsatzrate und erheblich geringere Codebasis ins Auge.
Nachteile
Jeder Client im Wireguard Netzwerk benötigt eine statische IP Adresse, welche innerhalb der Konfigurationsdatei festgeschrieben ist.
Im Sinne des Datenschutzes sollte zudem erwähnt werden, dass Wireguard nicht betrieben werden kann, ohne das Logdateien anfallen.
Authentifizierung und Funktionsweise
Authentifizierung
Die Authentifizierung von Wireguard ist umfangreicher als bei normalen VPN Lösungen, daher vorab ein Versuch die Funktionsweise zu beschreiben.
Wireguard benutzt ein sogenanntes »Crypto Key Routing«. Hierbei werden die Public-Keys der einzelnen Peers mit einer ebenso vorliegenden Liste von IP-Adressen abgeglichen. Bei einer Übereinstimmung des Public-Keys in Verbindung mit der passenden hinterlegten IP-Adresse, werden die Pakete angenommen und über den Tunnel geleitet.
Jeder Peer (Client) besitzt ein eigenes Schlüsselpaar bestehend aus Public/Private Key. Diese Schlüssel werden zur Authentifizierung benutzt. Die Funktionsweise ist hierbei mit der Anmeldung mittels Public-Key Verfahren bei SSH zu vergleichen.
Der zweite Part sind die Erlaubten IPs (Allowed IPs), welche in Empfangsrichtung als Access Control List (ACL) fungieren und parallel zum Crypto Key Routing die Authentifizierung übernehmen. In Versandrichtung stellen die IP Adressen eine Art Routing Tabelle dar, da jeder Peer hinterlegt ist.
Verschlüsselung
Kommt ein Paket am Server an, durchsucht dieser die Liste aller Peers nach dem Empfänger. Wird die IP-Adresse gefunden, verschlüsselt der Server das eingehende Paket mit dem Public-Key des zu empfangenden Peers. Andernfalls verwirft der Server das anfragendende Paket.
Entschlüsselung
Die Entschlüsselung am Client geschieht nach dem Protokoll des Crypto Key Routings: Zuerst prüft der Peer, ob der Absender ihm laut Acces Control List Pakete senden darf. Ist dies bestätigt, entschlüsselt der Client das erhaltene Paket mit seinem eigenen Privaten Schlüssel. Andernfalls wird das Paket verworfen.
Installation
Um den Standard Installationsweg zu verkürzen werde ich ein Github Script nutzen. Dieses kann als Vorlage für eigene Installationen herangezogen werden, reicht aber im Normalfall in der Standardversion aus:
Github Repository: »https://github.com/Nyr/wireguard-install«
Wie üblich wird das Script zuerst heruntergeladen:
|
|
Im Anschluss wird das Skript ausgeführt:
|
|
Nach dem Start des Installers erscheint folgender Dialog, der mit den nötigen Informationen versorgt wird.
Der Port kann beliebig im High-Ports Bereich gewählt werden, ich bleibe im Artikel beim Default Port 51820.
|
|
Nach Betätigen der Enter Taste startet die Initiale Installation. Wenn der Vorgang abgeschlossen ist wird, ein QR-Code angezeigt, welcher bei der Verwendung von mobilen Geräten eingescannt werden kann. Andernfalls wird der Speicherpfad der einzelnen User Konfigurationen angezeigt, welche auf die gewünschten Geräte übertragen werden müssen.
Werden später weitere Clients benötigt, oder sollen bestehende Clients entfernt werden, kann das Skript erneut ausgeführt werden und mit Auswahl der entsprechenden Nummer die richtige Funktion angesprochen werden.
|
|
Verwendung innerhalb von LXC Containern
Bei der Verwendung innerhalb von LXC Containern müssen zum Teil Änderungen vorgenommen werden. Im Falle von Proxmox müssen zwei Zeilen innerhalb der Konfiguration des (abgeschaltenen!) Containers angepasst werden:
|
|
Im Beispiel wird der Adapter des Containers mit der ID ›123‹ bearbeitet.
|
|
Anschließend muss die Berechtigung für den TUN Adapter noch gesetzt werden, dass Wireguard den eigenen Traffic durch den Adapter schicken kann.
|
|
Ob das ganze erfolgreich verlaufen ist lässt sich anschließend mit dem Folgebefehl feststellen:
|
|
Danach kann der LXC Container erneut gestartet werden.