WireGuard ist ein modernes Virtual Private Network (VPN)-Protokoll, das sichere, ver­schlüs­sel­te Ver­bin­dun­gen zwischen Geräten er­mög­licht. Mit einer einfachen Codebasis und hoher Leistung hat es sich als leis­tungs­star­ke und res­sour­cen­scho­nen­de Al­ter­na­ti­ve zu älteren VPN-Pro­to­kol­len wie IPsec und OpenVPN etabliert. In diesem Artikel erfahren Sie, was WireGuard aus­zeich­net, wie es funk­tio­niert und wie Sie die VPN-Lösung auf dem eigenen System in­stal­lie­ren.

Private Cloud powered by VMware
Cloud? Aber sicher!
  • Jederzeit voll­stän­di­ge Da­ten­ho­heit sowie Da­ten­kon­trol­le
  • Im Einklang mit allen ge­setz­li­chen Re­ge­lun­gen in Deutsch­land
  • Ohne Vendor Lock-in für höchste Fle­xi­bi­li­tät

Was ist WireGuard?

WireGuard ist ein Open-Source-VPN-Protokoll, das für den Aufbau ver­schlüs­sel­ter Tunnel zwischen Geräten genutzt wird. Da­ten­strö­me werden durch den Tunnel geleitet und sind somit vor un­be­fug­tem Zugriff geschützt. Neben dem Fokus auf starke Ver­schlüs­se­lung bietet WireGuard auch Op­ti­mie­run­gen für mobile Systeme und das Internet of Things (IoT). Die Software ist unter der GPLv2-Lizenz als freie Software li­zen­ziert und platt­form­über­grei­fend verfügbar. WireGuard ist in den Sprachen C und Go ge­schrie­ben und läuft unter Windows, macOS, BSD, iOS und Android.

Seit 2020 ist WireGuard direkt in den Linux-Kernel in­te­griert. Da Linux als Standard-Be­triebs­sys­tem auf Mil­li­ar­den von ver­netz­ten Geräten weltweit läuft, kann WireGuard nahezu überall ein­ge­setzt werden. Dank seiner einfachen Kon­fi­gu­ra­ti­on und der geringen Sys­tem­be­las­tung wird WireGuard zunehmend von VPN-Diensten und Un­ter­neh­men genutzt.

Welche Features hat WireGuard?

Ein zentrales Merkmal von WireGuard ist das so­ge­nann­te Cryptokey Routing. Dabei werden dem öf­fent­li­chen Schlüssel eines Ver­bin­dungs­part­ners die innerhalb eines Tunnels erlaubten IP-Adress­be­rei­che zu­ge­ord­net. Ein­ge­hen­de Pakete eines Ver­bin­dungs­part­ners werden mithilfe des öf­fent­li­chen Schlüs­sels ent­schlüs­selt. Ein ein­ge­hen­des Paket wird nach der Ent­schlüs­se­lung nur dann zu­ge­stellt, wenn es von einer zum Schlüssel kor­re­spon­die­ren­den IP-Adresse stammt. An­dern­falls wird das Paket verworfen.

Im Gegensatz zu älteren VPN-Pro­to­kol­len wie IPsec und OpenVPN verwendet WireGuard einen festen Satz moderner kryp­to­gra­fi­scher Primitive ohne Ver­hand­lung. Während bei den eta­blier­ten Pro­to­kol­len die kryp­to­gra­fi­schen Grund­la­gen während des Hand­shakes aus­ge­han­delt werden, setzt WireGuard auf eine feste, ver­sio­nier­te Kom­bi­na­ti­on von Al­go­rith­men. Sollte eine kryp­to­gra­fi­sche Grundlage in Zukunft als unsicher gelten, wird eine neue Version des Pro­to­kolls ver­öf­fent­licht, die dann eine ak­tua­li­sier­te und sichere Al­go­rith­mus­wahl enthält.

Das Protokoll verwendet moderne und hoch­si­che­re Ver­schlüs­se­lungs­al­go­rith­men, darunter:

  • Noise Protocol Framework für die Handshake- und Schlüs­sel­aus­tausch­pro­zes­se
  • Curve25519 für den sicheren Schlüs­sel­aus­tausch
  • ChaCha20 für die sym­me­tri­sche Ver­schlüs­se­lung
  • Poly1305 für Au­then­ti­fi­zie­rung
  • BLAKE2 für eine schnelle kryp­to­gra­fi­sche Hash-Funktion
  • SipHash24 für die Erzeugung von kryp­to­gra­fisch sicheren Hashes
  • HKDF für den sicheren Schlüs­sel­ab­lei­tungs­pro­zess

Was sind die Vorteile von WireGuard?

WireGuard bietet viele Vorteile, die es zu einer be­vor­zug­ten Wahl für moderne VPN-Ver­bin­dun­gen machen. Die wich­tigs­ten Vorteile im Überblick:

  • Schlanke Codebasis: WireGuard hat mit nur ca. 4.000 Code­zei­len eine si­gni­fi­kant kleinere Codebasis im Vergleich zu OpenVPN oder IPsec (ca. 100.000 bis 600.000 Zeilen). Diese Re­du­zie­rung macht das Protokoll sicherer, da Bugs leichter gefunden werden können, und res­sour­cen­scho­nen­der, da weniger Re­chen­leis­tung er­for­der­lich ist.
  • Höhere Per­for­mance: Durch die geringere Kom­ple­xi­tät liefert WireGuard eine höhere Über­tra­gungs­ge­schwin­dig­keit und nied­ri­ge­re Latenz als viele kon­kur­rie­ren­de Pro­to­kol­le. Das macht es ideal für An­wen­dun­gen, die eine schnelle und stabile Ver­bin­dung erfordern, wie z. B. Streaming, Online-Gaming und Video-Con­fe­ren­cing.
  • En­er­gie­ef­fi­zi­enz: WireGuard wird nur dann aktiv, wenn tat­säch­lich Daten über­tra­gen werden. Diese En­er­gie­ein­spa­rung ist ins­be­son­de­re für mobile Geräte von Vorteil, da sie die Ak­ku­lauf­zeit ver­län­gert.
  • Roaming-Un­ter­stüt­zung: WireGuard un­ter­stützt den nahtlosen Wechsel zwischen WLAN und mobilen Netz­wer­ken, ohne dass die Ver­bin­dung verloren geht. Sollte die Ver­bin­dung dennoch abbrechen, erfolgt der Wie­der­auf­bau in der Regel schneller als bei anderen VPN-Pro­to­kol­len.
  • Einfache Kon­fi­gu­ra­ti­on: Im Vergleich zu anderen VPN-Pro­to­kol­len erfordert WireGuard keine manuelle Ein­stel­lung einer Vielzahl kryp­to­gra­fi­scher Optionen. Es verwendet eine fest de­fi­nier­te Kon­fi­gu­ra­ti­on, die sowohl für erfahrene Nutzer als auch für Anfänger zu­gäng­lich ist.

Wie funk­tio­niert WireGuard?

WireGuard ist ein de­zen­tra­les Peer-to-Peer-VPN-Protokoll, das keinen zentralen Server benötigt. Statt­des­sen kann direkt ein Tunnel zwischen zwei Geräten („Peers“) aufgebaut werden. Ein „WireGuard-Server“ ist in diesem Fall einfach ein Gerät, das Kon­fi­gu­ra­ti­ons­da­ten für mehrere Peers enthält.

Der Ver­bin­dungs­auf­bau funk­tio­niert ähnlich wie bei Secure Shell (SSH): Peers ge­ne­rie­ren öf­fent­li­che und private Schlüs­sel­paa­re, tauschen diese aus und verwenden sie zur Au­then­ti­fi­zie­rung und Ver­schlüs­se­lung der über­tra­ge­nen Daten. Die Ver­schlüs­se­lung basiert auf modernen kryp­to­gra­fi­schen Verfahren, die für hohe Si­cher­heit sorgen.

Neben der Er­stel­lung der kryp­to­gra­fi­schen Schlüssel müssen auf den Peers Netzwerk- und Routing-Ein­stel­lun­gen vor­ge­nom­men werden (siehe dazu unsere Anleitung weiter unten). Dies umfasst die Kon­fi­gu­ra­ti­on der erlaubten IP-Adress­be­rei­che, die mit den öf­fent­li­chen Schlüs­seln verknüpft werden. Nur Pakete von diesen IP-Adressen werden ak­zep­tiert.

Der Da­ten­ver­sand läuft über das User Datagram Protocol (UDP), das aufgrund seiner Ge­schwin­dig­keit und Effizienz bevorzugt wird. Es benötigt keine um­fang­rei­che Feh­ler­kor­rek­tur wie das Trans­mis­si­on Control Protocol (TCP), was eine schnel­le­re Über­tra­gung er­mög­licht.

Die Kon­fi­gu­ra­ti­on erfolgt in der Regel über das WireGuard-Kom­man­do­zei­len-Tool und gängige Netz­werk­tools. Für weniger erfahrene Nutzer bieten kom­mer­zi­el­le VPN-Dienste be­nut­zer­freund­li­che Apps zur einfachen Kon­fi­gu­ra­ti­on.

Erste Schritte mit WireGuard

Prin­zi­pi­ell lässt sich WireGuard auf einem Linux-System mit geringem Aufwand in­stal­lie­ren und kon­fi­gu­rie­ren. Auf neueren Ubuntu-Versionen (ab 20.04 LTS) ist WireGuard bereits als Ker­nel­mo­dul in­te­griert, sodass keine zu­sätz­li­che In­stal­la­ti­on von Personal-Package-Archive-(PPA)-Re­po­si­to­ries er­for­der­lich ist. Führen Sie einfach den folgenden Befehl aus:

sudo apt install wireguard
bash

WireGuard auf dem eigenen System in­stal­lie­ren

Die In­stal­la­ti­on von WireGuard auf Ihrem eigenen System ist einfach und kann mit wenigen Befehlen durch­ge­führt werden.

Für Ubuntu 20.04 LTS oder neuer:

WireGuard ist bereits als Ker­nel­mo­dul in­te­griert, sodass keine zu­sätz­li­chen PPA-Re­po­si­to­rys er­for­der­lich sind. Führen Sie einfach den folgenden Befehl aus:

sudo apt update
sudo apt install wireguard
bash

Für ältere Ubuntu-Versionen:

Hier müssen Sie das PPA von WireGuard hin­zu­fü­gen, um die In­stal­la­ti­on vor­zu­neh­men:

sudo add-apt-repository ppa:wireguard/wireguard
sudo apt-get update
sudo apt-get install wireguard
bash

WireGuard-Schlüssel erzeugen

Wie bei vielen anderen modernen VPN-Pro­to­kol­len basiert auch WireGuard auf der Ver­wen­dung von kryp­to­gra­fi­schen Schlüs­seln, um sichere Ver­bin­dun­gen zwischen Peers her­zu­stel­len. Jeder Peer benötigt ein privates und ein öf­fent­li­ches Schlüs­sel­paar. Der private Schlüssel bleibt immer geheim, während der öf­fent­li­che Schlüssel mit anderen Peers geteilt wird.

Führen Sie die folgenden Befehle auf der Kom­man­do­zei­le aus, um einen privaten und öf­fent­li­chen WireGuard-Schlüssel zu erzeugen:

# Schlüsselverzeichnis erstellen und Berechtigungen setzen
sudo mkdir -p /etc/wireguard/keys
sudo chmod 700 /etc/wireguard/keys
cd /etc/wireguard/keys
# Umask so setzen, dass nur root lesen/schreiben kann
umask 077
# Privaten Schlüssel erzeugen und in Datei speichern
wg genkey | sudo tee privatekey | wg pubkey | sudo tee publickey
# Ausgabe der erzeugten Schlüssel prüfen
sudo cat privatekey
sudo cat publickey
bash
Hinweis

Die Schlüssel sollten in einer sicheren Umgebung erstellt und ge­spei­chert werden. Die obigen Befehle sind für Test­zwe­cke geeignet. In einer Pro­duk­ti­ons­um­ge­bung sollten zu­sätz­li­che Si­cher­heits­vor­keh­run­gen getroffen werden, wie z. B. die Ver­wen­dung von sicheren Ver­zeich­nis­sen und Zu­griffs­steue­run­gen.

Netz­werk­ein­stel­lun­gen für WireGuard kon­fi­gu­rie­ren

Nachdem die kryp­to­gra­fi­schen Schlüssel erzeugt wurden, müssen auf jedem Peer bestimmte Netzwerk- und Routing-Ein­stel­lun­gen vor­ge­nom­men werden. Diese Kon­fi­gu­ra­ti­on ist ent­schei­dend, um die sichere Kom­mu­ni­ka­ti­on zwischen den Peers zu er­mög­li­chen.

Im We­sent­li­chen wird eine Kon­fi­gu­ra­ti­ons­da­tei erstellt, die unter anderem folgende In­for­ma­tio­nen enthält:

  • Private und öf­fent­li­che Schlüssel der Peers
  • Erlaubte IP-Adressen (die IP-Bereiche, mit denen der Peer kom­mu­ni­zie­ren darf)
  • Peer-Adressen, die mit den je­wei­li­gen öf­fent­li­chen Schlüs­seln verknüpft sind

Ein Beispiel für die grund­le­gen­de Kon­fi­gu­ra­ti­on einer WireGuard-Ver­bin­dung könnte wie folgt aussehen:

[Interface]
# Interne VPN-IP des Servers
Address = 10.0.0.1/24
# Privater Schlüssel (vom Server)
PrivateKey = <SERVER_PRIVATE_KEY>
# UDP-Port, auf dem WireGuard Verbindungen akzeptiert
ListenPort = 51820
# Client-Peer
[Peer]
# Öffentlicher Schlüssel des Clients
PublicKey = <CLIENT_PUBLIC_KEY>
# Interne VPN-IP, die dem Client zugewiesen ist
AllowedIPs = 10.0.0.2/32
txt

Ver­bin­dung testen und WireGuard ak­ti­vie­ren

Nachdem WireGuard auf Ihrem System in­stal­liert und kon­fi­gu­riert wurde, ist es an der Zeit, die Ver­bin­dung zu testen und das Netz­werk­in­ter­face zu ak­ti­vie­ren. Dies kann über die Kom­man­do­zei­le erfolgen, indem die folgenden Befehle aus­ge­führt werden:

1. Netz­werk­in­ter­face ak­ti­vie­ren

Zunächst müssen Sie das WireGuard-Interface ak­ti­vie­ren, das Sie gerade kon­fi­gu­riert haben:

sudo systemctl enable --now wg-quick@wg0
bash

Dieser Befehl aktiviert das WireGuard-Interface (wg0), das Sie zuvor erstellt haben. Wenn dieser Befehl er­folg­reich aus­ge­führt wird, sollte die Ver­bin­dung bereit sein, Daten zu senden.

2. Ver­bin­dung testen

Um si­cher­zu­stel­len, dass die Ver­bin­dung funk­tio­niert, können Sie den Ping-Befehl verwenden, um zu über­prü­fen, ob das entfernte Gerät er­reich­bar ist. Beispiel:

ping 192.168.1.2
bash

Ersetzen Sie die IP-Adresse durch die des ent­fern­ten Peers, mit dem Sie verbunden sind. Wenn der Ping er­folg­reich ist, bedeutet das, dass die VPN-Ver­bin­dung funk­tio­niert.

3. Feh­ler­be­he­bung

Sollte die Ver­bin­dung nicht wie erwartet funk­tio­nie­ren, über­prü­fen Sie die folgenden Punkte:

  • Stellen Sie sicher, dass die IP-Adressen korrekt kon­fi­gu­riert sind.
  • Über­prü­fen Sie, ob die öf­fent­li­chen und privaten Schlüssel korrekt mit­ein­an­der aus­ge­tauscht wurden.
  • Stellen Sie sicher, dass die Firewall auf beiden Geräten so kon­fi­gu­riert ist, dass sie WireGuard-Verkehr zulässt (nor­ma­ler­wei­se über den Port 51820).

Falls weiterhin Probleme auftreten, können Sie auch den WireGuard-Dienst neu starten:

sudo systemctl restart wg-quick@wg0
bash
Zum Hauptmenü