WireGuard im Detail


WireGuard

WireGuard® ist ein extrem einfaches, aber dennoch schnelles und modernes VPN, das modernste Kryptographie nutzt. Es zielt darauf ab, schneller, einfacher, schlanker und nützlicher als IPsec zu sein, während es die massiven Kopfschmerzen vermeidet. Es soll wesentlich leistungsfähiger sein als OpenVPN. WireGuard® ist als Allzweck-VPN konzipiert, das sowohl auf eingebetteten Schnittstellen als auch auf Supercomputern läuft und für viele verschiedene Umstände geeignet ist. Ursprünglich für den Linux-Kernel veröffentlicht, ist es jetzt plattformübergreifend (Windows, macOS, BSD, iOS, Android) und weit verbreitet. Es wird derzeit intensiv weiterentwickelt, aber schon jetzt kann es als die sicherste, benutzerfreundlichste und einfachste VPN-Lösung der Branche angesehen werden.

Einfach und leicht zu bedienen

WireGuard® soll so einfach zu konfigurieren und einzusetzen sein wie SSH. Eine VPN-Verbindung wird einfach durch den Austausch von sehr einfachen öffentlichen Schlüsseln hergestellt – genau wie beim Austausch von SSH-Schlüsseln – und der ganze Rest wird transparent von WireGuard® erledigt. Es ist sogar in der Lage, zwischen IP-Adressen zu roamen, genau wie Mosh. Es besteht keine Notwendigkeit, Verbindungen zu verwalten, sich um den Status zu kümmern, Daemons zu verwalten oder sich Gedanken darüber zu machen, was unter der Haube steckt. WireGuard® bietet eine extrem einfache und dennoch leistungsstarke Schnittstelle.

♦ Kryptographisch solide

WireGuard® verwendet modernste Kryptographie, wie das Noise-Protokoll-Framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF und sichere vertrauenswürdige Konstruktionen. Es trifft konservative und vernünftige Entscheidungen und ist von Kryptographen geprüft worden.

Minimale Angriffsfläche

WireGuard® wurde mit Blick auf einfache Implementierung und Einfachheit entwickelt. Es soll mit wenigen Zeilen Code leicht zu implementieren sein und leicht auf Sicherheitslücken überprüft werden können. Im Vergleich zu Giganten wie *Swan/IPsec oder OpenVPN/OpenSSL, bei denen die Überprüfung der gigantischen Codebasen selbst für große Teams von Sicherheitsexperten eine überwältigende Aufgabe darstellt, ist WireGuard® so konzipiert, dass es von einzelnen Personen umfassend überprüft werden kann.

Hohe Leistung

Eine Kombination aus extrem schnellen kryptographischen Primitiven und der Tatsache, dass WireGuard® im Linux-Kernel läuft, bedeutet, dass sichere Netzwerke sehr schnell sein können. Es ist sowohl für kleine eingebettete Geräte wie Smartphones als auch für voll ausgelastete Backbone-Router geeignet.

Gut definiert & gründlich durchdacht

WireGuard® ist das Ergebnis eines langwierigen und gründlich durchdachten akademischen Prozesses. Das Ergebnis ist das technische Whitepaper, ein akademisches Forschungspapier, das das Protokoll und die intensiven Überlegungen, die in jede Entscheidung eingeflossen sind, klar definiert.


Konzeptioneller Überblick

Wenn Sie sich einen allgemeinen konzeptionellen Überblick über WireGuard® verschaffen möchten, lesen Sie hier weiter. Danach können Sie mit der Installation fortfahren und die Schnellstart-Anleitung lesen, wie man es benutzt.

Wenn Sie sich für die internen Abläufe interessieren, lesen Sie die kurze Zusammenfassung des Protokolls oder gehen Sie in die Tiefe, indem Sie das technische Whitepaper lesen, in dem das Protokoll, die Kryptographie und die Grundlagen näher erläutert werden. Wenn Sie beabsichtigen, WireGuard® für eine neue Plattform zu implementieren, lesen Sie bitte die plattformübergreifenden Hinweise.

WireGuard® kapselt IP-Pakete sicher über UDP ein. Sie fügen eine WireGuard-Schnittstelle hinzu, konfigurieren sie mit Ihrem privaten Schlüssel und den öffentlichen Schlüsseln Ihrer Partner und senden dann Pakete über diese Schnittstelle. Alle Fragen der Schlüsselverteilung und der gepushten Konfigurationen gehören nicht in den Aufgabenbereich von WireGuard; das sind Themen, die besser anderen Schichten überlassen werden, damit wir nicht mit der Aufblähung von IKE oder OpenVPN enden. Im Gegensatz dazu ahmt es eher das Modell von SSH und Mosh nach; beide Parteien haben die öffentlichen Schlüssel des jeweils anderen, und dann können sie einfach anfangen, Pakete über die Schnittstelle auszutauschen.


Einfache Netzwerkschnittstelle

WireGuard® funktioniert durch Hinzufügen einer (oder mehrerer) Netzwerkschnittstelle(n), wie eth0 oder wlan0, genannt wg0 (oder wg1, wg2, wg3, usw.). Diese Netzwerkschnittstelle kann dann ganz normal mit ifconfig(8) oder ip-address(8) konfiguriert werden, wobei Routen für sie mit route(8) oder ip-route(8) hinzugefügt und entfernt werden können, und so weiter mit allen gewöhnlichen Netzwerkwerkzeugen. Die spezifischen WireGuard-Aspekte der Schnittstelle werden mit dem Werkzeug wg(8) konfiguriert. Diese Schnittstelle fungiert als Tunnelschnittstelle.

WireGuard® assoziiert Tunnel-IP-Adressen mit öffentlichen Schlüsseln und entfernten Endpunkten.
Wenn die Schnittstelle ein Paket an eine Gegenstelle sendet, tut sie Folgendes:

  1. Dieses Paket ist für 192.168.30.8 bestimmt. Welche Gegenstelle ist das? Lass mich nachsehen… Okay, es ist für Peer ABCDEFGH. (Oder wenn es für keinen konfigurierten Peer bestimmt ist, verwerfen Sie das Paket).
  2. Verschlüsseln Sie das gesamte IP-Paket mit dem öffentlichen Schlüssel von Peer ABCDEFGH.
  3. Was ist der entfernte Endpunkt von Peer ABCDEFGH? Lassen Sie mich nachsehen… Okay, der Endpunkt ist UDP-Port 53133 auf Host 216.58.211.110.
  4. Senden Sie verschlüsselte Bytes aus Schritt 2 über das Internet per UDP an 216.58.211.110:53133.

Wenn die Schnittstelle ein Paket empfängt, geschieht Folgendes:

  1. Ich habe gerade ein Paket von UDP-Port 7361 auf Host 98.139.183.24 erhalten. Lass es uns entschlüsseln!
  2. Es wurde entschlüsselt und für Peer LMNOPQRS ordnungsgemäß authentifiziert. Okay, denken wir daran, dass der letzte Internet-Endpunkt von Peer LMNOPQRS 98.139.183.24:7361 ist und UDP verwendet.
  3. Nach der Entschlüsselung kommt das Klartext-Paket von 192.168.43.89. Darf die Gegenstelle LMNOPQRS uns Pakete als 192.168.43.89 senden?
  4. Wenn ja, akzeptieren Sie das Paket auf der Schnittstelle. Wenn nicht, verwerfen Sie es.

Hinter den Kulissen wird viel getan, um mit Hilfe modernster Kryptographie einen angemessenen Datenschutz, Authentizität und ein perfektes Vorwärtsgeheimnis zu gewährleisten.


Cryptokey-Routing

Das Herzstück von WireGuard® ist ein Konzept namens Cryptokey Routing, das öffentliche Schlüssel mit einer Liste von Tunnel-IP-Adressen verknüpft, die innerhalb des Tunnels erlaubt sind. Jede Netzwerkschnittstelle hat einen privaten Schlüssel und eine Liste von Gegenstellen. Jeder Peer hat einen öffentlichen Schlüssel. Öffentliche Schlüssel sind kurz und einfach und werden von Peers zur gegenseitigen Authentifizierung verwendet. Sie können zur Verwendung in Konfigurationsdateien mit einer beliebigen Out-of-Band-Methode weitergegeben werden, ähnlich wie man seinen öffentlichen SSH-Schlüssel an einen Freund senden könnte, um Zugang zu einem Shell-Server zu erhalten.

Ein Server-Computer könnte zum Beispiel diese Konfiguration haben:

[Interface]
PrivateKey = yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=
ListenPort = 51820[Peer]
PublicKey = xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=
AllowedIPs = 10.192.122.3/32, 10.192.124.1/24[Peer]
PublicKey = TrMvSoP4jYQlY6RIzBgbssQqY3vxI2Pi+y71lOWWXX0=
AllowedIPs = 10.192.122.4/32, 192.168.0.0/16[Peer]
PublicKey = gN65BkIKy1eCE9pP1wdc8ROUtkHLF2PfAqYdyYBz6EA=
AllowedIPs = 10.10.10.230/32

Und ein Client-Computer könnte diese einfachere Konfiguration haben:

[Interface]
PrivateKey = gI6EdUSYvn8ugXOt8QQD6Yc+JyiZxIhp3GInSWRfWGE=
ListenPort = 21841[Peer]
PublicKey = HIgo9xNzJMWLKASShiTqIybxZ0U3wGLiUeJ1PKf8ykw=
Endpoint = 192.95.5.69:51820
AllowedIPs = 0.0.0.0/0

In der Serverkonfiguration kann jeder Peer (ein Client) Pakete an die Netzwerkschnittstelle senden, deren Quell-IP mit der entsprechenden Liste der erlaubten IPs übereinstimmt. Wenn der Server beispielsweise ein Paket von Peer gN65BkIK… empfängt, nachdem es entschlüsselt und authentifiziert wurde, und die Quell-IP 10.10.10.230 lautet, wird es auf der Schnittstelle zugelassen; andernfalls wird es verworfen.

Wenn die Netzwerkschnittstelle in der Serverkonfiguration ein Paket an einen Peer (einen Client) senden möchte, wird die Ziel-IP des Pakets mit der Liste der zulässigen IPs der einzelnen Peers verglichen, um festzustellen, an welchen Peer das Paket gesendet werden soll. Wenn die Netzwerkschnittstelle beispielsweise aufgefordert wird, ein Paket mit der Ziel-IP 10.10.10.230 zu senden, verschlüsselt sie es mit dem öffentlichen Schlüssel von Peer gN65BkIK… und sendet es dann an den letzten Internet-Endpunkt dieses Peers.

In der Client-Konfiguration kann sein einziger Peer (der Server) Pakete mit einer beliebigen Quell-IP an die Netzwerkschnittstelle senden (da 0.0.0.0/0 ein Platzhalter ist). Wenn zum Beispiel ein Paket von Peer HIgo9xNz… empfangen wird, wird es, wenn es korrekt entschlüsselt und authentifiziert wird, mit einer beliebigen Quell-IP auf der Schnittstelle zugelassen; andernfalls wird es verworfen.

Wenn die Netzwerkschnittstelle in der Client-Konfiguration ein Paket an ihren einzigen Peer (den Server) senden will, verschlüsselt sie Pakete für den einzigen Peer mit einer beliebigen Ziel-IP-Adresse (da 0.0.0.0/0 ein Platzhalter ist). Wenn die Netzwerkschnittstelle beispielsweise aufgefordert wird, ein Paket mit einer beliebigen Ziel-IP-Adresse zu senden, verschlüsselt sie es mit dem öffentlichen Schlüssel des einzelnen Peers HIgo9xNz… und sendet es dann an den letzten Internet-Endpunkt des einzelnen Peers.

Mit anderen Worten: Beim Senden von Paketen verhält sich die Liste der erlaubten IPs wie eine Art Routing-Tabelle, und beim Empfangen von Paketen verhält sich die Liste der erlaubten IPs wie eine Art Zugangskontrollliste.

Das ist es, was wir eine Cryptokey-Routing-Tabelle nennen: die einfache Zuordnung von öffentlichen Schlüsseln und erlaubten IPs.

Jede Kombination von IPv4 und IPv6 kann für jedes der Felder verwendet werden. Der WireGuard® ist vollständig in der Lage, das eine in das andere zu kapseln, falls erforderlich.

Da alle Pakete, die über die WireGuard-Schnittstelle gesendet werden, verschlüsselt und authentifiziert sind, und weil es eine so enge Kopplung zwischen der Identität eines Peers und der zulässigen IP-Adresse eines Peers gibt, benötigen Systemadministratoren keine komplizierten Firewall-Erweiterungen wie im Falle von IPsec, sondern können einfach auf „kommt es von dieser IP? auf dieser Schnittstelle?“ abgleichen und sicher sein, dass es sich um ein sicheres und authentisches Paket handelt. Dies vereinfacht die Netzwerkverwaltung und die Zugangskontrolle erheblich und gibt Ihnen die Gewissheit, dass Ihre iptables-Regeln tatsächlich das tun, was Sie beabsichtigen.


Eingebautes Roaming

Die Client-Konfiguration enthält einen anfänglichen Endpunkt seines einzigen Peers (des Servers), so dass er weiß, wohin er verschlüsselte Daten senden muss, bevor er verschlüsselte Daten empfangen hat. Die Serverkonfiguration enthält keine anfänglichen Endpunkte seiner Peers (der Clients). Dies liegt daran, dass der Server den Endpunkt seiner Peers ermittelt, indem er prüft, woher die korrekt authentifizierten Daten stammen. Wenn der Server selbst seinen eigenen Endpunkt ändert und Daten an die Clients sendet, erkennen die Clients den neuen Server-Endpunkt und aktualisieren die Konfiguration auf die gleiche Weise. Sowohl Client als auch Server senden verschlüsselte Daten an den letzten IP-Endpunkt, für den sie die Daten authentisch entschlüsselt haben. Somit besteht auf beiden Seiten ein vollständiges IP-Roaming.


Bereit für Container

WireGuard® sendet und empfängt verschlüsselte Pakete unter Verwendung des Netzwerknamensraums, in dem die WireGuard-Schnittstelle ursprünglich erstellt wurde. Das bedeutet, dass Sie die WireGuard-Schnittstelle in Ihrem Hauptnetzwerk-Namensraum erstellen können, der Zugang zum Internet hat, und sie dann in einen Netzwerk-Namensraum verschieben können, der zu einem Docker-Container gehört, als einzige Schnittstelle dieses Containers. Dadurch wird sichergestellt, dass dieser Container nur über einen sicheren, verschlüsselten WireGuard-Tunnel auf das Netzwerk zugreifen kann.


Mehr lernen

Werfen Sie einen Blick auf die Befehle und den Schnellstart, um eine gute Vorstellung davon zu bekommen, wie WireGuard® in der Praxis eingesetzt wird. Es gibt auch eine Beschreibung des Protokolls, der Kryptographie und des Schlüsselaustauschs, zusätzlich zum technischen Whitepaper, das die meisten Details enthält.


Über das Projekt

Quellcode

WireGuard® ist in mehrere Repositories unterteilt, die unter anderem im ZX2C4 Git Repository gehostet werden. Konsultieren Sie die Projekt-Repository-Liste.

IRC-Diskussionen

Wenn Sie Probleme bei der Einrichtung oder Verwendung von WireGuard® haben, ist der beste Ort, um Hilfe zu erhalten, der IRC-Kanal #wireguard auf Libera.Chat. Dort besprechen wir auch Entwicklungsaufgaben und planen die Zukunft des Projekts.

Mailing-Liste

Beteiligen Sie sich an der Diskussion über die Entwicklung von WireGuard, indem Sie der Mailingliste beitreten. Hier finden alle Entwicklungsaktivitäten statt. Reichen Sie Patches mit git-send-email ein, ähnlich dem Stil von LKML.

E-Mail-Kontakt

Wenn Sie uns aus einem bestimmten Grund privat kontaktieren möchten, können Sie uns unter erreichen. Beachten Sie jedoch, dass „Support“-Anfragen viel besser für unseren IRC-Kanal geeignet sind.

Sicherheitskontakt

Bitte melden Sie alle Sicherheitsprobleme an und nur an diese Adresse. Schicken Sie keine nicht sicherheitsrelevanten Fragen an diesen E-Mail-Alias. Schicken Sie keine sicherheitsrelevanten Fragen an andere E-Mail-Adressen.

Lizenz

Die Kernel-Komponenten werden unter der GPLv2 veröffentlicht, ebenso wie der Linux-Kernel selbst. Andere Projekte sind unter MIT, BSD, Apache 2.0 oder GPL lizenziert, je nach Kontext.

 


Diese Seite ist eine Übersetzung aus dem Englischen von https://www.wireguard.com/

Für Übersetzungen war www.DeepL.com/Translator (kostenlose Version) eine große Hilfe.

 

Zurück: Netzwerk Update: 13.10.2021