
Det er blevet tid til, at VPN ikke længere er et eksotisk værktøj for skæggede systemadministratorer. Brugernes opgaver er forskellige, men faktum er, at VPN er blevet nødvendigt for alle.
Problemet med de nuværende VPN-løsninger er, at de er svære at konfigurere korrekt, dyre at vedligeholde, og de indeholder en masse legacy-kode af tvivlsom kvalitet.
For flere år siden besluttede den canadiske informationssikkerhedsekspert Jason A. Donenfeld, at han ikke kunne holde det ud længere, og begyndte at arbejde på . I øjeblikket forberedes WireGuard til at blive inkluderet i Linux-kernen, og det har endda fået ros fra og i .
De erklærede fordele ved WireGuard i forhold til andre VPN-løsninger:
- Nem at bruge.
- Bruger moderne kryptografi: Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF osv.
- Kompakt og læsbar kode, lettere at undersøge for sårbarheder.
- Høj ydeevne.
- Tydeligt og velovervejet .
Er den eftertragtede sølvkugle endelig fundet? Skal OpenVPN og IPSec begraves? Jeg besluttede mig for at finde ud af det, og samtidig lavede jeg et .
Princippet for drift
Arbejdsmåden kan beskrives således:
- En WireGuard-interface oprettes, tildeles en privat nøgle og en IP-adresse. Indstillingerne for de andre peers indlæses: deres offentlige nøgler, IP-adresser osv.
- Alle IP-pakker, der kommer til WireGuard-interfacet, inkapsles i UDP og til de andre peers.
- Kunderne angiver serverens offentlige IP-adresse i indstillingerne. Serveren opdager automatisk klienternes eksterne adresser, når den modtager korrekt autentificerede data fra dem.
- Serveren kan ændre den offentlige IP-adresse uden at afbryde driften. I så fald sender den en besked til de tilsluttede klienter, og de opdaterer deres konfiguration i realtid.
- Der anvendes et routing-koncept . WireGuard modtager og sender pakker baseret på peerens offentlige nøgle. Når serveren dekrypterer en korrekt autentificeret pakke, kontrolleres dens src-felt. Hvis det svarer til konfigurationen
allowed-ipsfor den autentificerede peer, accepteres pakken af WireGuard-interfacet. Ved afsendelse af en udgående pakke finder den relevante procedure sted: dst-feltet i pakken tages, og på baggrund af det vælges den tilsvarende peer, pakken underskrives med sin egen nøgle, krypteres med peerens nøgle og sendes til remote endpoint.
Hele den grundlæggende logik i WireGuard fylder mindre end 4.000 linjer kode, mens OpenVPN og IPSec har hundrede tusinde linjer. For at understøtte moderne kryptografiske algoritmer foreslås det at inkludere et nyt kryptografisk API i Linux-kernen. I øjeblikket diskuteres det, hvorvidt dette er en god idé.
Ydeevne
Den maksimale ydeevnefordel (sammenlignet med OpenVPN og IPSec) vil være mest mærkbar på Linux-systemer, da WireGuard her er implementeret som en kernemodul. Derudover understøttes macOS, Android, iOS, FreeBSD og OpenBSD, men her kører WireGuard i userspace med alle de efterfølgende konsekvenser for ydeevnen. Support til Windows forventes at blive tilføjet snart.
Benchmarkresultaterne fra :

Min erfaring med brugen af
Jeg er ikke ekspert i VPN-opsætning. Jeg har engang manuelt opsat OpenVPN, og det var meget besværligt, og jeg har aldrig forsøgt IPSec. Der er alt for mange beslutninger at træffe, og det er meget let at skyde sig selv i foden. Derfor har jeg altid brugt færdige scripts til at opsætte serveren.
Således er WireGuard, efter min mening, helt ideel for brugeren. Alle lavniveau-løsninger er beskrevet i specifikationen, så processen med at forberede en typisk VPN-infrastruktur tager kun få minutter. Det er praktisk talt umuligt at lave fejl i konfigurationen.
Installationsprocessen på den officielle hjemmeside, vil jeg særligt fremhæve den fremragende .
Krypteringsnøgler genereres med værktøjet wg:
SERVER_PRIVKEY=$( wg genkey )
SERVER_PUBKEY=$( echo $SERVER_PRIVKEY | wg pubkey )
CLIENT_PRIVKEY=$( wg genkey )
CLIENT_PUBKEY=$( echo $CLIENT_PRIVKEY | wg pubkey )Dernæst skal du oprette serverkonfigurationen /etc/wireguard/wg0.conf med følgende indhold:
[Interface]
Address = 10.9.0.1/24
PrivateKey = $SERVER_PRIVKEY
[Peer]
PublicKey = $CLIENT_PUBKEY
AllowedIPs = 10.9.0.2/32og oprette tunnelen med scriptet wg-quick:
sudo wg-quick up /etc/wireguard/wg0.confI systemer med systemd kan du i stedet bruge sudo systemctl start wg-quick@wg0.service.
På klientmaskinen skal du oprette konfigurationen /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 # Ekstern IP for serveren
PersistentKeepalive = 25 Og på samme måde oprette tunnelen:
sudo wg-quick up /etc/wireguard/wg0.confDet er tilbage at konfigurere NAT på serveren, så klienterne kan få adgang til internettet, og alt er klar!
Denne brugervenlighed og kompakte kodebase er opnået ved at undgå funktionaliteten til distribution af nøgler. Der er ikke noget komplekst certifikatsystem og alle de virksomhedsmæssige udfordringer; korte krypteringsnøgler distribueres omtrent som SSH-nøgler. Men dette medfører et problem: WireGuard vil ikke være så nemt at implementere i nogle allerede eksisterende netværk.
Bland ulemperne kan nævnes, at WireGuard ikke fungerer gennem HTTP-proxy, da der kun er UDP-protokollen til transport. Spørgsmålet melder sig, om det er muligt at obfuskere protokollen? Selvfølgelig er dette ikke en direkte opgave for en VPN, men der findes metoder til at maskere OpenVPN som HTTPS, hvilket hjælper indbyggerne i totalitære lande med at få fuld adgang til internettet.
Konklusioner
Sammenfattende er dette et meget interessant og lovende projekt, som allerede nu kan anvendes på personlige servere. Hvilken fordel? Høj ydeevne på Linux-systemer, nem opsætning og vedligeholdelse, kompakt og læsbar kodebase. Dog er det for tidligt at kaste sig ud i at oversætte en kompleks infrastruktur til WireGuard; det er bedst at vente på, at den bliver en del af Linux-kernen.
For at spare min (og din) tid har jeg udviklet . Med den kan du oprette en personlig VPN for dig selv og dine bekendte, uden at have nogen forudgående viden om det.
Kilde: habr.com
