WireGuard VPN: Grundlagen

WireGuard ist eine freie Software zum Aufbau eines virtuellen privaten Netzwerks (VPN). Mithilfe eines VPN öffnet man einen virtuellen Tunnel zwischen zwei Maschinen im Internet. Die Netzwerkverbindung läuft durch den Tunnel, so als wären die Maschinen direkt durch ein Netzwerkkabel verbunden. VPNs werden oft von großen Organisationen wie Forschungseinrichtungen, Ministerien und Unternehmen genutzt. So lässt sich der Zugriff auf bestimmte Ressourcen im Netzwerk regulieren und der Datenstrom der Nutzer nach außen hin abschotten.

Mit IPsec, OpenVPN, L2TP und PPTP existiert bereits eine Reihe an ausgereiften VPN-Protokollstapeln. Anbieter von VPN-Services bauen auf diesen Protokollen auf, um ihren Nutzern die Möglichkeit zu geben, den eigenen Internetverkehr durch das VPN zu leiten. Immer mehr VPN-Anbieter integrieren WireGuard aufgrund der Vorzüge des Protokolls in ihre Anwendungen.

Was ist WireGuard?

WireGuard ist eine Anwendung und ein Netzwerkprotokoll für den Aufbau verschlüsselter VPN-Tunnels. Die Software ist unter der GPLv2-Lizenz als freie Software lizensiert und plattformübergreifend verfügbar. WireGuard ist in den Sprachen „C“ und „Go“ geschrieben und läuft unter Windows, macOS, BSD, iOS und Android.

Mit WireGuard baut man einen verschlüsselten Tunnel auf. Datenströme werden durch den Tunnel geleitet und sind somit vor dem Zugriff Unbefugter geschützt. Neben dem Fokus auf starke Verschlüsselung bietet WireGuard Optimierungen für mobile Systeme und „Internet of Things (IoT)“-Geräte.

Seit dem Frühjahr 2020 ist WireGuard direkt in den Linux-Kernel integriert. Da Linux als Standard-Betriebssystem auf Milliarden von vernetzten Geräten weltweit läuft, kann WireGuard so gut wie überall eingesetzt werden. Der breiten Verwendung kommt ebenfalls zugute, dass die Software relativ schlank ist und nur geringe Anforderungen an die Hardware stellt.

Was sind die Features von WireGuard?

Das zentrale Feature des WireGuard-Protokolls ist das sogenannte Cryptokey Routing. Dabei werden dem öffentlichen Schlüssel eines Verbindungspartners die innerhalb eines Tunnels erlaubten IP-Adressbereiche zugeordnet. Eingehende Pakete eines Verbindungspartners werden mithilfe des öffentlichen Schlüssels entschlüsselt. Ein eingehendes Paket wird nach der Entschlüsselung nur dann zugestellt, wenn es von einer zum Schlüssel korrespondierenden IP-Adresse stammt. Andernfalls wird das Paket verworfen.

Anders als die etablierten VPN-Protokollstapel IPsec und OpenVPN handelt es sich bei WireGuard nicht um ein agiles Protokoll: Anstatt während der Handshake-Phase beim Verbindungsaufbau die zu nutzenden kryptografischen Grundlagen einzeln auszuhandeln, beschränkt sich WireGuard auf wenige Optionen. Die eingesetzten kryptografischen Funktionen werden zusammengefasst versioniert. Sollte eine der kryptografischen Grundlagen in der Zukunft kompromittiert werden, wird eine neue, sichere Version des WireGuard Protokolls veröffentlicht. Setzen beide Kommunikationspartner die neue Version ein, wird der Datenstrom abgesichert.

Zum Zeitpunkt der Artikelerstellung kommen die folgenden Protokolle und Verschlüsselungstechnologien zum Einsatz:

  • Noise protocol framework
  • Curve25519
  • ChaCha20
  • Poly1305
  • BLAKE2
  • SipHash24
  • HKDF

Was sind die Vorteile von WireGuard?

Als einer der größten Vorteile von WireGuard gilt die aufgeräumte Codebasis. Der Umfang des gesamten Kernel-Codes beläuft sich auf nur ca. 4.000 Code-Zeilen. Zum Vergleich: die Code-Größe einer Implementation von OpenVPN oder IPsec liegt bei ca. 100.00 bis 600.000 Zeilen. Eine kleinere Codebasis ist inhärent sicherer, da sich Bugs so leichter finden lassen und die Angriffsfläche minimiert wird.

Selbst der für seinen bissigen Schreibstil und gelegentliche Wutausbrüche bekannte Linux-Erfinder Linus Torvalds reagierte nach Inspektion der WireGuard-Codebasis mit ausdrücklichem Lob:

Zitat

„Maybe the code isn’t perfect, but I’ve skimmed it, and compared to the horrors that are OpenVPN and IPSec, it’s a work of art.“ – Quelle: netdev - Re: [GIT] Networking

Übersetzung: „Der Code ist vielleicht nicht perfekt, aber ich habe ihn überflogen, und verglichen mit dem furchtbaren Code von OpenVPN und IPSec handelt es sich um ein Kunstwerk.“

Neben der erhöhten Sicherheit bedingt die geringere Komplexität der Software auch eine höhere Performanz. WireGuard liefert in Benchmarks eine höhere Übertragungsgeschwindigkeit und niedrigere Latenz als konkurrierende Protokolle. Ferner ist WireGuard kein „schwatzhaftes“ Protokoll („it is not a chatty protocol“): Solange der Nutzer keine Daten durch den Tunnel schickt, ruht WireGuard. So wird weniger Strom verbraucht, was der Akkulaufzeit zugutekommt.

Die Energieeffizienz ist besonders wichtig für mobile Geräte, und auf diesem Gebiet ist WireGuard in mehrfacher Hinsicht gut aufgestellt. So unterstützt das Protokoll Roaming, also den automatischen Wechsel von WLAN zum Handynetz und vice versa. Sollte es dennoch zu einem Verbindungsabbruch kommen, ist der Wiederaufbau der Verbindung mit WireGuard für gewöhnlich schneller als mit konkurrierenden Protokollen.

Wie funktioniert WireGuard?

Vom Prinzip her handelt es sich bei WireGuard um ein dezentrales Peer-to-Peer-VPN-Protokoll. Anstatt zwingend einen Server zu benötigen, lässt sich mit WireGuard direkt ein Tunnel zwischen zwei Maschinen öffnen. Ein WireGuard-„Server“ ist einfach eine Maschine, auf der Verbindungskonfigurationen für mehrere Peers hinterlegt sind.

Der Verbindungsaufbau mit WireGuard funktioniert ähnlich wie bei Secure Shell (SSH): Die Nutzer („Peers“) erzeugen mit WireGuard öffentliche Schlüssel und tauschen diese untereinander aus. Mithilfe der Schlüssel authentifizieren sich die Peers gegenseitig und verschlüsseln die Datenpakete für das jeweilige Gegenüber.

Neben der Erzeugung der kryptografischen Schlüssel müssen auf jedem Peer verschiedene Netzwerkeinstellungen vorgenommen werden – siehe dazu unsere Anleitung zur Einrichtung von WireGuard weiter unten. Zum Datenaustausch werden auf den Peers erlaubte IP-Adressbereiche mit dem kryptografischen Schlüssel verknüpft. Nicht den erlaubten Adressbereichen entstammende Pakete werden verworfen. Der Datenversand mit WireGuard läuft über das User Datagram Protocol (UDP).

Auf der Maschine eines Peers wird die Konfiguration mithilfe des WireGuard-Kommandozeilen-Tools und weiterer, standardmäßig auf Linux vorhandener Bordmittel vorgenommen. Obwohl die Konfiguration der Software als relativ einfach gilt, dient WireGuard nur als Grundlage; eine auf dem Protokoll aufbauende App kann dem Nutzer bei den einzelnen Schritten der Konfiguration und des Verbindungsaufbaus unter die Arme greifen. Nutzer von kommerziellen VPN-Diensten kommen so auch ohne Kommandozeile in den Genuss des modernen VPN-Protokolls.

Erste Schritte mit WireGuard

Prinzipiell lässt sich WireGuard auf einem Linux-System mit geringem Aufwand installieren und konfigurieren. So können Sie sich z. B. einen eigenen VPN-Server mit Raspberry Pi einrichten. Jedoch unterscheidet sich das genaue Vorgehen je nach Einsatzzweck, eingesetztem Betriebssystem und bestehender Netzwerkumgebung. Wir können hier daher nur das ungefähre Vorgehen skizzieren. Bitte nutzen Sie unsere Anleitungen nur für Tests.

Tipp

Installieren Sie WireGuard auf dem IONOS vServer und schaffen Sie sich damit ein eigenes VPN.

WireGuard auf dem eigenen System installieren

Führen Sie die folgenden Befehle auf der Kommandozeile aus, um WireGuard auf Ihrem Linux-System zu installieren:

# für Ubuntu ab Version 19.10
sudo apt install wireguard
# für Ubuntu-Version unterhalb 19.10
sudo add-apt-repository ppa:wireguard/wireguard
sudo apt-get update
sudo apt-get install wireguard
Hinweis

Hier wird die Installation unter Ubuntu-Linux gezeigt. Auf anderen Systemen müssen Sie den Code ggf. anpassen.

WireGuard-Schlüssel erzeugen

Ähnlich wie bei SSH und PGP bilden kryptografische Schlüssel die Grundlage für den Einsatz von WireGuard. Wie üblich gibt es einen privaten Schlüssel, der unbedingt geheim zu halten ist. Ferner wird aus dem privaten Schlüssel ein öffentlicher Schlüssel erzeugt und mit Peers geteilt. Damit können die Peers Daten verschlüsseln und versenden. Schließlich nutzen Sie Ihren privaten Schlüssel, um die verschlüsselten Daten zu entschlüsseln.

Führen Sie die folgenden Befehle auf der Kommandozeile aus, um einen privaten und öffentlichen WireGuard-Schlüssel zu erzeugen:

# Verzeichnis für Schlüssel anlegen
# ACHTUNG: nur für Testzwecke, da nicht abgesichert!
mkdir ~/.wireguard/ && cd ~/.wireguard/
# Dateirechte setzen
umask 077
# privaten Schlüssel erzeugen
wg genkey > privatekey
# öffentlichen Schlüssel aus dem privaten Schlüssel erzeugen
wg pubkey < privatekey > publickey

Netzwerkeinstellungen für WireGuard konfigurieren

Bei der Installation von WireGuard und der Schlüssel-Erzeugung handelt es sich um grundlegende Vorbereitungen, die auf jedem System mehr oder weniger gleich ablaufen. Demgegenüber ist die Konfiguration von WireGuard abhängig von den existierenden lokalen Netzwerk-Einstellungen. Wir können hier daher nur das generelle Schema skizzieren und empfehlen Ihnen für eine tiefergehende Betrachtung die Quick-Start-Anleitung des WireGuard-Projekts.

Das generelle Vorgehen für die Einrichtung einer Netzwerk-Verbindung mit WireGuard folgt diesem Schema:

# WireGuard Netzwerk-Interface hinzufügen
ip link add dev wg0 type wireguard
# IP-Adressen konfigurieren
ip address add dev wg0 192.168.2.1 peer 192.168.2.2
# Netzwerk-Interface unter Nutzung der Konfigurationsdatei konfigurieren
wg setconf wg0 myconfig.conf
# Netzwerk-Interface aktivieren
ip link set up dev wg0
Fazit

WireGuard ist ein moderner und schlanker Anwärter auf die Position der in die Jahre gekommenen VPN-Protokollstapel IPsec und OpenVPN und könnte diese in absehbarer Zeit weitgehend ersetzen.