Ist WireGuard das großartige VPN der Zukunft?

Ist WireGuard das großartige VPN der Zukunft?

Die Zeit ist gekommen, in der VPN kein exotisches Tool bärtiger Systemadministratoren mehr ist. Benutzer haben unterschiedliche Aufgaben, aber Fakt ist, dass jeder ein VPN braucht.

Das Problem aktueller VPN-Lösungen besteht darin, dass sie schwierig richtig zu konfigurieren, teuer in der Wartung und voller veralteter Codes von fragwürdiger Qualität sind.

Vor einigen Jahren entschied der kanadische Informationssicherheitsspezialist Jason A. Donenfeld, dass er genug davon hatte und begann mit der Arbeit WireGuard. WireGuard wird nun für die Einbindung in den Linux-Kernel vorbereitet und hat dafür sogar Lob erhalten Linus Torvalds und US-Senat.

Angebliche Vorteile von WireGuard gegenüber anderen VPN-Lösungen:

  • Einfach zu verwenden.
  • Verwendet moderne Kryptographie: Noise-Protokoll-Framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF usw.
  • Kompakter, lesbarer Code, einfacher auf Schwachstellen zu untersuchen.
  • Hohe Leistung.
  • Klar und ausführlich Spezifikation.

Wurde eine Wunderwaffe gefunden? Ist es an der Zeit, OpenVPN und IPSec zu begraben? Ich beschloss, mich damit zu befassen, und gleichzeitig tat ich es auch Skript zur automatischen Installation eines persönlichen VPN-Servers.

Grundsätze der Arbeit

Die Funktionsprinzipien lassen sich etwa so beschreiben:

  • Es wird eine WireGuard-Schnittstelle erstellt und ihr ein privater Schlüssel und eine IP-Adresse zugewiesen. Die Einstellungen anderer Peers werden geladen: deren öffentliche Schlüssel, IP-Adressen usw.
  • Alle an der WireGuard-Schnittstelle ankommenden IP-Pakete werden in UDP und gekapselt sicher geliefert andere Kollegen.
  • Clients geben in den Einstellungen die öffentliche IP-Adresse des Servers an. Der Server erkennt automatisch die externen Adressen von Clients, wenn von ihnen korrekt authentifizierte Daten empfangen werden.
  • Der Server kann die öffentliche IP-Adresse ändern, ohne seine Arbeit zu unterbrechen. Gleichzeitig wird eine Warnung an verbundene Clients gesendet und diese aktualisieren ihre Konfiguration im Handumdrehen.
  • Es wird das Konzept des Routings verwendet Kryptoschlüssel-Routing. WireGuard akzeptiert und sendet Pakete basierend auf dem öffentlichen Schlüssel des Peers. Wenn der Server ein korrekt authentifiziertes Paket entschlüsselt, wird sein src-Feld überprüft. Wenn es mit der Konfiguration übereinstimmt allowed-ips Beim authentifizierten Peer wird das Paket von der WireGuard-Schnittstelle empfangen. Beim Senden eines ausgehenden Pakets erfolgt der entsprechende Vorgang: Das dst-Feld des Pakets wird entnommen und darauf basierend der entsprechende Peer ausgewählt, das Paket wird mit seinem Schlüssel signiert, mit dem Schlüssel des Peers verschlüsselt und an den Remote-Endpunkt gesendet .

Die gesamte Kernlogik von WireGuard benötigt weniger als 4 Codezeilen, während OpenVPN und IPSec Hunderttausende Zeilen umfassen. Zur Unterstützung moderner kryptografischer Algorithmen wird vorgeschlagen, eine neue kryptografische API in den Linux-Kernel aufzunehmen Zink. Derzeit wird darüber diskutiert, ob dies eine gute Idee ist.

Leistung

Der maximale Leistungsvorteil (im Vergleich zu OpenVPN und IPSec) wird sich auf Linux-Systemen bemerkbar machen, da WireGuard dort als Kernel-Modul implementiert ist. Darüber hinaus werden macOS, Android, iOS, FreeBSD und OpenBSD unterstützt, allerdings läuft WireGuard dort im Userspace mit allen daraus resultierenden Performance-Konsequenzen. Es wird erwartet, dass in naher Zukunft Windows-Unterstützung hinzugefügt wird.

Benchmark-Ergebnisse mit offizielle Seite:

Ist WireGuard das großartige VPN der Zukunft?

Meine Nutzungserfahrung

Ich bin kein VPN-Experte. Ich habe OpenVPN einmal manuell eingerichtet, was sehr mühsam war und ich habe IPSec nicht einmal ausprobiert. Es gibt zu viele Entscheidungen zu treffen, da ist es sehr leicht, sich selbst ins Bein zu schießen. Daher habe ich zur Konfiguration des Servers immer vorgefertigte Skripte verwendet.

Daher ist WireGuard aus meiner Sicht grundsätzlich ideal für den Benutzer. Alle Entscheidungen auf niedriger Ebene werden in der Spezifikation getroffen, sodass die Vorbereitung einer typischen VPN-Infrastruktur nur wenige Minuten dauert. Es ist nahezu unmöglich, bei der Konfiguration zu schummeln.

Der Installationsprozess ausführlich beschrieben Auf der offiziellen Website möchte ich das Hervorragende gesondert erwähnen OpenWRT-Unterstützung.

Verschlüsselungsschlüssel werden vom Dienstprogramm generiert wg:

SERVER_PRIVKEY=$( wg genkey )
SERVER_PUBKEY=$( echo $SERVER_PRIVKEY | wg pubkey )
CLIENT_PRIVKEY=$( wg genkey )
CLIENT_PUBKEY=$( echo $CLIENT_PRIVKEY | wg pubkey )

Als nächstes müssen Sie eine Serverkonfiguration erstellen /etc/wireguard/wg0.conf mit folgendem Inhalt:

[Interface]
Address = 10.9.0.1/24
PrivateKey = $SERVER_PRIVKEY
[Peer]
PublicKey = $CLIENT_PUBKEY
AllowedIPs = 10.9.0.2/32

und den Tunnel mit einem Skript errichten wg-quick:

sudo wg-quick up /etc/wireguard/wg0.conf

Auf Systemen mit systemd können Sie stattdessen dies verwenden sudo systemctl start [email protected].

Erstellen Sie auf dem Clientcomputer eine Konfiguration /etc/wireguard/wg0.conf:

[Interface]
PrivateKey = $CLIENT_PRIVKEY
Address = 10.9.0.2/24
[Peer]
PublicKey = $SERVER_PUBKEY
AllowedIPs = 0.0.0.0/0
Endpoint = 1.2.3.4:51820 # Внешний IP сервера
PersistentKeepalive = 25 

Und heben Sie den Tunnel auf die gleiche Weise an:

sudo wg-quick up /etc/wireguard/wg0.conf

Jetzt müssen Sie nur noch NAT auf dem Server konfigurieren, damit Clients auf das Internet zugreifen können, und schon sind Sie fertig!

Diese Benutzerfreundlichkeit und Kompaktheit der Codebasis wurde durch den Wegfall der Schlüsselverteilungsfunktionalität erreicht. Es gibt kein komplexes Zertifikatsystem und all diesen Unternehmenshorror; kurze Verschlüsselungsschlüssel werden ähnlich wie SSH-Schlüssel verteilt. Dies stellt jedoch ein Problem dar: WireGuard wird in einigen bestehenden Netzwerken nicht so einfach zu implementieren sein.

Zu den Nachteilen gehört, dass WireGuard nicht über einen HTTP-Proxy funktioniert, da als Transport nur das UDP-Protokoll zur Verfügung steht. Es stellt sich die Frage: Wird es möglich sein, das Protokoll zu verschleiern? Dies ist natürlich nicht die direkte Aufgabe eines VPN, aber für OpenVPN gibt es beispielsweise Möglichkeiten, sich als HTTPS zu tarnen, was Bewohnern totalitärer Länder hilft, das Internet voll zu nutzen.

Befund

Zusammenfassend ist dies ein sehr interessantes und vielversprechendes Projekt, das Sie bereits auf persönlichen Servern verwenden können. Wie hoch ist der Gewinn? Hohe Leistung auf Linux-Systemen, einfache Einrichtung und Support, kompakte und lesbare Codebasis. Allerdings ist es noch zu früh, eine komplexe Infrastruktur überstürzt auf WireGuard zu übertragen; es lohnt sich, auf deren Aufnahme in den Linux-Kernel zu warten.

Um meine (und Ihre) Zeit zu sparen, habe ich entwickelt Automatisches WireGuard-Installationsprogramm. Mit seiner Hilfe können Sie für sich und Ihre Freunde ein persönliches VPN einrichten, ohne etwas davon zu verstehen.

Source: habr.com

Kommentar hinzufügen