Je li WireGuard sjajan VPN budućnosti?

Je li WireGuard sjajan VPN budućnosti?

Došlo je vrijeme kada VPN više nije neki egzotični alat bradatih sistem administratora. Korisnici imaju različite zadatke, ali činjenica je da svatko treba VPN.

Problem s trenutnim VPN rješenjima je taj što ih je teško ispravno konfigurirati, skupi su za održavanje i puni su naslijeđenog koda upitne kvalitete.

Prije nekoliko godina, kanadski stručnjak za informacijsku sigurnost Jason A. Donenfeld odlučio je da mu je dosta toga i počeo je raditi na WireGuard. WireGuard se sada priprema za uključivanje u Linux kernel i čak je dobio pohvale od Linus Torvalds i američki Senat.

Navedene prednosti WireGuarda u odnosu na druga VPN rješenja:

  • Jednostavan za korištenje.
  • Koristi modernu kriptografiju: Noise protokol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF itd.
  • Kompaktan, čitljiv kod, lakši za istraživanje ranjivosti.
  • Visoke performanse.
  • Jasno i razrađeno specifikacija.

Je li pronađen srebrni metak? Je li vrijeme da pokopamo OpenVPN i IPSec? Odlučio sam se pozabaviti ovim, a ujedno i jesam skripta za automatsku instalaciju osobnog VPN poslužitelja.

Načela rada

Principi rada mogu se opisati otprilike ovako:

  • Kreira se WireGuard sučelje i dodjeljuju mu se privatni ključ i IP adresa. Učitavaju se postavke drugih peerova: njihovi javni ključevi, IP adrese itd.
  • Svi IP paketi koji stižu na WireGuard sučelje su enkapsulirani u UDP i isporučeno sigurno drugi vršnjaci.
  • Klijenti u postavkama navode javnu IP adresu poslužitelja. Poslužitelj automatski prepoznaje vanjske adrese klijenata kada od njih primi ispravno provjerene podatke.
  • Poslužitelj može promijeniti javnu IP adresu bez prekida rada. Istodobno će poslati upozorenje povezanim klijentima i oni će ažurirati svoju konfiguraciju u hodu.
  • Koristi se koncept usmjeravanja Usmjeravanje kriptoključa. WireGuard prihvaća i šalje pakete na temelju ravnopravnog javnog ključa. Kada poslužitelj dekriptira ispravno autentificirani paket, provjerava se njegovo polje src. Ako odgovara konfiguraciji allowed-ips autentificiranog peera, paket prima sučelje WireGuard. Prilikom slanja odlaznog paketa događa se odgovarajuća procedura: preuzima se dst polje paketa i na temelju njega odabire odgovarajući peer, paket se potpisuje njegovim ključem, šifrira ključem peer-a i šalje na udaljenu krajnju točku. .

Sva ključna logika WireGuarda zauzima manje od 4 tisuće redaka koda, dok OpenVPN i IPSec imaju stotine tisuća redaka. Za podršku modernim kriptografskim algoritmima, predlaže se uključivanje novog kriptografskog API-ja u Linux kernel cink. Trenutno se vodi rasprava o tome je li to dobra ideja.

Performanse

Maksimalna prednost performansi (u usporedbi s OpenVPN i IPSec) bit će vidljiva na Linux sustavima, budući da je WireGuard tamo implementiran kao kernel modul. Osim toga, podržani su macOS, Android, iOS, FreeBSD i OpenBSD, ali u njima WireGuard radi u korisničkom prostoru sa svim posljedicama na performanse. Očekuje se da će podrška za Windows biti dodana u bliskoj budućnosti.

Rezultati benchmarka s službena stranica:

Je li WireGuard sjajan VPN budućnosti?

Moje iskustvo korištenja

Nisam stručnjak za VPN. Jednom sam ručno postavio OpenVPN i bilo je jako zamorno, a IPSec nisam ni probao. Previše je odluka za donijeti, vrlo je lako pucati sebi u nogu. Stoga sam uvijek koristio gotove skripte za konfiguriranje poslužitelja.

Dakle, WireGuard je, s moje točke gledišta, općenito idealan za korisnika. Sve odluke niske razine donose se u specifikaciji, tako da proces pripreme tipične VPN infrastrukture traje samo nekoliko minuta. Gotovo je nemoguće varati u konfiguraciji.

Postupak instalacije detaljno opisano na službenoj web stranici, želio bih posebno istaknuti izvrsno OpenWRT podrška.

Ključeve za šifriranje generira uslužni program wg:

SERVER_PRIVKEY=$( wg genkey )
SERVER_PUBKEY=$( echo $SERVER_PRIVKEY | wg pubkey )
CLIENT_PRIVKEY=$( wg genkey )
CLIENT_PUBKEY=$( echo $CLIENT_PRIVKEY | wg pubkey )

Zatim trebate izraditi konfiguraciju poslužitelja /etc/wireguard/wg0.conf sa sljedećim sadržajem:

[Interface]
Address = 10.9.0.1/24
PrivateKey = $SERVER_PRIVKEY
[Peer]
PublicKey = $CLIENT_PUBKEY
AllowedIPs = 10.9.0.2/32

i podići tunel skriptom wg-quick:

sudo wg-quick up /etc/wireguard/wg0.conf

Na sustavima sa systemd možete koristiti ovo umjesto sudo systemctl start [email protected].

Na klijentskom računalu stvorite 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 # Внешний IP сервера
PersistentKeepalive = 25 

I podignite tunel na isti način:

sudo wg-quick up /etc/wireguard/wg0.conf

Sve što preostaje je konfigurirati NAT na poslužitelju kako bi klijenti mogli pristupiti internetu i gotovi ste!

Ova jednostavnost korištenja i kompaktnost baze koda postignuta je eliminacijom funkcionalnosti distribucije ključa. Ne postoji složen sustav certifikata i sav taj korporativni užas; kratki ključevi za šifriranje distribuiraju se slično kao SSH ključevi. Ali to predstavlja problem: WireGuard neće biti tako lako implementirati na neke postojeće mreže.

Među nedostacima, vrijedi napomenuti da WireGuard neće raditi putem HTTP proxyja, budući da je samo UDP protokol dostupan kao prijenos. Postavlja se pitanje: hoće li biti moguće zamagliti protokol? Naravno, to nije izravna zadaća VPN-a, ali za OpenVPN, na primjer, postoje načini da se maskira u HTTPS, što pomaže stanovnicima totalitarnih zemalja u potpunosti koristiti Internet.

Zaključci

Ukratko, ovo je vrlo zanimljiv i obećavajući projekt, već ga možete koristiti na osobnim poslužiteljima. Kolika je zarada? Visoke performanse na Linux sustavima, jednostavnost postavljanja i podrške, kompaktna i čitljiva baza koda. Međutim, prerano je žuriti s prijenosom složene infrastrukture na WireGuard; vrijedi pričekati njegovo uključivanje u jezgru Linuxa.

Kako bih uštedio svoje (i vaše) vrijeme, razvio sam WireGuard automatski instalacijski program. Uz njegovu pomoć možete postaviti osobni VPN za sebe i svoje prijatelje, a da uopće ne razumijete ništa o tome.

Izvor: www.habr.com

Dodajte komentar