WireGuard ist ein Peer-2-Peer VPN, das durchgehend moderne Kryptografie für Verschlüsselung und Authentifizierung verwendet. Im Unterschied zu OpenVPN und IPsec werden Client-Server Architekturen nicht direkt unterstützt, können aber auch (irgendwie) realisiert werden.
Jeder WireGuard Peer stellt einen IP-Adressbereich zur Verfügung, der transparent mit den Netzen der anderen Peers über eine unsichere Internetverbindung gekoppelt wird.
Einige VPN-Provider vergewaltigen das Konzept und bauen damit individuelle Client-Server ähnliche Infrastrukturen, indem die Client Peers nur die eigene IP-Adresse (ein "/32" Netz) verwenden und auf der Seite des VPN-Servers das gesamte Internet bereitgestellt wird.
Die Wireguard Software kan man mit der bevorzugten Paketverwaltung installieren:
Ubuntu: > sudo apt install wireguardWenn man die Fritz!Box oder Speedport Router der Telekom als VPN Endpunkt nutzt, erhält man bei der Konfiguration der Nutzer im Router eine Wireguard Konfigurationsdatei für jeden Nutzer.
Man könnte darüber nachdenken, ob man diese VPN Verbindung nur für den Zugriff auf Ressourcen im heimischen Netzwerk nutzen möchte (Roadwarrior Szenario) oder den gesamten Datenverkehr über den heimischen Router ins Internet schicken, um die Reisetätigkeiten zu verbergen. Die vom Router generierte Konfigurationsdatei kann man dafür wie folgt anpassen.
Standardmäßig wird der gesamte Datenverkehr über den heimischen Router geleitet:
AllowedIPs = 0.0.0.0/0,::/0Wenn man nur Zugriff auf heimische Ressourcen via VPN haben will, trägt man das private Netzwerk dort ein. ("xxx" ist durch konkrete Konfiguration im Heimnetz zu ersetzen.)
AllowedIPs = 192.168.xxx.0/24Die vorbereitete Konfigurationsdatei kann man dann im Networkmanager importieren:
> sudo nmcli con import type wireguard file <DATEI>Die importierte WireGuard VPN Verbindung sofort automatisch aktiviert. Das kann man in der Konfiguration im NetworkManager nachträglich deaktivieren und außerdem könnte man der VPN Verbindung einen sinnvollen Namen geben:
Zukünftig kann man die WireGuard VPN Verbindung mit einem Klick im NetworkManager Applet aktivieren oder sie auch automatisch bei Verbindung mit einem bestimmten Netzwerk aktivieren.
Viele VPN-Provider haben individuelle Lösungen entwickelt, um WireGuard für ihre Kunden in eine Client-Server ähnliche Infrastruktur zu pressen und WireGuard VPN-Server anbieten zu können.
Einige VPN-Provider (z.B. ProtonVPN) bieten fertige Konfigurationen für WireGuard inklusive der Schlüssel zum Download an. Bei anderen VPN-Providern muss man seinen selbst erstellten öffentlichen Schlüssel auf der Webseite hochladen und sich den Schlüssel für den WireGuard Server sowie die zugeteilte IP-Adresse für den eigenen Peer und den DNS-Servers von der Webseite holen.
Man erstellt sich eine kleine Konfigurationsdatei "wg0.conf" für die Verbindung zum WireGuard Server. Wenn man zwischen mehreren VPN Servern wechseln möchte, muss man für jeden WireGuard Server eine eigene Konfigurationsdatei "wgX" erstellen. Ein Beispiel:
[Interface]Mit dieser Beispielkonfiguration wird der gesamt Datenverkehr, der den Rechner verlässt, zum VPN Server geschickt. Mit der Aktivierung des VPNs hat man keinen Zugriff mehr auf Resourcen im lokalen Heimnetz (Netzwerkdrucker, Router, private Nextcloud o.ä.). Wenn man nur den Datenverkehr ins Internet via VPN Server routen möchte und gleichzeitig weiterhin Zugriff auf Ressourcen im heimischen Netz haben möchte, muss man folgenden Wert anpassen:
AllowedIPs = ::/0, 1.0.0.0/8, 2.0.0.0/8, 3.0.0.0/8, 4.0.0.0/6, 8.0.0.0/7, 11.0.0.0/8, 12.0.0.0/6, 16.0.0.0/4, 32.0.0.0/3, 64.0.0.0/2, 128.0.0.0/3, 160.0.0.0/5, 168.0.0.0/6, 172.0.0.0/12, 172.32.0.0/11, 172.64.0.0/10, 172.128.0.0/9, 173.0.0.0/8, 174.0.0.0/7, 176.0.0.0/4, 192.0.0.0/9, 192.128.0.0/11, 192.160.0.0/13, 192.169.0.0/16, 192.170.0.0/15, 192.172.0.0/14, 192.176.0.0/12, 192.192.0.0/10, 193.0.0.0/8, 194.0.0.0/7, 196.0.0.0/6, 200.0.0.0/5, 208.0.0.0/4, 10.13.13.1/32Die Konfigurationsdatei(en) kann man mit einem Kommando im NetworkManager importieren:
> sudo nmcli con import type wireguard file wg0.confDanach kann man die Eigenschaften der VPN Verbindung etwas nachbearbeiten (s.o.)
Wenn man den heimischen Router nicht als Wirguard Server verwenden möchte oder der Router dieses Feature nicht bietet, könnte man einen kleinen Linux Server als VPN Gateway aufsetzen.
Die Konfiguration beginnt mit dem Erzeugen der kryptografischen Schlüssel. Idealerweise erzeugt jeder WireGuard Peer seine Schlüssel selbst. Dann müssen nur die öffentliche Schlüssel ausgetauscht werden, was auch über einen unsicheren Kanal (E-Mail o.ä.) erfolgen kann.
> sudo suDer am Ende angezeigte öffentliche Schlüssel ist zu kopieren den anderen Peers zur Verfügung zu stellen. Man findet ihn auch in "/etc/wireguard/publickey".
Den privaten Schlüssel aus der Datei "privatekey" braucht man im nächsten Schritt in den eigenen Konfigurationsdateien für die WireGuard Verbindung(en).
Wenn man einen WireGuard Server für den Zugang zum privaten Firmen- oder Heimnetz verwenden möchte, braucht man eine Konfigurationsdatei mit allen Roadwarriors, die als /etc/wireguard/wg0.conf zu speichern ist.
(Die IP-Adressen für das Netzwerk und die Peers sind Beispiele - bitte selbst anpassen an das eigene Netzwerk.)
[Interface]Bei der Firewallkonfiguration des Servers ist darauf zu achten dass Incoming UDP Traffic auf Port 51820 erlaubt ist, damit die Peers eine WireGuard VPN-Verbindung aufbauen können.
Debian: > sudo uwf proto udp allow 51820Den WireGuard VPN-Server startet und stoppt man mit folgenden Kommandos:
> sudo wg-quick up wg0
> sudo wg-quick down wg0
Mit dem Systemd kann man den Start des VPN-Servers beim Booten automatisieren:
> sudo systemctl enable wg-quick@wg0.service
> sudo systemctl daemon-reload
Um den automatischen Start beim Booten wieder zu enfernen sind folgende Komandos nötig:
> sudo systemctl stop wg-quick@wg0
> sudo systemctl disable wg-quick@wg0.service
> sudo rm -i /etc/systemd/system/wg-quick@wg0*
> sudo systemctl daemon-reload
> sudo syytemctl reset-failed
Hinweis für QubesOS Linux: Die Einstellungen werden nicht in der Net-VM vorgenommen sondern in dem Template, das für die Net-VM verwendet wird!
Um zu verhindern, dass die WireGuard Schlüssel in die Arbeits-VMs exponiert werden und die Arbeits-VMs eine WireGuard Verbindung zum VPN-Server aufbauen, die die QubesOS Firewall umgeht, muss man für die Net-VM eine eigene Template-VM erstellen.