Da li je WireGuard odličan VPN budućnosti?

Da li je WireGuard odličan VPN budućnosti?

Došlo je vrijeme kada VPN više nije neka egzotična alatka bradatih sistem administratora. Korisnici imaju različite zadatke, ali činjenica je da svima treba VPN.

Problem sa trenutnim VPN rješenjima je što ih je teško ispravno konfigurirati, skupo ih je održavati i što su puna naslijeđenog koda upitnog kvaliteta.

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

Tvrđene prednosti WireGuarda u odnosu na druga VPN rješenja:

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

Da li je pronađen srebrni metak? Da li je vrijeme da zakopamo OpenVPN i IPSec? Odlučio sam da se pozabavim ovim, a u isto vreme i jesam skripta za automatsko instaliranje ličnog VPN servera.

Načela rada

Principi rada mogu se opisati otprilike ovako:

  • WireGuard sučelje je kreirano i privatni ključ i IP adresa su mu dodijeljeni. Učitavaju se postavke drugih kolega: njihovi javni ključevi, IP adrese itd.
  • Svi IP paketi koji pristižu na WireGuard interfejs su inkapsulirani u UDP i isporučeno bezbedno drugi vršnjaci.
  • Klijenti određuju javnu IP adresu servera u postavkama. Server automatski prepoznaje eksterne adrese klijenata kada od njih primi ispravno autentifikovane podatke.
  • Server može promijeniti javnu IP adresu bez prekidanja rada. U isto vrijeme, on će poslati upozorenje povezanim klijentima i oni će ažurirati svoju konfiguraciju u hodu.
  • Koristi se koncept rutiranja Cryptokey Routing. WireGuard prihvata i šalje pakete na osnovu javnog ključa peer-a. Kada server dešifruje ispravno autentifikovani paket, provjerava se njegovo src polje. Ako odgovara konfiguraciji allowed-ips autentificirani peer, paket prima WireGuard interfejs. Prilikom slanja odlaznog paketa, odvija se odgovarajuća procedura: uzima se dst polje paketa i na osnovu njega se bira odgovarajući peer, paket se potpisuje svojim ključem, šifrira ključem ravnopravnog partnera i šalje na udaljenu krajnju tačku .

Sva osnovna logika WireGuarda zauzima manje od 4 hiljade linija koda, dok OpenVPN i IPSec imaju stotine hiljada linija. Kako bi se podržali moderni kriptografski algoritmi, predlaže se da se u Linux kernel uključi novi kriptografski API cink. Trenutno se vodi rasprava o tome da li je to dobra ideja.

Produktivnost

Maksimalna prednost performansi (u odnosu na OpenVPN i IPSec) bit će primjetna na Linux sistemima, jer 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 performansi. Očekuje se da će Windows podrška biti dodata u bliskoj budućnosti.

Benchmark rezultate sa službene stranice:

Da li je WireGuard odličan VPN budućnosti?

Moje iskustvo korišćenja

Nisam stručnjak za VPN. Jednom sam ručno podesio OpenVPN i bilo je jako zamorno, a nisam ni probao IPSec. Previše je odluka koje treba donijeti, vrlo je lako pucati sebi u nogu. Stoga sam uvijek koristio gotove skripte za konfiguraciju servera.

Dakle, WireGuard je, sa moje tačke gledišta, generalno idealan za korisnika. Sve odluke niskog nivoa 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 napomenuti odličan 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 morate kreirati konfiguraciju servera /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 podignite tunel sa skriptom wg-quick:

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

Na sistemima sa systemd-om možete koristiti ovo umjesto toga sudo systemctl start [email protected].

Na klijentskoj mašini kreirajte 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

Ostaje samo da konfigurišete NAT na serveru tako da klijenti mogu da pristupe Internetu i gotovi ste!

Ova jednostavnost upotrebe i kompaktnost baze koda postignuta je eliminacijom funkcionalnosti distribucije ključeva. Ne postoji složen sistem sertifikata i sav ovaj korporativni užas; kratki ključevi za šifrovanje se distribuiraju slično kao SSH ključevi. Ali ovo predstavlja problem: WireGuard neće biti tako lako implementirati na nekim postojećim mrežama.

Među nedostacima, vrijedi napomenuti da WireGuard neće raditi preko HTTP proxyja, jer je samo UDP protokol dostupan kao transport. Postavlja se pitanje: hoće li biti moguće zamagliti protokol? Naravno, to nije direktan zadatak VPN-a, ali za OpenVPN, na primjer, postoje načini da se preruši u HTTPS, koji pomaže stanovnicima totalitarnih zemalja da u potpunosti koriste internet.

nalazi

Da sumiramo, ovo je vrlo zanimljiv i obećavajući projekat, već ga možete koristiti na ličnim serverima. Koja je zarada? Visoke performanse na Linux sistemima, jednostavnost podešavanja i podrške, kompaktna i čitljiva baza koda. Međutim, prerano je žuriti s prijenosom složene infrastrukture na WireGuard; vrijedi pričekati njeno uključivanje u Linux kernel.

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

izvor: www.habr.com

Dodajte komentar