Dies ist eine alte Version des Dokuments!
® ist ein extrem einfaches, aber schnelles und modernes VPN, das modernste Kryptografie verwendet. Es soll schneller, einfacher, schlanker und nützlicher als IPsec sein und gleichzeitig den enormen Aufwand vermeiden. Es soll deutlich leistungsfähiger als OpenVPN sein. WireGuard ist als Allzweck-VPN für den Betrieb auf eingebetteten Schnittstellen und Supercomputern konzipiert und für viele verschiedene Umstände geeignet. Ursprünglich für den Linux-Kernel veröffentlicht, ist es jetzt plattformübergreifend (Windows, macOS, BSD, iOS, Android) und weithin einsetzbar. Es befindet sich derzeit in intensiver Entwicklung, kann aber bereits jetzt als die sicherste, benutzerfreundlichste und einfachste VPN-Lösung der Branche angesehen werden.
Einfach und benutzerfreundlich WireGuard soll so einfach zu konfigurieren und einzusetzen sein wie SSH. Eine VPN-Verbindung wird einfach durch den Austausch sehr einfacher öffentlicher Schlüssel hergestellt – genau wie beim Austausch von SSH-Schlüsseln – und alles andere wird transparent von WireGuard erledigt. Es ist sogar in der Lage, zwischen IP-Adressen zu roamen, genau wie Mosh. Sie müssen keine Verbindungen verwalten, sich um den Status kümmern, Daemons verwalten oder sich Gedanken darüber machen, was unter der Haube passiert. WireGuard bietet eine extrem einfache, aber leistungsstarke Schnittstelle.
Kryptographisch solide WireGuard verwendet modernste Kryptografie, wie das Noise-Protokoll-Framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF und sichere, vertrauenswürdige Konstruktionen. Es trifft konservative und vernünftige Entscheidungen und wurde von Kryptografen überprüft.
Minimale Angriffsfläche WireGuard wurde mit Blick auf einfache Implementierung und Einfachheit entwickelt. Es soll leicht in sehr wenigen Codezeilen implementiert 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 ist, soll WireGuard von einzelnen Personen umfassend überprüft werden können.
Hohe Leistung Eine Kombination aus extrem schnellen kryptografischen Primitiven und der Tatsache, dass WireGuard im Linux-Kernel lebt, bedeutet, dass sichere Netzwerke sehr schnell sein können. Es eignet sich sowohl für kleine eingebettete Geräte wie Smartphones als auch für voll ausgestattete Backbone-Router.
Gut definiert und gründlich durchdacht WireGuard ist das Ergebnis eines langen und gründlich durchdachten akademischen Prozesses, aus dem das technische Whitepaper hervorgegangen ist, ein akademisches Forschungspapier, das das Protokoll und die intensiven Überlegungen, die in jede Entscheidung eingeflossen sind, klar definiert.
Konzeptioneller Überblick Wenn Sie einen allgemeinen konzeptionellen Überblick darüber wünschen, worum es bei WireGuard geht, lesen Sie hier weiter. Anschließend können Sie mit der Installation fortfahren und die Schnellstartanleitung zur Verwendung lesen.
Wenn Sie sich für die internen Abläufe interessieren, könnte Sie die kurze Zusammenfassung des Protokolls interessieren oder Sie können tiefer in die Materie einsteigen, indem Sie das technische Whitepaper lesen, das ausführlicher auf das Protokoll, die Kryptografie und die Grundlagen eingeht. Wenn Sie WireGuard für eine neue Plattform implementieren möchten, lesen Sie bitte die plattformübergreifenden Hinweise.
WireGuard kapselt IP-Pakete sicher über UDP. Sie fügen eine WireGuard-Schnittstelle hinzu, konfigurieren sie mit Ihrem privaten Schlüssel und den öffentlichen Schlüsseln Ihrer Peers und senden dann Pakete darüber. Alle Probleme der Schlüsselverteilung und der gepushten Konfigurationen fallen nicht in den Anwendungsbereich von WireGuard; diese Probleme sollten besser anderen Schichten überlassen werden, damit wir nicht mit dem aufgeblähten IKE oder OpenVPN enden. Im Gegensatz dazu ähnelt es eher dem Modell von SSH und Mosh; beide Parteien haben die öffentlichen Schlüssel des jeweils anderen und können dann einfach mit dem Austausch von Paketen über die Schnittstelle beginnen.
Einfache Netzwerkschnittstelle WireGuard funktioniert, indem eine Netzwerkschnittstelle (oder mehrere) wie eth0 oder wlan0 hinzugefügt wird, die wg0 (oder wg1, wg2, wg3 usw.) genannt wird. Diese Netzwerkschnittstelle kann dann normal mit ifconfig(8) oder ip-address(8) konfiguriert werden, wobei Routen dafür mit route(8) oder ip-route(8) hinzugefügt und entfernt werden können, und so weiter mit allen gewöhnlichen Netzwerkdienstprogrammen. Die spezifischen WireGuard-Aspekte der Schnittstelle werden mit dem Tool wg(8) konfiguriert. Diese Schnittstelle fungiert als Tunnelschnittstelle.
WireGuard verknüpft Tunnel-IP-Adressen mit öffentlichen Schlüsseln und Remote-Endpunkten.
Wenn die Schnittstelle ein Paket empfängt, geschieht Folgendes: Ich habe gerade ein Paket von UDP-Port 7361 auf Host 98.139.183.24 erhalten. Lassen Sie es uns entschlüsseln! Es wurde für Peer LMNOPQRS ordnungsgemäß entschlüsselt und authentifiziert. Okay, denken wir daran, dass der letzte Internetendpunkt von Peer LMNOPQRS 98.139.183.24:7361 ist und UDP verwendet. Nach der Entschlüsselung stammt das Klartextpaket von 192.168.43.89. Darf Peer LMNOPQRS uns Pakete als 192.168.43.89 senden? Wenn ja, akzeptieren Sie das Paket auf der Schnittstelle. Wenn nicht, verwerfen Sie es. Hinter den Kulissen geschieht viel, um mithilfe modernster Kryptografie angemessene Privatsphäre, Authentizität und perfekte Vorwärtsgeheimhaltung zu gewährleisten.
Cryptokey Routing Das Herzstück von WireGuard ist ein Konzept namens Cryptokey Routing, das funktioniert, indem öffentliche Schlüssel mit einer Liste von Tunnel-IP-Adressen verknüpft werden, die im Tunnel zugelassen sind. Jede Netzwerkschnittstelle hat einen privaten Schlüssel und eine Liste von Peers. Jeder Peer hat einen öffentlichen Schlüssel. Öffentliche Schlüssel sind kurz und einfach und werden von Peers verwendet, um sich gegenseitig zu authentifizieren. Sie können zur Verwendung in Konfigurationsdateien mit jeder Out-of-Band-Methode weitergegeben werden, ähnlich wie man seinen öffentlichen SSH-Schlüssel an einen Freund sendet, um auf einen Shell-Server zuzugreifen.
Ein Servercomputer könnte beispielsweise diese Konfiguration haben:
[Schnittstelle] PrivaterSchlüssel = yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk= ListenPort = 51820 [Peer] ÖffentlicherSchlüssel = xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg= Zulässige IPs = 10.192.122.3/32, 10.192.124.1/24 [Peer] ÖffentlicherSchlüssel = TrMvSoP4jYQlY6RIzBgbssQqY3vxI2Pi+y71lOWWXX0= Zulässige IPs = 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 seiner entsprechenden Liste zulässiger IPs übereinstimmt. Wenn der Server beispielsweise ein Paket vom Peer gN65BkIK… empfängt, wird es nach der Entschlüsselung und Authentifizierung auf die Schnittstelle zugelassen, wenn seine Quell-IP 10.10.10.230 ist; andernfalls wird es verworfen.
Wenn die Netzwerkschnittstelle in der Serverkonfiguration ein Paket an einen Peer (einen Client) senden möchte, prüft sie die Ziel-IP dieses Pakets und vergleicht sie mit der Liste zulässiger IPs jedes Peers, um zu sehen, an welchen Peer es 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 des Peers gN65BkIK… und sendet es dann an den neuesten Internet-Endpunkt dieses Peers.
In der Client-Konfiguration kann sein einzelner Peer (der Server) Pakete mit jeder beliebigen Quell-IP an die Netzwerkschnittstelle senden (da 0.0.0.0/0 ein Platzhalter ist). Wenn beispielsweise ein Paket vom Peer HIgo9xNz… empfangen wird und es mit jeder beliebigen Quell-IP korrekt entschlüsselt und authentifiziert wird, wird es auf die Schnittstelle zugelassen; andernfalls wird es verworfen.
Wenn die Netzwerkschnittstelle in der Client-Konfiguration ein Paket an ihren einzelnen Peer (den Server) senden möchte, verschlüsselt sie Pakete für den einzelnen Peer mit jeder 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 zu senden, verschlüsselt sie es mit dem öffentlichen Schlüssel des einzelnen Peers HIgo9xNz… und sendet es dann an den neuesten Internet-Endpunkt des einzelnen Peers.
Mit anderen Worten, beim Senden von Paketen verhält sich die Liste der zulässigen IPs wie eine Art Routing-Tabelle, und beim Empfangen von Paketen verhält sich die Liste der zulässigen IPs wie eine Art Zugriffskontrollliste.
Das ist das, was wir eine Cryptokey-Routing-Tabelle nennen: die einfache Zuordnung von öffentlichen Schlüsseln und zulässigen IPs.
Für jedes der Felder kann jede beliebige Kombination von IPv4 und IPv6 verwendet werden. WireGuard ist bei Bedarf in der Lage, das eine in das andere zu kapseln.
Da alle über die WireGuard-Schnittstelle gesendeten Pakete verschlüsselt und authentifiziert sind und eine so enge Kopplung zwischen der Identität eines Peers und der zulässigen IP-Adresse eines Peers besteht, benötigen Systemadministratoren keine komplizierten Firewall-Erweiterungen wie im Fall von IPsec, sondern können einfach auf „stammt 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 Zugriffskontrolle erheblich und bietet viel mehr Sicherheit, dass Ihre iptables-Regeln tatsächlich das tun, was Sie von ihnen beabsichtigt haben.
Integriertes Roaming Die Clientkonfiguration enthält einen anfänglichen Endpunkt ihres einzelnen Peers (des Servers), sodass sie weiß, wohin sie verschlüsselte Daten senden soll, bevor sie verschlüsselte Daten empfangen hat. Die Serverkonfiguration hat keine anfänglichen Endpunkte ihrer Peers (der Clients). Dies liegt daran, dass der Server den Endpunkt seiner Peers erkennt, indem er untersucht, woher korrekt authentifizierte Daten stammen. Wenn der Server selbst seinen eigenen Endpunkt ändert und Daten an die Clients sendet, erkennen die Clients den neuen Serverendpunkt und aktualisieren die Konfiguration trotzdem. Sowohl Client als auch Server senden verschlüsselte Daten an den letzten IP-Endpunkt, für den sie Daten authentisch entschlüsselt haben. Somit gibt es an beiden Enden vollständiges IP-Roaming.
Bereit für Container WireGuard sendet und empfängt verschlüsselte Pakete unter Verwendung des Netzwerk-Namespace, in dem die WireGuard-Schnittstelle ursprünglich erstellt wurde. Dies bedeutet, dass Sie die WireGuard-Schnittstelle in Ihrem Hauptnetzwerk-Namespace erstellen können, der Zugriff auf das Internet hat, und sie dann in einen Netzwerk-Namespace verschieben können, der zu einem Docker-Container gehört, als einzige Schnittstelle dieses Containers. Dadurch wird sichergestellt, dass der Container nur über einen sicheren, verschlüsselten WireGuard-Tunnel auf das Netzwerk zugreifen kann.
Weitere Informationen Werfen Sie einen Blick auf die Befehle und die Kurzanleitung1), um einen guten Eindruck davon zu bekommen, wie WireGuard in der Praxis verwendet wird. Außerdem gibt es eine Beschreibung des Protokolls, der Kryptografie und des Schlüsselaustauschs2) sowie das technische Whitepaper3), das die meisten Details enthält.
https://www.wireguard.com/quickstart https://www.wireguard.com/protocol/ https://www.wireguard.com/papers/wireguard.pdf
Source Code: https://www.wireguard.com/repositories