Es ist die Zeit gekommen, in der VPN für bärtige Systemadministratoren kein exotisches Werkzeug mehr ist. Benutzer haben unterschiedliche Aufgaben, aber Tatsache ist, dass jeder ein VPN benötigt.
Das Problem bei aktuellen VPN-Lösungen besteht darin, dass sie schwer korrekt zu konfigurieren sind, teuer in der Wartung sind und außerdem über viel Legacy-Code von zweifelhafter Qualität verfügen.
Vor einigen Jahren entschied der kanadische Informationssicherheitsspezialist Jason A. Donenfeld, dass er dies ertragen musste, und begann mit der Arbeit an WireGuard . Jetzt bereitet sich WireGuard auf die Aufnahme in den Linux-Kernel vor und wurde sogar von Linus Torvalds und dem US-Senat gelobt.
Die erklärten Vorteile von WireGuard gegenüber anderen VPN-Lösungen:
- Einfach zu bedienen.
- Verwendet moderne Kryptographie: Rauschprotokoll-Framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF usw.
- Kompakter lesbarer Code, der leichter auf Schwachstellen untersucht werden kann.
- Hohe Leistung.
- Klare und detaillierte Spezifikation .
Wird eine Silberkugel gefunden? Ist es Zeit, in OpenVPN und IPSec zu graben? Ich habe mich dazu entschlossen und gleichzeitig ein Skript erstellt, um automatisch einen persönlichen VPN-Server zu installieren .
Arbeitsprinzipien
Die Funktionsprinzipien können wie folgt beschrieben werden:
- Es wird eine WireGuard-Schnittstelle erstellt, der ein privater Schlüssel und eine IP-Adresse zugewiesen werden. Die Einstellungen anderer Peers werden geladen: ihre öffentlichen Schlüssel, IP-Adressen usw.
- Alle IP-Pakete, die an der WireGuard-Schnittstelle ankommen, werden in UDP gekapselt und sicher an andere Peers gesendet.
- Clients legen in den Einstellungen die öffentliche IP-Adresse des Servers fest. Der Server erkennt automatisch die externen Adressen von Clients, wenn korrekt authentifizierte Daten von ihnen stammen.
- Der Server kann die öffentliche IP-Adresse ändern, ohne die Arbeit zu unterbrechen. Gleichzeitig sendet er eine Warnung an verbundene Clients und diese aktualisieren ihre Konfiguration im laufenden Betrieb.
- Das Cryptokey Routing- Konzept wird verwendet . WireGuard empfängt 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
allowed-ips
authentifizierten allowed-ips
übereinstimmt, wird das Paket von der WireGuard-Schnittstelle empfangen. Beim Senden eines ausgehenden Pakets tritt die entsprechende Prozedur auf: Das dst-Feld des Pakets wird genommen und der entsprechende Peer wird basierend darauf ausgewählt, das Paket wird mit seinem eigenen Schlüssel signiert, mit dem Peer-Schlüssel verschlüsselt und an den entfernten Endpunkt gesendet.
Die gesamte Kernlogik von WireGuard belegt weniger als 4.000 Codezeilen, während OpenVPN und IPSec Hunderttausende von Zeilen enthalten. Zur Unterstützung moderner kryptografischer Algorithmen wird vorgeschlagen, die neue kryptografische Zink- API in den Linux-Kernel aufzunehmen. Im Moment wird diskutiert, wie gut diese Idee ist.
Leistung
Der maximale Leistungsvorteil (im Vergleich zu OpenVPN und IPSec) macht sich auf Linux-Systemen bemerkbar, da dort WireGuard als Kernelmodul implementiert ist. Darüber hinaus werden macOS, Android, iOS, FreeBSD und OpenBSD unterstützt, aber WireGuard wird im Benutzerbereich mit allen daraus resultierenden Auswirkungen auf die Leistung ausgeführt. Windows verspricht, in naher Zukunft Unterstützung hinzuzufügen.
Benchmark-Ergebnisse von der offiziellen Website :

Meine Nutzungserfahrung
Ich bin kein Experte für VPN-Setup. Einmal habe ich OpenVPN mit Handles konfiguriert und es war sehr trostlos, aber IPSec hat es nicht einmal versucht. Es müssen zu viele Entscheidungen getroffen werden, es ist sehr einfach, sich in den Fuß zu schießen. Daher habe ich immer vorgefertigte Skripte verwendet, um den Server zu konfigurieren.
Daher ist WireGuard aus meiner Sicht im Allgemeinen 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 fast unmöglich, sich in der Konfiguration anzusammeln.
Der Installationsprozess ist auf der offiziellen Website ausführlich beschrieben. Ich möchte die hervorragende Unterstützung für OpenWRT erwähnen .
Verschlüsselungsschlüssel werden vom Dienstprogramm wg
generiert:
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 die Serverkonfiguration /etc/wireguard/wg0.conf
mit den folgenden Inhalten erstellen:
[Interface] Address = 10.9.0.1/24 PrivateKey = $SERVER_PRIVKEY [Peer] PublicKey = $CLIENT_PUBKEY AllowedIPs = 10.9.0.2/32
und heben Sie den Tunnel mit dem wg-quick
Skript an:
sudo wg-quick up /etc/wireguard/wg0.conf
Auf Systemen mit systemd können Sie sudo systemctl start wg-quick@wg0.service
.
Erstellen Sie auf dem /etc/wireguard/wg0.conf
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
Es bleibt, NAT auf dem Server so zu konfigurieren, dass Clients auf das Internet zugreifen können, und fertig!
Eine solche Benutzerfreundlichkeit und Kompaktheit der Codebasis wurde aufgrund der Ablehnung der Schlüsselverteilungsfunktionalität erreicht. Es gibt kein kompliziertes Zertifikatsystem und all diesen Firmenhorror: Kurze Verschlüsselungsschlüssel werden ungefähr wie SSH-Schlüssel verteilt. In diesem Zusammenhang tritt jedoch ein Problem auf: WireGuard lässt sich in einigen vorhandenen Netzwerken nicht so einfach implementieren.
Von den Mängeln ist anzumerken, dass WireGuard nicht über einen HTTP-Proxy funktioniert, da es nur ein UDP-Protokoll als Transport gibt. Die Frage ist, ist es möglich, das Protokoll zu verschleiern? Dies ist natürlich keine direkte VPN-Aufgabe, aber für OpenVPN gibt es beispielsweise Möglichkeiten, sich als HTTPS zu tarnen, was den Bewohnern totalitärer Länder hilft, das Internet vollständig zu nutzen.
Schlussfolgerungen
Zusammenfassend ist dies ein sehr interessantes und vielversprechendes Projekt, das Sie jetzt auf Personal Servern verwenden können. Was ist der Gewinn? Hohe Leistung auf Linux-Systemen, einfache Einrichtung und Unterstützung, kompakte und lesbare Codebasis. Es ist jedoch zu früh, um die Übertragung komplexer Infrastrukturen auf WireGuard zu beschleunigen. Es lohnt sich, auf die Aufnahme in den Linux-Kernel zu warten.
Um meine (und Ihre) Zeit zu sparen, habe ich das automatische WireGuard-Installationsprogramm entwickelt . Damit können Sie ein persönliches VPN für sich und Ihre Freunde erstellen, ohne etwas darüber zu verstehen.