WireGuard — un VPN minunat al viitorului?

WireGuard — un VPN minunat al viitorului?

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 WireGuard. În prezent, WireGuard se pregătește să fie inclus în nucleul Linux, având chiar și laude din partea lui Linus Torvalds și în Senatul american.

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 specification.

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 un script pentru instalarea automată a unui server VPN personal.

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 sunt livrate în siguranță 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 Cryptokey Routing. 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-ips a 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. ZincÎ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 site-ul oficial:

WireGuard — un VPN minunat al viitorului?

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 este descris detaliat pe site-ul oficial, merită să menționăm în mod special excelenta asistență OpenWRT.

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.conf

Ră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 un installer automat pentru WireGuard. 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

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster