WireGuard
WireGuard ist ein VPN-Protokoll, das eine verschlüsselte Verbindung zwischen zwei Gegenstellen herstellt. Es ist deutlich einfacher aufgebaut als ältere Verfahren und seit 2020 fester Bestandteil des Linux-Kerns.
Die Grundentscheidung
Ältere VPN-Verfahren handeln beim Verbindungsaufbau aus, welche Verschlüsselung verwendet wird. Das erlaubt Flexibilität und erzeugt Aufwand, Fehlerquellen und eine große Menge Programmcode — bei IPsec sind es Hunderttausende Zeilen.
WireGuard verzichtet darauf. Es gibt genau einen Satz kryptografischer Verfahren, nicht verhandelbar. Soll etwas geändert werden, kommt eine neue Protokollfassung. Der Programmcode liegt dadurch im Bereich weniger tausend Zeilen und ist überschaubar genug, um ihn vollständig zu prüfen.
Dieselbe Strenge gilt überall: ausschließlich UDP, keine Benutzerverwaltung, keine Zertifikate, keine Betriebsarten.
Schlüssel statt Konten
Jede Gegenstelle hat ein Schlüsselpaar. Der öffentliche Schlüssel ist die Identität — es gibt keine Benutzernamen, keine Kennwörter, keine Zertifikatsstellen.
Wer eine Gegenstelle zulassen will, trägt deren öffentlichen Schlüssel ein. Wer sie aussperren will, entfernt ihn. Das ist der gesamte Verwaltungsvorgang.
Für wenige Gegenstellen ist das angenehm einfach. Für Organisationen mit hunderten Mitarbeitern fehlt dagegen alles, was man von einer Benutzerverwaltung erwartet — dafür gibt es Aufsätze, die diese Lücke füllen.
Cryptokey Routing
Der zentrale Begriff, und die Stelle, an der die meisten Einrichtungen hängen bleiben.
Jeder Gegenstelle wird eine Liste von Adressbereichen zugeordnet, die AllowedIPs heißt. Diese Liste hat zwei Aufgaben gleichzeitig:
Nach außen bestimmt sie das Ziel. Ein Paket an eine Adresse aus der Liste wird an diese Gegenstelle geschickt. Die Liste wirkt insoweit wie eine Routingtabelle.
Nach innen bestimmt sie, was angenommen wird. Ein von dieser Gegenstelle eintreffendes Paket wird verworfen, wenn seine Absenderadresse nicht in ihrer Liste steht. Die Liste wirkt insoweit wie ein Filter.
Daraus folgt der häufigste Fehler überhaupt: Der Schlüsselaustausch gelingt, die Verbindung steht — aber es fließen keine Daten, oder nur in eine Richtung. Die Ursache ist fast immer, dass die Liste zu eng gefasst ist. Wer nicht nur die Gegenstelle selbst, sondern auch das Netz dahinter erreichen will, muss dieses Netz dort eintragen.
Zwei Gegenstellen dürfen sich dabei nicht überschneiden: Jede Adresse darf nur einer zugeordnet sein.
Kein Verbindungsaufbau im klassischen Sinn
WireGuard kennt kein Anmelden und kein Abmelden. Es gibt keinen Zustand „verbunden" — eine Gegenstelle ist erreichbar oder nicht, und das zeigt sich erst, wenn Daten fließen sollen.
Daraus ergeben sich zwei Eigenschaften:
Ortswechsel funktionieren von selbst. Trifft von einer bekannten Gegenstelle ein gültiges Paket von einer neuen Absenderadresse ein, merkt sich WireGuard diese als neues Ziel. Ein Telefon, das vom WLAN ins Mobilfunknetz wechselt, behält die Verbindung, ohne dass etwas neu aufgebaut wird.
Hinter NAT braucht es ein Lebenszeichen. Wer von außen erreichbar sein will, obwohl er hinter einem Router sitzt, muss in regelmäßigen Abständen senden, damit der Übersetzungseintrag bestehen bleibt. Die Einstellung dafür heißt Keepalive, üblich sind 25 Sekunden. Ohne sie funktioniert die Verbindung nur so lange, wie die Seite hinter dem NAT selbst sendet.
Was das Protokoll nicht mitbringt
Keine Adressvergabe. Die Adressen innerhalb des Tunnels werden von Hand eingetragen. Es gibt kein DHCP.
Keine Namensauflösung. Welcher Nameserver im Tunnel gilt, regelt das Werkzeug drumherum, nicht das Protokoll.
Keine Durchdringung von NAT. Mindestens eine Seite muss erreichbar sein. Sitzen beide hinter einem Übersetzungsverfahren, kommt keine Verbindung zustande.
Der letzte Punkt ist in Deutschland der praktisch wichtigste. An einem Anschluss mit DS-Lite oder Carrier-grade NAT gibt es keine eingehende IPv4-Verbindung, also auch keinen Tunnel ins Heimnetz. Die Auswege sind dieselben wie bei einer Portfreigabe: eine echte IPv4-Adresse beim Anbieter beantragen, den Zugang über IPv6 führen, oder einen Vermittlungsdienst dazwischenschalten.
Verbreitung
Seit Fassung 5.6 ist WireGuard Bestandteil des Linux-Kerns, was den Durchsatz gegenüber Lösungen im Benutzerbereich deutlich erhöht. Umsetzungen gibt es für alle verbreiteten Betriebssysteme.
Bei Heimroutern hat AVM es ab FRITZ!OS 7.50 aufgenommen, einschließlich Einrichtung über einen Bildcode. MikroTik führt es seit RouterOS 7, OPNsense und pfSense bringen es mit. Damit ist es dort angekommen, wo zuvor IPsec die einzige mitgelieferte Möglichkeit war.
Abgrenzung
IPsec ist der ältere Standard, kann mehr und ist entsprechend aufwendiger einzurichten. In Unternehmensumgebungen mit Bestandsgegenstellen bleibt es gesetzt.
OpenVPN läuft über TCP oder UDP und kommt durch Netze, die nur bestimmte Protokolle durchlassen. Es ist langsamer, weil es außerhalb des Kerns arbeitet.
Übergreifende Dienste wie Tailscale oder Netbird setzen auf WireGuard auf und ergänzen, was dem Protokoll fehlt: Benutzerverwaltung, Adressvergabe und einen Vermittlungsdienst für Gegenstellen, die beide hinter NAT sitzen.
Quellen
- Donenfeld: WireGuard — Next Generation Kernel Network Tunnel, NDSS 2017