Ar „WireGuard“ yra puikus ateities VPN?

Ar „WireGuard“ yra puikus ateities VPN?

Atėjo laikas, kai VPN nebėra koks egzotiškas barzdotų sistemų administratorių įrankis. Vartotojai turi skirtingas užduotis, tačiau faktas yra tas, kad kiekvienam reikia VPN.

Dabartinių VPN sprendimų problema yra ta, kad juos sunku teisingai konfigūruoti, juos brangu prižiūrėti ir juose gausu abejotinos kokybės senojo kodo.

Prieš kelerius metus Kanados informacijos saugumo specialistas Jasonas A. Donenfeldas nusprendė, kad jam to jau gana, ir pradėjo dirbti WireGuard. „WireGuard“ dabar ruošiamas įtraukti į „Linux“ branduolį ir netgi sulaukė pagyrimų Linas Torvaldsas ir JAV Senatas.

Teigiami „WireGuard“ pranašumai, palyginti su kitais VPN sprendimais:

  • Paprasta naudoti.
  • Naudoja modernią kriptografiją: Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF ir kt.
  • Kompaktiškas, skaitomas kodas, kurį lengviau ištirti dėl pažeidžiamumų.
  • Aukštos kokybės.
  • Aiškus ir išsamus specifikacija.

Ar rasta sidabrinė kulka? Ar laikas palaidoti OpenVPN ir IPSec? Nusprendžiau su tuo susitvarkyti ir tuo pat metu tai padariau scenarijus, skirtas automatiškai įdiegti asmeninį VPN serverį.

Darbo principai

Veikimo principus galima apibūdinti maždaug taip:

  • Sukuriama WireGuard sąsaja ir jai priskiriamas privatus raktas bei IP adresas. Įkeliami kitų bendraamžių nustatymai: jų viešieji raktai, IP adresai ir kt.
  • Visi IP paketai, patenkantys į WireGuard sąsają, yra įterpti į UDP ir pristatyti saugiai kiti bendraamžiai.
  • Klientai nustatymuose nurodo viešą serverio IP adresą. Serveris automatiškai atpažįsta išorinius klientų adresus, kai iš jų gaunami teisingai autentifikuoti duomenys.
  • Serveris gali pakeisti viešą IP adresą nenutraukdamas savo darbo. Tuo pačiu metu jis išsiųs įspėjimą prisijungusiems klientams ir jie atnaujins savo konfigūraciją.
  • Naudojama maršruto parinkimo sąvoka Kriptoraktų maršrutas. „WireGuard“ priima ir siunčia paketus pagal bendraamžių viešąjį raktą. Kai serveris iššifruoja teisingai autentifikuotą paketą, patikrinamas jo src laukas. Jei jis atitinka konfigūraciją allowed-ips autentifikuotas bendraamžis, paketą priima WireGuard sąsaja. Siunčiant siunčiamą paketą įvyksta atitinkama procedūra: paimamas paketo dst laukas ir pagal jį parenkamas atitinkamas partneris, paketas pasirašomas jo raktu, užšifruojamas partnerio raktu ir siunčiamas į nuotolinį galinį tašką. .

Visa pagrindinė „WireGuard“ logika užima mažiau nei 4 tūkstančius kodo eilučių, o „OpenVPN“ ir „IPSec“ turi šimtus tūkstančių eilučių. Siekiant palaikyti šiuolaikinius kriptografinius algoritmus, siūloma į Linux branduolį įtraukti naują kriptografinę API cinkas. Šiuo metu vyksta diskusija, ar tai gera idėja.

Našumas

Didžiausias našumo pranašumas (palyginti su „OpenVPN“ ir „IPSec“) bus pastebimas „Linux“ sistemose, nes „WireGuard“ ten įdiegtas kaip branduolio modulis. Be to, palaikomos „macOS“, „Android“, „iOS“, „FreeBSD“ ir „OpenBSD“, tačiau jose „WireGuard“ veikia vartotojo erdvėje su visomis iš to išplaukiančiomis našumo pasekmėmis. Tikimasi, kad artimiausiu metu bus pridėtas „Windows“ palaikymas.

Lyginamieji rezultatai su oficiali svetainė:

Ar „WireGuard“ yra puikus ateities VPN?

Mano naudojimo patirtis

Aš nesu VPN ekspertas. Kartą „OpenVPN“ nustatiau rankiniu būdu ir tai buvo labai nuobodu, ir aš net nebandžiau „IPSec“. Priimti per daug sprendimų, labai lengva šaudyti sau į koją. Todėl serveriui konfigūruoti visada naudojau paruoštus scenarijus.

Taigi, mano požiūriu, „WireGuard“ paprastai yra idealus vartotojui. Visi žemo lygio sprendimai priimami specifikacijoje, todėl tipinės VPN infrastruktūros paruošimo procesas trunka vos kelias minutes. Konfigūracijoje apgauti beveik neįmanoma.

Montavimo procesas išsamiai aprašyta oficialioje svetainėje norėčiau atskirai pažymėti puikų OpenWRT palaikymas.

Šifravimo raktus generuoja įrankis wg:

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

Tada turite sukurti serverio konfigūraciją /etc/wireguard/wg0.conf su tokiu turiniu:

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

ir pakelti tunelį su scenarijumi wg-quick:

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

Sistemose su systemd galite naudoti šią funkciją sudo systemctl start [email protected].

Kliento kompiuteryje sukurkite konfigūraciją /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 

Ir pakelkite tunelį taip pat:

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

Belieka sukonfigūruoti NAT serveryje, kad klientai galėtų prisijungti prie interneto, ir viskas!

Toks kodo bazės naudojimo paprastumas ir kompaktiškumas buvo pasiektas panaikinus raktų platinimo funkciją. Nėra sudėtingos sertifikatų sistemos ir viso šio verslo siaubo; trumpi šifravimo raktai platinami panašiai kaip SSH raktai. Tačiau tai kelia problemų: kai kuriuose esamuose tinkluose WireGuard nebus taip lengva įdiegti.

Tarp trūkumų verta paminėti, kad „WireGuard“ neveiks per HTTP tarpinį serverį, nes tik UDP protokolas galimas kaip transportavimas. Kyla klausimas: ar pavyks sumaišyti protokolą? Žinoma, tai nėra tiesioginė VPN užduotis, tačiau, pavyzdžiui, „OpenVPN“ yra būdų, kaip užmaskuoti HTTPS, o tai padeda totalitarinių šalių gyventojams visapusiškai naudotis internetu.

išvados

Apibendrinant, tai labai įdomus ir daug žadantis projektas, kurį jau galite naudoti asmeniniuose serveriuose. koks pelnas? Didelis našumas Linux sistemose, paprasta sąranka ir palaikymas, kompaktiška ir skaitoma kodo bazė. Tačiau per anksti skubėti perkelti sudėtingą infrastruktūrą į „WireGuard“, verta palaukti, kol ji bus įtraukta į „Linux“ branduolį.

Kad sutaupyčiau savo (ir jūsų) laiką, sukūriau WireGuard automatinis montuotojas. Su jo pagalba galite nustatyti asmeninį VPN sau ir savo draugams, net nieko apie tai nesuprasdami.

Šaltinis: www.habr.com

Добавить комментарий