
Ir pienācis laiks, kad VPN vairs nav eksotisks instruments bārdainajiem sistēmu administrētājiem. Lietotāju uzdevumi ir dažādi, taču fakts ir tāds, ka VPN kļuva nepieciešams visiem.
Pašreizējo VPN risinājumu problēma ir tā, ka tos ir grūti pareizi konfigurēt, dārgi apkalpot, un tajos ir daudz apšaubāmas kvalitātes mantojuma koda.
Pirms dažiem gadiem Kanādas kiberdrošības speciālists Jason A. Donenfeld nolēma, ka pietiek ar šo situāciju, un uzsāka darbu pie . Tagad WireGuard gatavojas iekļaušanai Linux kodolā, tam ir pat saņemtas atzinības no un .
WireGuard norādītās priekšrocības salīdzinājumā ar citiem VPN risinājumiem:
- Vienkārši lietojams.
- Izmanto mūsdienīgu kriptogrāfiju: Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF utt.
- Kompakts, saprotams kods, vieglāk pētīt ievainojamības.
- Augsta veiktspēja.
- Skaidra un izstrādāta .
Vai tiešām ir atrasta sudraba lode? Vai laiks apglabāt OpenVPN un IPSec? Es nolēmu to noskaidrot un pašlaik esmu izstrādājis .
Darbības principi
Darba principi varētu tikt aprakstīti šādi:
- Izveidojas WireGuard interfeiss, tam tiek piešķirts privāts atslēgas un IP adrese. Tiek ielādēti citu mezglu iestatījumi: viņu publiskās atslēgas, IP adreses utt.
- Visi IP paketi, kas ierodas uz WireGuard interfeisa, tiek ielikt UDP un citiem mezgliem.
- Klienti iestata servera publisko IP adresi savos iestatījumos. Serveris automātiski uzzina klientu ārējās adreses, kad no tiem saņem pareizi autentificētus datus.
- Serveris var mainīt publisko IP adresi, nepārtraucot darbu. Tajā pašā laikā tas paziņos pievienotajiem klientiem, un viņi atjauninās savu konfigurāciju uz vietas.
- Tiek izmantota maršrutēšanas koncepcija . WireGuard pieņem un sūta paketes, pamatojoties uz mezgla publisko atslēgu. Kad serveris pareizi atšifrē autentificēto paketi, tiek pārbaudīts tās src lauks. Ja tas atbilst konfigurācijai
allowed-ipsauthentificēta pira, tad pakete tiek pieņemta WireGuard saskarē. Sūtot izejošo paketi, notiek attiecīgā procedūra: tiek ņemts dst lauks paketē un, pamatojoties uz tā, tiek izvēlēts attiecīgais pirs, pakete tiek parakstīta ar savu atslēgu, šifrēta ar pira atslēgu un nosūtīta uz attālo galapunktu.
Visa pamatloģika WireGuard aizņem mazāk par 4 tūkstošiem rindiņu koda, kamēr OpenVPN un IPSec ir simtiem tūkstošu rindiņu. Lai atbalstītu mūsdienu kriptovalūtu algoritmus, plānots iekļaut Linux kodolā jaunu kriptogrāfisko API. . Šobrīd notiek diskusijas par to, cik veiksmīga ir šī ideja.
Veiktspēja
Maksimālais veiktspējas ieguvums (salīdzinot ar OpenVPN un IPSec) būs pamanāms Linux sistēmās, jo tur WireGuard tiek realizēts kā kodola modulis. Turklāt tiek atbalstīti macOS, Android, iOS, FreeBSD un OpenBSD, taču tajās WireGuard darbojas userspace, ar visām tā radītajām sekām veiktspējā. Atbalstu Windows sola pievienot drīzumā.
Benchmarku rezultāti ar :

Mans pieredzes stāsts
Es neesmu VPN uzstādīšanas eksperts. Reiz es manuāli iestatīju OpenVPN, un tas bija ļoti nogurdinoši, bet IPSec pat neesmu mēģinājis. Pārāk daudz lēmumu jāpieņem, un ir ļoti viegli nosist sevi kājā. Tāpēc es vienmēr esmu izmantojis gatavas skriptu sistēmas servera iestatīšanai.
Nu, WireGuard, manuprāt, ir ideāls lietotājam. Visas zema līmeņa risinājumi ir iekļauti specifikācijā, tāpēc tipiskas VPN infrastruktūras sagatavošanas process aizņem tikai dažas minūtes. Pārkonfigurēt praktiski nav iespējams.
Uzstādīšanas process oficiālajā vietnē, atsevišķi jāuzsver lieliska .
Šifrēšanas atslēgas ģenerē ar rīku wg:
SERVER_PRIVKEY=$( wg genkey )
SERVER_PUBKEY=$( echo $SERVER_PRIVKEY | wg pubkey )
CLIENT_PRIVKEY=$( wg genkey )
CLIENT_PUBKEY=$( echo $CLIENT_PRIVKEY | wg pubkey )Tālāk jāizveido servera konfigurācija /etc/wireguard/wg0.conf ar sekojošu saturu:
[Interface]
Address = 10.9.0.1/24
PrivateKey = $SERVER_PRIVKEY
[Peer]
PublicKey = $CLIENT_PUBKEY
AllowedIPs = 10.9.0.2/32un jāuzsākt tunelis ar skriptu wg-quick:
sudo wg-quick up /etc/wireguard/wg0.confSistēmās ar systemd šo vietā var izmantot sudo systemctl start wg-quick@wg0.service.
Klienta mašīnā izveidot konfigurāciju /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 # Servera ārējais IP
PersistentKeepalive = 25 Un tieši tāpat uzsākt tuneli:
sudo wg-quick up /etc/wireguard/wg0.confJāuzstāda NAT serverī, lai klienti varētu piekļūt internetam, un viss ir gatavs!
Šādu vienkāršību un kompakto koda bāzi izdevās sasniegt, atteicoties no atslēgu izplatīšanas funkcionalitātes. Šeit nav sarežģītas sertifikātu sistēmas un visa šī korporatīvā šausmīga, īsas šifrēšanas atslēgas tiek izplatītas aptuveni tāpat kā SSH atslēgas. Taču šajā sakarā rodas problēma: WireGuard nebūs tik viegli integrēt dažās jau esošās tīklos.
No trūkumiem jāatzīmē, ka WireGuard nedarbosies caur HTTP proksiju, jo transportam tiek izmantots tikai UDP protokols. Rodas jautājums, vai būs iespējams obfusēt protokolu? Protams, tas nav tiešs VPN uzdevums, bet OpenVPN, piemēram, pastāv veidi, kā maskēties kā HTTPS, kas palīdz totalitāro valstu iedzīvotājiem pilnvērtīgi izmantot internetu.
Secinājumi
Noslēdzot, tas ir ļoti interesants un solīgs projekts, to var jau tagad izmantot personālajos servidores. Kādi ieguvumi? Augsta veiktspēja Linux sistēmās, vienkārša iestatīšana un atbalsts, kompakta un lasāma koda bāze. Tomēr vēl ir pāragri ārdīt kompleksu infrastruktūru uz WireGuard, ir vērts gaidīt integrāciju Linux kodolā.
Lai ietaupītu savu (un jūsu) laiku, es izstrādāju . Ar tā palīdzību jūs varat uzstādīt personīgu VPN sev un saviem paziņām pat neko daudz nesaprotot par šo procesu.
Avots: habr.com
