WireGuard Grundlagen

Aus Thomas-Krenn-Wiki
Zur Navigation springen Zur Suche springen

WireGuard ist eine sehr leicht verständliche und moderne VPN Lösung. Es setzt sich zum Ziel, schneller, einfacher und schlanker als IPsec zu sein. Dabei möchte es auch deutlich performanter als OpenVPN sein. Im Gegensatz zu OpenVPN wird auf eine reduzierte Anzahl von (state-of-the-art) Kryptografiemethoden gesetzt. WireGuard ist als universelles VPN für den Betrieb auf Embedded Devices und Supercomputern konzipiert. Dieser Artikel zeigt die Komponenten und Funktionsweise von WireGuard.

WireGuard Roadwarrior Setup
WireGuard Peer-to-Peer Setup

Entwicklung und aktueller Stand

WireGuard wurde von Jason A. Donenfeld, auch bekannt als "zx2c4" ins Leben gerufen. Das erste Release 0.0.20161209 wurde am 09. Dezember 2016 veröffentlicht.[1] WireGuard wird immer noch stark weiterentwickelt, daher mahnten die Entwickler bis zum 24.08.2019 zur Vorsicht beim Verwenden des Codes:[2]

WireGuard is not yet complete. You should not rely on this code. It has not undergone proper degrees of security auditing and the protocol is still subject to change. We're working toward a stable 1.0 release, but that time has not yet come.[...]

Seit 28.08.2019 schreiben die Entwickler:[3]

WireGuard is currently working toward a stable 1.0 release. Current snapshots are generally versioned "0.0.YYYYMMDD" or "0.0.V", but these should not be considered real releases and they may contain security quirks (which would not be eligible for CVEs, since this is pre-release snapshot software). This text will be removed after a thorough audit.

Trotz der Deklarierung als nicht vollständig und noch nicht stabil, wird WireGuard von den Entwicklern bereits als die sicherste, am leichtesten einzusetzende und einfachste VPN Technologie am Markt propagiert.

Seit Anfang 2020 schreiben die Entwickler:[4]

Some parts of WireGuard are working toward a stable 1.0 release, while others are already there. Current snapshots are generally versioned "0.0.YYYYMMDD" or "0.0.V", but these should not be considered real releases and they may contain security quirks (which would not be eligible for CVEs, since this is pre-release snapshot software). Current releases are generally versioned "1.x.YYYYMMDD".

Im Git-Repository von WireGuard kann die Entwicklung verfolgt werden:

Seit Linux Kernel Version 5.6 ist WireGuard 1.0.0 integriert.[5]

Verfügbarkeit

Ursprünglich wurde WireGuard für den Linux Kernel veröffentlicht, zur Installation ist mindestens der Kernel 3.10 erforderlich.[6]

Nun ist WireGuard für FreeBSD, Linux, macOS, OpenBSD, Windows und weitere Betriebssystems sowie als App für Android und iOS verfügbar.[7]

Vorteile von WireGuard

Die Vorteile von WireGuard sind:

  • Schnelle und einfache Einrichtung
  • Schlanke Codebasis
  • Fokussierung auf wenige aber moderne Kryptografietechniken
  • Unterstützt viele Betriebssystem-Varianten
  • Wechsel zwischen WLAN- und Mobilfunkverbindung ohne spürbare Unterbrechung
  • Sehr schneller Verbindungsaufbau
  • Sehr hohe Geschwindigkeit
  • Open Source

Nachteile von WireGuard

Einschränkungen gibt es bei WireGuard für VPN-Anwendungszwecke im Bereich der Anonymisierung:[8]

  • Ohne Logging nicht nutzbar.
  • Keine dynamische IP Zuweisung, jedem Client ist eine IP fest vorgegeben.

Funktionsweise

Dieser Abschnitt zeigt die Funktionsweise von WireGuard auf, die Verschlüsselung und Entschlüsselung von Paketen wird anschließend anhand eines Beispiel-Ablaufs erklärt:

  • WireGuard verwendet UDP zur Übertragung der verschlüsselten IP-Pakete.
  • Der Port kann frei aus dem Bereich der High-Ports gewählt werden.
  • Wird kein Port angegeben, beginnt WireGuard bei 51820/UDP.
  • Cryptokey Routing[9]
    • Die Public Keys werden mit einer Liste von Allowed IPs kombiniert.
    • Bei einer erfolgreichen Assoziation wird den Paketen erlaubt, den VPN Tunnel zu passieren.
  • Eigenschaften von Public-Keys
    • Jeder Peer besitzt einen eigenen Private- und Public-Key.
    • Werden zur Authentifizierung der Peers untereinander verwendet.
    • Haben ein ähnliches Funktionsprinzip wie SSH Public-Keys.
  • Typische WireGuard "Server-Konfiguration"
    • Ein einzelner Eintrag für ein Interface wird erstellt.
    • Mehrere Peers sind mit diesem einen Interface assoziiert.
  • Clients, z.B. Roadwarrior-Geräte, besitzen oftmals nur einen Interface-Eintrag und einen Peer (den WireGuard "Server").
  • Traffic Routing via AllowedIPs
    • Wildcard 0.0.0.0/0: Dadurch wird automatisch jegliches Paket verschlüsselt und durch den VPN Tunnel geschickt.
    • (Mehrfach-)Angabe von IP-Adressen beziehungsweise Netzadressen mit Subnetzmaske, per Komma getrennt: Dadurch wird der Traffic nur für die angegebenen IP-Adressen über den Tunnel geschickt.
  • Eigenschaften der Liste Allowed IPs
    • In Versandrichtung verhält sich diese Liste wie eine Routing Tabelle.
    • In Empfangsrichtung dient sie als Access Control List.

Verschlüsselung eines Paketes

Es soll ein Paket an die IP Adresse 192.168.1.10 verschickt werden. WireGuard prüft, welchem Peer diese IP entspricht. Kann der zur IP Adresse zugehörige Peer nicht gefunden werden, wird das Paket verworfen. Kann der Peer erfolgreich zugewiesen werden, erfolgt eine Verschlüsselung mit dessen Public Key (z.B. Public Key vom Peer "Ubuntu Client 2"). Danach prüft WireGuard, welchen öffentlichen Endpoint der Client "Ubuntu Client 2" hat. Der zugehörige Endpoint für diesen Client lautet "8.8.8.8:51820" und nun wird das verschlüsselte Paket an diesen Endpoint weitergeleitet.

Entschlüsselung eines Paketes

Wenn ein WireGuard Peer ein Paket empfängt, wird es anschließend entschlüsselt (mithilfe des eigenen Private Keys). Konnte es erfolgreich entschlüsselt und für einen bekannten Peer (z.B. "Ubuntu Client 1") authentifiziert werden, wird anschließend geprüft was der letzte bekannte öffentliche Endpoint für diesen Peer war (4.4.4.4:51820). Das entschlüsselte Paket enthält das Klartext-Paket von der IP Adresse 192.168.1.9. Nun wird geprüft, ob der Peer "Ubuntu Client 1" diesem Peer Pakete der IP 192.168.1.9 schicken darf. Wenn die Prüfung erfolgreich ist, wird das Paket akzeptiert. Wenn nicht, wird das Paket verworfen.

Beispiele

In unserem Thomas-Krenn-Wiki finden Sie zum Thema WireGuard detaillierte Installationsanleitungen:

Einzelnachweise

  1. Snapshot 20161209 (git.zx2c3.com)
  2. Work in Progress (web.archive.org - wireguard.com) Stand 24.08.2019
  3. Work in Progress (web.archive.org - wireguard.com) Stand 28.08.2019
  4. Work in Progress (web.archive.org - wireguard.com) Stand 31.03.2020
  5. [ANNOUNCE WireGuard 1.0.0 for Linux 5.6 Released] (lore.kernel.org)
  6. Kernel Requirements (wireguard.com)
  7. Installation (wireguard.com)
  8. WireGuard VPN: What You Need to Know (restoreprivacy.com, 28.06.2019)
  9. Cryptokey Routing (wireguard.com)


Foto Thomas Niedermeier.jpg

Autor: Thomas Niedermeier

Thomas Niedermeier arbeitet im Product Management Team von Thomas-Krenn. Er absolvierte an der Hochschule Deggendorf sein Studium zum Bachelor Wirtschaftsinformatik. Seit 2013 ist Thomas bei Thomas-Krenn beschäftigt und kümmert sich unter anderem um OPNsense Firewalls, das Thomas-Krenn-Wiki und Firmware Sicherheitsupdates.

Icon-Twitter.png 

Das könnte Sie auch interessieren

Let's Encrypt
Log4shell Zero-Day-Sicherheitslücke
Registrierung von Partnerprodukten