
Prišel je čas, ko VPN ni več eksotično orodje bradatih sistemskih skrbnikov. Uporabniki imajo različne naloge, a dejstvo je, da VPN potrebujemo skoraj vsi.
Težava aktualnih VPN rešitev je v tem, da jih je težko pravilno nastaviti, drago jih je vzdrževati, poleg tega pa vsebujejo veliko dediščine dvomljive kakovosti.
Pred nekaj leti je kanadski strokovnjak za informacijsko varnost Jason A. Donenfeld sklenil, da je dovolj in začel delati na . Danes se WireGuard pripravlja na vključitev v jedro Linuxa in je celo prejel pohvale od in v .
Izpostavljene prednosti WireGuard pred drugimi VPN rešitvami:
- Enostaven za uporabo.
- Uporablja sodobno kriptografijo: Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF itd.
- Kompaktna in berljiva koda, lažje raziskovati na ranljivosti.
- Visoke performanse.
- Jasno in premišljeno .
Ali je res najdena srebrna krogla? Čas je, da pokopljemo OpenVPN in IPSec? Odločil sem se, da to razjasnim, ob tem pa sem naredil .
Načela delovanja
Načela delovanja lahko opišemo približno takole:
- Ustvari se WireGuard vmesnik, dodeli mu se zasebni ključ in IP naslov. Naložijo se nastavitve drugih peers: njihovi javni ključi, IP naslovi itd.
- Vsi IP paketi, ki prispejo na WireGuard vmesnik, se encapsulirajo v UDP in drugim peers.
- Stranke v nastavitvah določijo javni IP naslov strežnika. Strežnik samodejno spozna zunanje naslove strank, ko od njih prejme pravilno overjene podatke.
- Strežnik lahko spremeni javni IP naslov, ne da bi prekinil delovanje. Ob tem pošlje obvestilo povezanih strankam, ki nato posodobijo svojo konfiguracijo v realnem času.
- Uporablja se koncept usmerjanja . WireGuard sprejema in pošilja pakete na podlagi javnega ključa peers. Ko strežnik pravilno dešifrira overjen paket, preveri njegovo src polje. Če se ujema s konfiguracijo
allowed-ipsoverjenega peers, se paket sprejme na WireGuard vmesniku. Pri pošiljanju izhodnega paketa se izvede ustrezen postopek: vzame se dst polje paketa in na njegovi podlagi se izbere ustrezni peer, paket se podpiše z lastnim ključem, šifriran s peerovim ključem in se pošlje na oddaljeno točko.
Vsa osnovna logika WireGuard zavzema manj kot 4.000 vrstic kode, medtem ko OpenVPN in IPSec imata na tisoče vrstic. Za podporo sodobnim kripto algoritmom se predlaga, da se vključi nov kriptografski API v jedro Linuxa. Trenutno se raspravlja o tome koliko je to dobra ideja.
Performansa
Maksimalna prednost u performansama (u poređenju sa OpenVPN i IPSec) biće primetna na Linux sistemima, jer je WireGuard implementiran kao modul jezgra. Takođe podržani su macOS, Android, iOS, FreeBSD i OpenBSD, ali se na njima WireGuard izvršava u korisničkom prostoru sa svim posljedicama po performanse. Podrška za Windows najavljena je za skoro.
Rezultati benchmarka sa :

Moj iskustvo korišćenja
Nisam stručnjak za podešavanje VPN-a. Jednom sam podešavao OpenVPN ručno i to je bilo prilično iscrpljujuće, a IPSec nikad nisam ni pokušavao. Previše odluka treba doneti, lako se može napraviti greška. Zato sam uvek koristio gotove skripte za postavljanje servera.
Dakle, WireGuard je, po mom mišljenju, apsolutno idealan za korisnike. Sva niskonivenska rešenja su obuhvaćena specifikacijom, tako da priprema tipične VPN infrastrukture traje samo nekoliko minuta. Gotovo je nemoguće napraviti grešku u konfiguraciji.
Postopek namestitve na uradni spletni strani, posebej želim poudariti odlično .
Ključevi za šifrovanje se generišu putem alata wg:
SERVER_PRIVKEY=$( wg genkey )
SERVER_PUBKEY=$( echo $SERVER_PRIVKEY | wg pubkey )
CLIENT_PRIVKEY=$( wg genkey )
CLIENT_PUBKEY=$( echo $CLIENT_PRIVKEY | wg pubkey )Zatim je potrebno kreirati server konfiguraciju /etc/wireguard/wg0.conf med følgende indhold:
[Interface]
Address = 10.9.0.1/24
PrivateKey = $SERVER_PRIVKEY
[Peer]
PublicKey = $CLIENT_PUBKEY
AllowedIPs = 10.9.0.2/32i podići tunel skriptom wg-quick:
sudo wg-quick up /etc/wireguard/wg0.confNa sistemima sa systemd, umesto toga možete koristiti sudo systemctl start wg-quick@wg0.service.
Na klijentskom računaru, kreirati konfiguraciju /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 # Spoljni IP servera
PersistentKeepalive = 25 I na isti način podići tunel:
sudo wg-quick up /etc/wireguard/wg0.confPreostaje podesiti NAT na serveru kako bi klijenti mogli da izlaze na Internet, i sve je spremno!
Ovu jednostavnost korišćenja i kompaktnost kôda postignuta je odbacivanjem funkcionalnosti distribucije ključeva. Nema složenog sistema sertifikata i svega tog korporativnog užasa, kratki ključevi šifrovanja se distribuiraju otprilike kao SSH ključevi. Međutim, to donosi problem: neće biti jednostavno implementirati WireGuard u nekim već postojećim mrežama.
Med pomanjkljivostmi je treba omeniti, da WireGuard ne deluje preko HTTP proxy, saj kot transport uporablja samo protokol UDP. Pojavi se vprašanje, ali bi bilo mogoče protokol obfucirati? Seveda to ni neposredno naloga VPN, vendar za OpenVPN na primer obstajajo načini za maskiranje pod HTTPS, kar pomaga prebivalcem totalitarnih držav, da v polni meri uporabljajo internet.
Zaključki
Na kratko, to je zelo zanimiv in obetaven projekt, ki ga je mogoče že zdaj uporabljati na osebnih strežnikih. Kakšna je prednost? Visoka zmogljivost na sistemih Linux, enostavna nastavitev in podpora, kompaktna in berljiva koda. Vendar pa je prezgodaj, da bi se hitro preusposobili na kompleksno infrastrukturo WireGuard, zato je bolje počakati na vključitev v jedro Linux.
Za varčevanje s svojim (in vašim) časom sem razvil . Z njegovo pomočjo lahko postavite osebni VPN zase in svoje znance, ne da bi morali kaj vedeti o tem.
Izvor: habr.com
