
Es ist an der Zeit, dass VPN nicht mehr als exotisches Werkzeug für bärtige Systemadministratoren angesehen wird. Die Anforderungen der Nutzer sind unterschiedlich, doch eines steht fest: VPN wird für alle benötigt.
Das Problem der aktuellen VPN-Lösungen liegt darin, dass sie schwer richtig einzurichten, teuer im Betrieb sind und zudem viel veralteten, fragwürdigen Code enthalten.
Vor einigen Jahren entschied der kanadische Sicherheitsexperte Jason A. Donenfeld, dass es genug ist, und begann mit der Arbeit an . Jetzt wird WireGuard in den Linux-Kernel integriert und hat sogar Lob von auch in .
Die angegebenen Vorteile von WireGuard gegenüber anderen VPN-Lösungen:
- Einfach zu bedienen.
- Verwendet moderne Krypto-Technologien: Noise-Protokoll-Framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF usw.
- Kompakter, lesbarer Code, einfacher auf Schwachstellen zu untersuchen.
- Hohe Performance.
- Eine klare und durchdachte .
Wurde die eierlegende Wollmilchsau gefunden? Ist es an der Zeit, OpenVPN und IPSec zu beerdigen? Ich wollte dem auf den Grund gehen und habe nebenbei ein .
Funktionsweise
Die Funktionsweise lässt sich etwa so beschreiben:
- Ein WireGuard-Interface wird erstellt, ihm wird ein privater Schlüssel und eine IP-Adresse zugewiesen. Die Einstellungen anderer Peers werden geladen: ihre öffentlichen Schlüssel, IP-Adressen usw.
- Alle IP-Pakete, die an das WireGuard-Interface ankommen, werden in UDP gekapselt und an andere Peers.
- Die Kunden geben die öffentliche IP-Adresse des Servers in den Einstellungen an. Der Server ermittelt automatisch die externen Adressen der Kunden, wenn er korrekt authentifizierte Daten erhält.
- Der Server kann die öffentliche IP-Adresse ändern, ohne den Betrieb zu unterbrechen. Dabei sendet er eine Benachrichtigung an die verbundenen Kunden, die ihre Konfiguration sofort aktualisieren.
- Das Konzept der Routing-Kontrolle wird verwendet. . WireGuard empfängt und sendet Pakete auf Grundlage des öffentlichen Schlüssels des Peers. Wenn der Server ein korrekt authentifiziertes Paket entschlüsselt, wird das src-Feld überprüft. Entspricht es der Konfiguration
allowed-ipsdes authentifizierten Peers, so wird das Paket vom WireGuard-Interface akzeptiert. Beim Senden eines Ausgangspakets erfolgt das entsprechende Verfahren: das dst-Feld des Pakets wird genommen, und auf dieser Grundlage wird der passende Peer ausgewählt, das Paket wird mit dem eigenen Schlüssel signiert, mit dem Schlüssel des Peers verschlüsselt und an den Remote-Endpunkt gesendet.
Die gesamte Logik von WireGuard umfasst weniger als 4.000 Codezeilen, während OpenVPN und IPSec Hunderttausende von Zeilen haben. Um moderne Kryptografie-Algorithmen zu unterstützen, wird vorgeschlagen, eine neue kryptografische API in den Linux-Kernel aufzunehmen. Derzeit wird diskutiert, wie erfolgreich diese Idee ist.
Leistung
Der maximale Leistungsunterschied (im Vergleich zu OpenVPN und IPSec) wird auf Linux-Systemen spürbar sein, da WireGuard dort als Kernelmodul implementiert ist. Auch macOS, Android, iOS, FreeBSD und OpenBSD werden unterstützt, jedoch läuft WireGuard dort im Userspace, was sich negativ auf die Leistung auswirkt. Die Unterstützung für Windows wird in naher Zukunft versprochen.
Benchmark-Ergebnisse von :

Meine Erfahrungen mit
Ich bin kein VPN-Setup-Experte. Ich habe einmal OpenVPN manuell eingerichtet und das war sehr mühsam, während ich es bei IPSec gar nicht erst versucht habe. Es müssen zu viele Entscheidungen getroffen werden, und es ist sehr einfach, sich selbst in die Quere zu kommen. Daher habe ich immer auf fertige Skripte zur Servereinrichtung zurückgegriffen.
WireGuard ist aus meiner Sicht der perfekte Nutzer-VPN. Alle low-Level-Lösungen sind in der Spezifikation enthalten, daher dauert die Einrichtung einer typischen VPN-Infrastruktur nur wenige Minuten. Eine fehlerhafte Konfiguration ist praktisch ausgeschlossen.
Installationsprozess auf der offiziellen Website, besonders hervorzuheben ist die hervorragende .
Die Verschlüsselungsschlüssel werden mit dem Tool 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 muss die Serverkonfiguration erstellt werden /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/32und der Tunnel mit folgendem Skript hochgefahren werden wg-quick:
sudo wg-quick up /etc/wireguard/wg0.confIn systemd-basierten Systemen kann stattdessen verwendet werden sudo systemctl start wg-quick@wg0.service.
Auf der Client-Maschine die Konfiguration erstellen /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 # Externe IP des Servers
PersistentKeepalive = 25 Und ebenso den Tunnel hochfahren:
sudo wg-quick up /etc/wireguard/wg0.confJetzt muss noch NAT auf dem Server konfiguriert werden, damit die Clients ins Internet gelangen können, und alles ist bereit!
Die Benutzerfreundlichkeit und die kompakte Code-Basis wurden erreicht, indem auf die Funktionalität der Schlüsselverteilung verzichtet wurde. Es gibt hier kein komplexes Zertifikatsystem und all den unternehmerischen Aufwand; kurze Verschlüsselungsschlüssel werden ungefähr wie SSH-Schlüssel verteilt. Damit ergibt sich jedoch ein Problem: WireGuard wird sich nicht so einfach in einigen bestehenden Netzwerken implementieren lassen.
Zu den Nachteilen gehört, dass WireGuard nicht über HTTP-Proxy funktioniert, da nur das UDP-Protokoll als Transport verfügbar ist. Die Frage stellt sich, ob es möglich sein wird, das Protokoll zu obfuszkieren. Natürlich ist dies nicht die primäre Aufgabe eines VPN, aber bei OpenVPN gibt es beispielsweise Möglichkeiten, sich als HTTPS zu tarnen, was den Menschen in totalitären Staaten hilft, das Internet vollumfänglich zu nutzen.
Fazit
Zusammenfassend lässt sich sagen, dass dies ein sehr interessantes und vielversprechendes Projekt ist, das bereits jetzt auf privaten Servern eingesetzt werden kann. Welcher Vorteil? Hohe Leistung auf Linux-Systemen, einfache Einrichtung und Wartung, sowie ein kompakter und lesbarer Code. Es ist jedoch noch zu früh, um eine komplexe Infrastruktur auf WireGuard umzuschwenken; es lohnt sich, auf die Aufnahme in den Linux-Kernel zu warten.
Um meine (und Ihre) Zeit zu sparen, habe ich entwickelt. Damit können Sie einen persönlichen VPN für sich und Ihre Bekannten aufbauen, ohne viel darüber zu wissen.
Quelle: habr.com
