Er WireGuard den perfekte VPN-løsningen for fremtiden?

Er WireGuard den perfekte VPN-løsningen for fremtiden?

Tida kom til at VPN ikkje lenger er et eksotisk verktøy for skjeggete systemadministratorer. Oppgavene til brukerne er forskjellige, men faktum er at VPN har blitt nødvendig for alle.

Problemet med dagens VPN-løsninger er at de er vanskelige å konfigurere korrekt, dyre å vedlikeholde, og de er fulle av gammel kode av tvilsom kvalitet.

For noen år siden bestemte den kanadiske IT-sikkerhetseksperten Jason A. Donenfeld seg for at han hadde fått nok av dette, og begynte arbeidet med WireGuard. Nå forberedes WireGuard for inkludering i Linux-kjernen, og har til og med fått ros fra Linus Torvalds og i den amerikanske senatet.

De påståtte fordelene med WireGuard over andre VPN-løsninger:

  • Enkelt å bruke.
  • Bruker moderne kryptografi: Noise-protokollrammeverk, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF osv.
  • Kompakt og lesbar kode, enklere å undersøke for sårbarheter.
  • Høy ytelse.
  • Klar og gjennomtenkt Det har kommet.

Er det virkelig funnet en sølvkule? Er det på tide å begrave OpenVPN og IPSec? Jeg bestemte meg for å finne ut av dette, og samtidig lage et skript for automatisk installasjon av en personlig VPN-server.

Driftsprinsipper

Måten det fungerer på kan beskrives omtrent slik:

  • Det opprettes et WireGuard-grensesnitt, som tildeles en privat nøkkel og IP-adresse. Innstillingene for de andre nodene lastes opp: deres offentlige nøkler, IP-adresser osv.
  • Alle IP-pakker som kommer til WireGuard-grensesnittet kapsles inn i UDP og leveres sikkert til de andre nodene.
  • Klienter angir den offentlige IP-adressen til serveren i innstillingene. Serveren gjenkjenner automatisk de eksterne adressene til klientene når den mottar korrekt autentiserte data fra dem.
  • Serveren kan endre offentlig IP-adresse uten å avbryte driften. Den sender varslinger til tilkoblede klienter, og de oppdaterer konfigurasjonen sin i sanntid.
  • Konseptet med ruting Cryptokey Routing. WireGuard tar imot og sender pakker basert på den offentlige nøkkelen til noden. Når serveren dekrypterer en korrekt autentisert pakke, sjekkes feltet src. Hvis det samsvarer med konfigurasjonen til allowed-ips til den autentiserte noden, blir pakken akseptert av WireGuard-grensesnittet. Ved sending av en utgående pakke går det gjennom en tilsvarende prosedyre: dst-feltet i pakken benyttes til å velge den tilsvarende noden, pakken signeres med sin egen nøkkel, krypteres med nodens nøkkel og sendes til den eksterne endepunkt.

Hele logikken bak WireGuard består av mindre enn 4 000 linjer med kode, mens OpenVPN og IPSec har hundretusenvis av linjer. For å støtte moderne krypteringsalgoritmer foreslås det å inkludere et nytt kryptografisk API i Linux-kjernen. Zinc. For øyeblikket pågår det en diskusjon om hvorvidt dette er en god idé.

Ytelse

Den største ytelsesfordelen (sammenlignet med OpenVPN og IPSec) vil være merkbar på Linux-systemer, ettersom WireGuard er implementert som en kjernemodul der. I tillegg støttes macOS, Android, iOS, FreeBSD og OpenBSD, men der kjører WireGuard i brukermodus med alle konsekvenser for ytelsen. Støtte for Windows er lovet å komme snart.

Benchmarkresultater fra den offisielle nettsiden:

Er WireGuard den perfekte VPN-løsningen for fremtiden?

Min erfaring med bruk av

Jeg er ingen ekspert på VPN-oppsett. Jeg har en gang satt opp OpenVPN manuelt, og det var veldig tidkrevende, og jeg har ikke engang prøvd IPSec. Det er for mange beslutninger som må tas, og det er veldig lett å gjøre feil. Derfor har jeg alltid brukt ferdige skript for å sette opp serveren.

Så, etter min mening, er WireGuard virkelig ideelt for brukeren. Alle lavnivåbeslutninger er tatt i spesifikasjonen, så prosessen med å forberede en typisk VPN-infrastruktur tar bare noen få minutter. Det er nesten umulig å gjøre feil i konfigurasjonen.

Installeringen av beskrevet i detalj på den offisielle nettsiden, og jeg vil spesielt nevne den utmerkede støtten for OpenWRT.

Krypteringsnøklene genereres av verktøyet wg:

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

Deretter må du opprette serverkonfigurasjonen /etc/wireguard/wg0.conf med følgende innhold:

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

og heve tunnelen med skriptet wg-quick:

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

På systemer med systemd kan du i stedet bruke sudo systemctl start wg-quick@wg0.service.

På klientmaskinen må du opprette konfigurasjonen /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 # Serverens offentlige IP
PersistentKeepalive = 25 

Og heve tunnelen på samme måte:

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

Det gjenstår å konfigurere NAT på serveren slik at klientene kan få tilgang til internett, og så er alt klart!

Den enkelhet i bruk og kompakt kodebase er oppnådd ved å fraskrive seg funksjonalitet for distribusjon av nøkler. Det finnes ikke et komplisert system for sertifikater og alt det bedriftsmessige styret; korte krypteringsnøkler distribueres omtrent som SSH-nøkler. Men dette fører til et problem: WireGuard blir ikke så lett å implementere i noen allerede eksisterende nettverk.

Blant ulempene er det verdt å merke seg at WireGuard ikke vil fungere via HTTP-proxy, siden transporten kun er UDP-protokollen. Spørsmålet oppstår: er det mulig å obfuske protokollen? Selvfølgelig er ikke dette en direkte oppgave for en VPN, men for OpenVPN finnes det for eksempel måter å maskere seg som HTTPS, noe som hjelper innbyggere i totalitære land å bruke internett fullt ut.

Konklusjoner

Oppsummert er dette et veldig interessant og lovende prosjekt, som allerede nå kan brukes på personlige servere. Hva er fordelene? Høy ytelse på Linux-systemer, enkel konfigurasjon og vedlikehold, samt en kompakt og lesbar kodebase. Imidlertid er det fortsatt for tidlig å kaste seg over å oversette komplekse infrastrukturer til WireGuard; det er best å vente på inkluderingen i Linux-kjernen.

For å spare min (og din) tid har jeg utviklet en automatisk installatør for WireGuard. Med den kan du enkelt sette opp en personlig VPN for deg selv og dine bekjente, selv uten teknisk innsikt.

Kilde: habr.com

Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster