
A sosit momentul în care VPN-ul nu mai este un instrument exotic al administratorilor de sistem cu barbă. Utilizatorii au sarcini diferite, dar adevărul este că toată lumea are nevoie de un VPN.
Problema cu soluțiile VPN actuale este că sunt dificil de configurat corect, costisitoare de întreținut și sunt pline de coduri vechi de o calitate îndoielnică.
Cu câțiva ani în urmă, specialistul canadian în securitatea informațiilor Jason A. Donenfeld a decis că s-a săturat și a început să lucreze la . imediat WireGuard este pregătită pentru includerea în nucleu Linux, a primit chiar laude de la și .
Beneficii revendicate WireGuard față de alte soluții VPN:
- Ușor de folosit.
- Utilizează criptografia modernă: Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF etc.
- Cod compact, lizibil, mai ușor de investigat pentru vulnerabilități.
- Performanta ridicata.
- Clar și elaborat .
A fost găsit glonțul de argint? OpenVPN Și oare e timpul să îngropăm IPSec-ul? Am decis să rezolv asta și, în același timp, am făcut... .
Principiile muncii
Principiile de funcționare pot fi descrise cam așa:
- Creată WireGuard Unei interfețe i se atribuie o cheie privată și o adresă IP. Sunt încărcate setările altor parteneri: cheile lor publice, adresele IP etc.
- Toate pachetele IP care ajung la WireGuard interfața este încapsulată în UDP și alți semeni.
- Clienții specifică adresa IP publică a serverului în setări. Serverul recunoaște automat adresele externe ale clienților atunci când sunt primite de la aceștia date autentificate corect.
- Serverul poate schimba adresa IP publică fără a-și întrerupe activitatea. În același timp, va trimite o alertă clienților conectați și aceștia își vor actualiza configurația din mers.
- Este folosit conceptul de rutare . WireGuard Primește și trimite pachete pe baza cheii publice a peer-ului. Când serverul decriptează un pachet autentificat corect, câmpul src al acestuia este verificat. Dacă se potrivește cu configurația,
allowed-ipspeer autentificat, atunci pachetul este acceptat de interfață WireGuardLa trimiterea unui pachet de ieșire, are loc următoarea procedură: se preia câmpul dst al pachetului și, pe baza acestuia, se selectează peer-ul corespunzător. Pachetul este semnat cu propria cheie, criptat cu cheia peer-ului și trimis către endpoint-ul la distanță.
Toată logica de bază WireGuard necesită mai puțin de 4 mii de linii de cod, în timp ce OpenVPN și IPSec au sute de mii de linii de cod. Pentru a suporta algoritmii criptografici moderni, se propune includerea lor în kernel. Linux noua API criptografică . În prezent, există o discuție despre dacă aceasta este o idee bună.
productivitate
Avantaj maxim de performanță (comparativ cu OpenVPN și IPSec) vor fi vizibile pe Linux sisteme, deoarece există WireGuard implementat ca modul de kernel. În plus, suportă macOS, Android, iOS, FreeBSD și OpenBSD, dar în ele WireGuard este executat în spațiul utilizatorului cu toate implicațiile de performanță rezultate. Suport Windows Ei promit să-l adauge în viitorul apropiat.
Rezultatele de referință cu :

Experiența mea de utilizare
Nu sunt expert în configurarea unui VPN. Am configurat unul odată. OpenVPN Am făcut-o manual și a fost o adevărată bătaie de cap, și nici măcar nu m-am obosit să încerc IPSec. Sunt prea multe decizii de luat și e ușor să te împuști singur în picior. De aceea am folosit întotdeauna scripturi predefinite pentru a configura serverul.
acum, WireGuard, în opinia mea, este absolut ideal pentru utilizator. Toate deciziile de nivel scăzut sunt luate în considerare în specificații, așa că configurarea unei infrastructuri VPN tipice durează doar câteva minute. Este practic imposibil să strici configurația.
Procesul de instalare pe site-ul oficial, aș dori să notez separat excelentul .
Cheile de criptare sunt generate de utilitar 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 să creați o configurare a serverului /etc/wireguard/wg0.conf cu urmatorul continut:
[Interface]
Address = 10.9.0.1/24
PrivateKey = $SERVER_PRIVKEY
[Peer]
PublicKey = $CLIENT_PUBKEY
AllowedIPs = 10.9.0.2/32și ridicați tunelul cu un script wg-quick:
sudo wg-quick up /etc/wireguard/wg0.confPe sistemele cu systemd, puteți utiliza acest lucru sudo systemctl start wg-quick@wg0.service.
Pe computerul client, creați o 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 сервера
PersistentKeepalive = 25 Și ridicați tunelul în același mod:
sudo wg-quick up /etc/wireguard/wg0.confTot ce rămâne este să configurați NAT pe server, astfel încât clienții să poată accesa Internetul și gata!
Această ușurință în utilizare și baza de cod compactă au fost obținute prin eliminarea funcționalității de distribuție a cheilor. Nu există un sistem complex de certificate sau dificultăți corporative; cheile scurte de criptare sunt distribuite la fel ca cheile SSH. Totuși, acest lucru ridică o problemă: WireGuard Nu va fi ușor de implementat în unele rețele existente.
Printre dezavantaje este de remarcat faptul că WireGuard Nu va funcționa printr-un proxy HTTP, deoarece singurul protocol de transport este UDP. Se pune întrebarea: va fi posibilă ofuscarea protocolului? Desigur, aceasta nu este o sarcină directă pentru un VPN, dar pentru OpenVPNDe exemplu, există modalități de a te deghiza în HTTPS, ceea ce îi ajută pe locuitorii țărilor totalitare să utilizeze pe deplin internetul.
Constatări
Pe scurt, acesta este un proiect foarte interesant și promițător; îl puteți utiliza deja pe servere personale. Care este beneficiul? Performanță ridicată pe Linux sisteme, ușurință în configurare și asistență, bază de cod compactă și ușor de citit. Cu toate acestea, graba de a transfera o infrastructură complexă către WireGuard E încă devreme, merită să așteptăm includerea în nucleu. Linux.
Pentru a economisi timpul meu (și al tău) am dezvoltat . Cu ajutorul acestuia, poți configura un VPN personal pentru tine și prietenii tăi, fără să înțelegi nimic despre el.
Sursa: www.habr.com
