
On aeg, mil VPN ei ole enam eksootiline tööriist bragard-süsteemide haldajate jaoks. Kasutajatel on erinevad vajadused, kuid tõsiasi on see, et VPN on vajalik kõigile.
Praeguste VPN-lahenduste probleem on see, et neid on keeruline õigesti seadistada, nad on kallid hooldada ning neis on palju kahtlase kvaliteediga vana koodi.
Mõned aastat tagasi otsustas Kanada küberjulgeoleku ekspert Jason A. Donenfeld, et on aeg see kõik lõpetada, ja hakkas töötama . Praegu valmistub WireGuard Linuxi tuuma kaasamiseks, ta on isegi saanud kiitust ja .
WireGuardi välja reklaamitavad eelised võrreldes teiste VPN lahendustega:
- Lihtne kasutada.
- Kasutab kaasaegset krüptograafiat: Noise protokolliraamistik, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF jne.
- Kompaktne ja loetav kood, lihtsam haavatavuste uurimiseks.
- Kõrge jõudlus.
- Selge ja põhjalik .
Kas on leitud hõbedane kuul? Kas OpenVPN ja IPSec on aeg matta? Otsustasin sellega tegeleda ja tegin .
Tööpõhimõtted
Tööpõhimõtteid võib kirjeldada umbes nii:
- Luuakse WireGuardi liides, millele määratakse privaatvõti ja IP-aadress. Laaditakse teiste peeride seaded: nende avalikud võtmed, IP-aadressid jne.
- Kõik IP-paketid, mis jõuavad WireGuardi liidesele, kapseldatakse UDP-sse ja teistele peeridele.
- Kliendid määravad serveri avaliku IP-aadressi seadetes. Server tuvastab automaatselt klientide välised aadressid, kui need saadavad õigesti autentitud andmeid.
- Server võib avalikku IP-aadressi muuta katkestamata tööd. Sel juhul saadab see teate ühendatud klientidele ning nad värskendavad oma konfiguratsiooni koheselt.
- Kasutatakse marsruutimise kontseptsiooni . WireGuard võtab ja saadab pakette avaliku võtme alusel. Kui server dekrüpteerib õigesti autentitud paketi, kontrollitakse selle src välja. Kui see vastab konfiguratsioonile
allowed-ipsautentitud piiri jaoks, siis pakett võetakse WireGuardi liidese poolt. Väljuva paketi saatmisel toimub vastav protseduur: võetakse pakkide dst väli ja selle alusel valitakse vastav piir, pakett allkirjastatakse oma võtmega, krüpteeritakse piiri võtmega ja saadetakse kaug-otsingupunktile.
Kogu WireGuard'i põhiloogika koosneb vähem kui 4000 koodireast, samas kui OpenVPN ja IPSec sisaldavad sadu tuhandeid ridu. Kaasaegsete krüptoalgoritmide toetamiseks on soovitatav lisada Linuxi kehasse uus krüptograafiline API. . Praegu arutatakse, kui hea mõte see on.
Tootlikkus
Maksimaalne jõudlus (võrreldes OpenVPN ja IPSec'iga) on märgatav Linuxi süsteemides, kuna WireGuard on seal realiseeritud süsteemimoodulina. Lisaks toetatakse macOSi, Androidi, iOS-i, FreeBSD-d ja OpenBSD-d, kuid seal töötab WireGuard userspace'is, millel on kõik sellest tulenevad jõudluse probleemid. Windowsi tuge lubatakse lisada lähitulevikus.
Mõõdistamise tulemused :

Minu kogemus
Ma ei ole VPN-i seadistamise ekspert. Kord seadistasin OpenVPN'i käsitsi ja see oli väga vaevaline, IPSec'i ei proovinud ma isegi. Liiga palju otsuseid tuleb langetada, on väga lihtne enda vastu eksida. Seetõttu olen alati kasutanud valmis skripte serveri seadistamiseks.
WireGuard on minu arvates ideaalne kasutajale. Kõik madalama taseme lahendused on spetsifikatsioonis kirjas, seega tavapärase VPN-infrastruktuuri seadistamine võtab vaid mõne minuti. Konfiguratsioonis eksimine on praktiliselt võimatu.
Installimisprotsess ametlikul veebisaidil, eraldi tahaksin märkida suurepärast .
Šifreerimisvõtmed genereeritakse utiliidiga wg:
SERVER_PRIVKEY=$( wg genkey )
SERVER_PUBKEY=$( echo $SERVER_PRIVKEY | wg pubkey )
CLIENT_PRIVKEY=$( wg genkey )
CLIENT_PUBKEY=$( echo $CLIENT_PRIVKEY | wg pubkey )Seejärel tuleb luua serveri konfigureerimine /etc/wireguard/wg0.conf järgnevate sisuga:
[Interface]
Address = 10.9.0.1/24
PrivateKey = $SERVER_PRIVKEY
[Peer]
PublicKey = $CLIENT_PUBKEY
AllowedIPs = 10.9.0.2/32ja tõsta tunnel üles skripti abil wg-quick:
sudo wg-quick up /etc/wireguard/wg0.confSystemd süsteemides saab kasutada ka järgmist sudo systemctl start wg-quick@wg0.service.
Kliendi masinas luua konfigureerimine /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 # Serveri väline IP
PersistentKeepalive = 25 Ja samamoodi tõsta tunnel üles:
sudo wg-quick up /etc/wireguard/wg0.confJääb vaid seadistada NAT serveris, et kliendid saaksid internetti pääseda, ja kõik on valmis!
Sellise kasutusmugavuse ja koodi kompaktsete võimaluste saavutamine õnnestus tänu sellele, et loobuti võtmete jaotamise funktsioonist. Siin pole keerulist sertifikaadisüsteemi ega seda kõike ettevõtete õudust, lühikesed krüpteerimisvõtmed levivad umbes nagu SSH-võtmed. Kuid sellega kaasneb probleem: WireGuard'i ei ole nii lihtne rakendada mõnedes juba olemasolevates võrkudes.
Puudustest tasub märkida, et WireGuard ei tööta HTTP-proxy kaudu, kuna transportimiseks on saadaval ainult UDP-protokoll. Tõstatub küsimus, kas protokolli on võimalik obfuskeerida? Muidugi, see ei ole VPN-i otsene ülesanne, kuid näiteks OpenVPN-i jaoks on olemas viise HTTPS-i all kamufleerimise jaoks, mis aitab totalitaarsetes riikides elavatel inimestel Interneti kasutamist täielikult ära kasutada.
Järeldused
Kokkuvõtteks on see väga huvitav ja paljulubav projekt, mida saab juba praegu kasutada isiklikel serveritel. Milline kasu? Kõrge jõudlus Linuxi süsteemides, seadistamise ja haldamise lihtsus, kompaktne ja loetav koodibaas. Siiski on veel vara hakata keerulist infrastruktuuri WireGuard'ile üle viima, tasub oodata, kuni see lisatakse Linuxi tuumasse.
Oma (ja teie) aja kokkuhoiu nimel olen välja töötanud . Nende abiga saate luua isikliku VPN-i endale ja oma tuttavatele, isegi kui te sellest midagi ei tea.
Allikas: habr.com
