Kas WireGuard on tuleviku suurepärane VPN?

Kas WireGuard on tuleviku suurepärane VPN?

Kätte on jõudnud aeg, mil VPN pole enam mingi habemega süsteemiadministraatorite eksootiline tööriist. Kasutajatel on erinevad ülesanded, kuid fakt on see, et VPN-i vajavad kõik.

Praeguste VPN-lahenduste probleem seisneb selles, et neid on raske õigesti konfigureerida, neid on kallis hooldada ja need on täis küsitava kvaliteediga pärandkoodi.

Mitu aastat tagasi otsustas Kanada infoturbe spetsialist Jason A. Donenfeld, et tal on sellest küllalt, ja asus kallale WireGuard. WireGuardit valmistatakse nüüd ette lisamiseks Linuxi kernelisse ja on saanud isegi kiitust Linus Torvalds ja USA senat.

WireGuardi väidetavad eelised teiste VPN-lahenduste ees:

  • Lihtne kasutada.
  • Kasutab kaasaegset krüptograafiat: Noise protokolli raamistik, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF jne.
  • Kompaktne, loetav kood, mida on lihtsam turvaaukude tuvastamiseks uurida.
  • Suur jõudlus.
  • Selge ja viimistletud spetsifikatsioon.

Kas hõbekuul on leitud? Kas on aeg OpenVPN ja IPSec maha matta? Otsustasin sellega tegeleda ja samal ajal tegin seda skript isikliku VPN-serveri automaatseks installimiseks.

Tööpõhimõtted

Tööpõhimõtteid saab kirjeldada umbes nii:

  • Luuakse WireGuardi liides ning sellele määratakse privaatvõti ja IP-aadress. Laaditakse teiste partnerite seaded: nende avalikud võtmed, IP-aadressid jne.
  • Kõik WireGuardi liidesesse saabuvad IP-paketid on kapseldatud UDP-sse ja ohutult kohale toimetatud teised eakaaslased.
  • Kliendid määravad seadetes serveri avaliku IP-aadressi. Server tuvastab automaatselt klientide välisaadressid, kui neilt saadakse õigesti autentitud andmeid.
  • Server saab muuta avalikku IP-aadressi oma tööd katkestamata. Samal ajal saadab see ühendatud klientidele hoiatuse ja nad värskendavad oma konfiguratsiooni lennult.
  • Kasutatakse marsruutimise mõistet Krüptovõtme marsruutimine. WireGuard aktsepteerib ja saadab kaaslase avaliku võtme alusel pakette. Kui server dekrüpteerib õigesti autentitud paketi, kontrollitakse selle src-välja. Kui see vastab konfiguratsioonile allowed-ips autentitud partner, võtab paketi vastu WireGuardi liides. Väljuva paketi saatmisel toimub vastav protseduur: võetakse paketi dst väli ja selle põhjal valitakse vastav partner, pakett allkirjastatakse selle võtmega, krüpteeritakse kaaslase võtmega ja saadetakse kauglõpp-punkti. .

Kogu WireGuardi põhiloogika võtab vähem kui 4 tuhat koodirida, samas kui OpenVPN-il ja IPSecil on sadu tuhandeid ridu. Kaasaegsete krüptoalgoritmide toetamiseks tehakse ettepanek lisada Linuxi tuumasse uus krüptograafiline API tsink. Praegu käib arutelu selle üle, kas see on hea mõte.

Производительность

Maksimaalne jõudluse eelis (võrreldes OpenVPN-i ja IPSeciga) on märgatav Linuxi süsteemides, kuna WireGuard on seal juurutatud tuumamoodulina. Lisaks on toetatud macOS, Android, iOS, FreeBSD ja OpenBSD, kuid neis töötab WireGuard kasutajaruumis koos kõigi sellest tulenevate tulemuslikkuse tagajärgedega. Windowsi tugi peaks lisanduma lähiajal.

Võrdlustulemused koos ametlik veebileht:

Kas WireGuard on tuleviku suurepärane VPN?

Minu kasutuskogemus

Ma ei ole VPN-i ekspert. Seadistasin kunagi OpenVPN-i käsitsi ja see oli väga tüütu ning ma ei proovinud isegi IPSec-i. Otsuseid on liiga palju, väga lihtne on endale jalga tulistada. Seetõttu kasutasin serveri seadistamisel alati valmis skripte.

Seega on WireGuard minu arvates kasutajale üldiselt ideaalne. Kõik madala taseme otsused tehakse spetsifikatsioonis, seega võtab tüüpilise VPN-infrastruktuuri ettevalmistamine aega vaid mõne minuti. Konfiguratsioonis on peaaegu võimatu petta.

Paigaldusprotsess üksikasjalikult kirjeldatud ametlikul veebisaidil tahaksin eraldi märkida suurepärast OpenWRT tugi.

Krüpteerimisvõtmed genereerib utiliit wg:

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

Järgmisena peate looma serveri konfiguratsiooni /etc/wireguard/wg0.conf järgmise sisuga:

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

ja tõsta tunnel skriptiga üles wg-quick:

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

Systemd-iga süsteemides saate seda selle asemel kasutada sudo systemctl start [email protected].

Looge kliendi masinas konfiguratsioon /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 

Ja tõstke tunnel samamoodi üles:

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

Jääb üle vaid konfigureerida serveris NAT, et kliendid saaksid Internetti juurde pääseda, ja ongi valmis!

See koodibaasi kasutuslihtsus ja kompaktsus saavutati võtmete levitamise funktsioonide kõrvaldamisega. Puudub keeruline sertifikaadisüsteem ja kogu see ettevõtte õudus; lühikesed krüpteerimisvõtmed levitatakse sarnaselt SSH-võtmetele. Kuid see tekitab probleemi: WireGuardi pole mõnes olemasolevas võrgus nii lihtne rakendada.

Puuduste hulgas väärib märkimist, et WireGuard ei tööta HTTP-puhverserveri kaudu, kuna transpordina on saadaval ainult UDP-protokoll. Tekib küsimus: kas protokolli on võimalik hägustada? Loomulikult ei ole see VPN-i otsene ülesanne, kuid näiteks OpenVPN-i jaoks on võimalusi maskeerida ennast HTTPS-iks, mis aitab totalitaarsete riikide elanikel internetti täielikult kasutada.

Järeldused

Kokkuvõtteks võib öelda, et see on väga huvitav ja paljutõotav projekt, saate seda juba kasutada isiklikes serverites. Mis on kasum? Suur jõudlus Linuxi süsteemides, lihtne seadistamine ja tugi, kompaktne ja loetav koodibaas. Keerulise infrastruktuuri WireGuardile üleandmisega on aga veel vara kiirustada, tasub oodata selle lisamist Linuxi kernelisse.

Oma (ja teie) aja säästmiseks arendasin WireGuardi automaatne paigaldaja. Selle abiga saate seadistada endale ja oma sõpradele isikliku VPN-i, isegi ilma sellest midagi aru saamata.

Allikas: www.habr.com

Lisa kommentaar