
A venit timpul când VPN nu mai este un instrument exotic rezervat administratorilor de sistem cu barba. Sarcinile utilizatorilor sunt diferite, dar cert este că VPN a devenit necesar pentru toată lumea.
Problema soluțiilor VPN actuale este că sunt greu de configurat corect, costisitor de întreținut și conțin mult cod vechi de calitate discutabilă.
Acum câțiva ani, specialistul canadian în securitate informatică Jason A. Donenfeld a decis că este suficient și a început să lucreze la . În prezent, WireGuard se pregătește să fie inclus în nucleul Linux, având chiar și laude din partea și în .
Avantajele declarate ale WireGuard față de alte soluții VPN:
- Ușor de utilizat.
- Folosește criptografie modernă: Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF etc.
- Cod compact și lizibil, mai ușor de examinat pentru vulnerabilități.
- Performanță ridicată.
- Clar și bine structurat .
Oare s-a găsit glonțul de argint? Este vremea să îngropăm OpenVPN și IPSec? Am decis să investighez această problemă, așa că am creat și .
Principiile de funcționare
Principiile de funcționare pot fi descrise astfel:
- Se creează o interfață WireGuard, căreia i se alocă o cheie privată și o adresă IP. Se încarcă setările celorlalte noduri: cheile lor publice, adresele IP etc.
- Toate pachetele IP care sosesc pe interfața WireGuard sunt încapsulate în UDP și celorlalte noduri.
- Clienții specifică adresa IP publică a serverului în setări. Serverul află automat adresele externe ale clienților atunci când primește datele corect autentificate.
- Serverul poate schimba adresa IP publică fără a întrerupe funcționarea. În acest timp, va trimite o notificare clienților conectați și aceștia își vor actualiza configurația în timp real.
- Se folosește conceptul de rutare . WireGuard primește și trimite pachete pe baza cheii publice a nodului. Când serverul decriptează un pachet corect autentificat, se verifică câmpul său src. Dacă acesta corespunde configurației
allowed-ipsa nodului autentificat, atunci pachetul este acceptat de interfața WireGuard. La trimiterea unui pachet de ieșire, se desfășoară o procedură similară: se ia câmpul dst al pachetului și pe baza acestuia se selectează nodul corespunzător, pachetul este semnat cu propria cheie, criptat cu cheia nodului și trimis la punctul de contact remote.
Toată logica principală a WireGuard ocupă mai puțin de 4000 de linii de cod, în timp ce OpenVPN și IPSec au sute de mii de linii. Pentru a sprijini algoritmii criptografici moderni, se propune includerea unui nou API criptografic în nucleul Linux. În prezent, se discută cât de bună este această idee.
Performanță
Avantajul maxim în performanță (comparativ cu OpenVPN și IPSec) va fi evident pe sistemele Linux, deoarece acolo WireGuard este implementat ca un modul de kernel. În plus, sunt suportate macOS, Android, iOS, FreeBSD și OpenBSD, dar în acestea WireGuard rulează în userspace, ceea ce afectează performanța. Suportul pentru Windows este promis în viitorul apropiat.
Rezultatele benchmark-urilor cu :

Experiența mea de utilizare
Nu sunt expert în configurarea VPN-urilor. Odată am configurat manual OpenVPN și a fost foarte complicat, iar cu IPSec nici măcar nu am încercat. Trebuie să iei prea multe decizii, este foarte ușor să te accidentezi. De aceea, am folosit întotdeauna scripturi gata făcute pentru a configura serverul.
Așadar, WireGuard, din punctul meu de vedere, este absolut ideal pentru utilizatori. Toate deciziile de nivel înalt sunt incluse în specificație, așa că procesul de pregătire a unei infrastructuri VPN tipice durează doar câteva minute. E aproape imposibil să greșești în configurație.
Procesul de instalare pe site-ul oficial, merită să menționăm în mod special excelenta .
Cheile de criptare sunt generate cu ajutorul utilitarului wg:
SERVER_PRIVKEY=$( wg genkey )
SERVER_PUBKEY=$( echo $SERVER_PRIVKEY | wg pubkey )
CLIENT_PRIVKEY=$( wg genkey )
CLIENT_PUBKEY=$( echo $CLIENT_PRIVKEY | wg pubkey )Apoi, trebuie creat configh-ul serverului /etc/wireguard/wg0.conf cu următorul conținut:
[Interface]
Address = 10.9.0.1/24
PrivateKey = $SERVER_PRIVKEY
[Peer]
PublicKey = $CLIENT_PUBKEY
AllowedIPs = 10.9.0.2/32și să ridici tunelul cu un script wg-quick:
sudo wg-quick up /etc/wireguard/wg0.confÎn sistemele cu systemd, în loc de aceasta poți folosi sudo systemctl start wg-quick@wg0.service.
Pe mașina client, trebuie să creezi un config /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-ul extern al serverului
PersistentKeepalive = 25 Și, exact astfel, să ridici tunelul:
sudo wg-quick up /etc/wireguard/wg0.confRămâne să configurezi NAT pe server, astfel încât clienții să poată ieși pe Internet, și totul este gata!
Această simplitate de utilizare și compactitate a codului au fost realizate prin renunțarea la funcționalitatea de distribuție a cheilor. Nu există un sistem complex de certificate și toate aceste grozăvii corporative; cheile de criptare scurte sunt distribuite aproximativ ca și cheile SSH. Dar, în legătură cu aceasta, apare o problemă: WireGuard nu va fi atât de ușor de introdus în unele rețele deja existente.
Dintre dezavantajele menționate, trebuie să ținem cont că WireGuard nu funcționează prin proxy HTTP, deoarece transportul disponibil este doar protocolul UDP. Se ridică întrebarea, este posibil să obfuschez protocolul? Desigur, aceasta nu este o sarcină directă a unui VPN, dar pentru OpenVPN, de exemplu, există metode de mascare sub HTTPS, ceea ce ajută locuitorii țărilor totalitare să folosească Internetul în mod eficient.
Conclusions
În concluzie, acesta este un proiect foarte interesant și promițător, pe care îl putem folosi deja pe serverele personale. Ce beneficii aduce? Performanță ridicată pe sistemele Linux, ușurință în configurare și întreținere, bază de cod compactă și ușor de citit. Totuși, este prea devreme să ne grăbim să migrăm întreaga infrastructură pe WireGuard, mai bine așteptăm integrarea în nucleul Linux.
Pentru a economisi timpul meu (și al vostru), am dezvoltat . Cu ajutorul său, puteți configura un VPN personal pentru voi și cunoștințele voastre chiar și fără a avea cunoștințe tehnice.
Sursa: habr.com
