
Tiden har kommit dÄ VPN inte lÀngre Àr ett exotiskt verktyg för skÀggiga sysadmins. AnvÀndarnas behov varierar, men faktum Àr att VPN har blivit nödvÀndigt för alla.
Problemet med nuvarande VPN-lösningar Àr att de Àr svÄra att konfigurera korrekt, dyra att underhÄlla och fulla av legacykod av tveksamt kvalitet.
För nÄgra Är sedan bestÀmde den kanadensiska cybersÀkerhetsspecialisten Jason A. Donenfeld att det var dags att förÀndra detta och började arbeta med . Just nu förbereds WireGuard för att inkluderas i Linux-kÀrnan, och den har till och med fÄtt beröm frÄn och i .
De pÄstÄdda fördelarna med WireGuard över andra VPN-lösningar:
- LÀtt att anvÀnda.
- AnvÀnder modern kryptografi: Noise-protokollram, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF etc.
- Kompakt och lÀsbar kod, enklare att granska för sÄrbarheter.
- High performance.
- Tydlig och genomarbetad .
Har silverkulor Ă€ntligen hittats? Ăr det dags att begrava OpenVPN och IPSec? Jag bestĂ€mde mig för att reda ut detta och samtidigt skapa .
Arbetsprinciper
Principerna kan beskrivas sÄ hÀr:
- En WireGuard-grÀnssnitt skapas, en privat nyckel och IP-adress tilldelas. InstÀllningarna för andra peers laddas: deras offentliga nycklar, IP-adresser osv.
- Alla IP-paket som kommer till WireGuard-grÀnssnittet inkapslas i UDP och till andra peers.
- Klienterna anger den offentliga IP-adressen för servern i sina instÀllningar. Servern fÄr automatiskt kÀnnedom om klienternas externa adresser nÀr autentiserade data kommer in.
- Servern kan Àndra sin offentliga IP-adress utan att avbryta driften. Den skickar en notifiering till anslutna klienter, som dÄ uppdaterar sin konfiguration i realtid.
- Konceptet för routing anvÀnds . WireGuard tar emot och skickar paket baserat pÄ en peers publika nyckel. NÀr servern dekrypterar ett korrekt autentiserat paket kontrolleras dess src-fÀlt. Om det matchar konfigurationen för
allowed-ipsför den autentiserade peeren, accepteras paketet av WireGuard-grÀnssnittet. Vid avsÀndning av ett utgÄende paket pÄbörjas en motsvarande procedur: dst-fÀltet i paketet tas och baserat pÄ detta vÀljs lÀmplig peer, paketet signeras med sin egen nyckel, krypteras med peer-id nyckel och skickas till den fjÀrran enheten.
All grundlogik för WireGuard tar mindre Àn 4 000 kodrader, medan OpenVPN och IPSec har hundratusentals kodrader. För att stödja moderna kryptovalutor föreslÄs att en ny kryptografisk API inkluderas i Linux-kÀrnan. . För nÀrvarande pÄgÄr en diskussion om hur bra denna idé Àr.
Performance
Det maximala prestandafördelarna (jÀmfört med OpenVPN och IPSec) kommer att bli tydliga pÄ Linux-system, eftersom WireGuard dÀr implementeras som en kÀrnmodul. Dessutom stöds macOS, Android, iOS, FreeBSD och OpenBSD, men dÀr körs WireGuard i userspace med alla följder för prestanda. Stöd för Windows lovas att lÀggas till inom en snar framtid.
Resultaten av bÀnktester med :

Min erfarenhet av anvÀndning
Jag Àr ingen expert pÄ VPN-konfiguration. Jag konfigurerade en gÄng OpenVPN manuellt och det var mycket krÄngligt, och jag har inte ens försökt med IPSec. Det finns alldeles för mÄnga beslut att fatta, och det Àr vÀldigt lÀtt att trampa snett. DÀrför har jag alltid anvÀnt fÀrdiga skript för att konfigurera servern.
SÄ, WireGuard Àr en utmÀrkt lösning för anvÀndaren, enligt min mening. Alla lÄgnivÄbeslut Àr fastlagda i specifikationen, sÄ processen att förbereda en typisk VPN-infrastruktur tar bara nÄgra minuter. Det Àr praktiskt taget omöjligt att göra misstag i konfigurationen.
Installationsprocess pÄ den officiella webbplatsen vill jag sÀrskilt framhÀva den utmÀrkta .
Krypteringsnycklar genereras med verktyget wg:
SERVER_PRIVKEY=$( wg genkey )
SERVER_PUBKEY=$( echo $SERVER_PRIVKEY | wg pubkey )
CLIENT_PRIVKEY=$( wg genkey )
CLIENT_PUBKEY=$( echo $CLIENT_PRIVKEY | wg pubkey )DÀrefter mÄste du skapa serverkonfigurationen /etc/wireguard/wg0.conf med följande innehÄll:
[Interface]
Address = 10.9.0.1/24
PrivateKey = $SERVER_PRIVKEY
[Peer]
PublicKey = $CLIENT_PUBKEY
AllowedIPs = 10.9.0.2/32och starta tunneln med skriptet wg-quick:
sudo wg-quick up /etc/wireguard/wg0.confI system med systemd kan du istÀllet anvÀnda sudo systemctl start wg-quick@wg0.service.
PĂ„ klientmaskinen, skapa 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 # Serverns externa IP
PersistentKeepalive = 25 Och pÄ samma sÀtt starta tunneln:
sudo wg-quick up /etc/wireguard/wg0.confDet ÄterstÄr bara att konfigurera NAT pÄ servern sÄ att klienterna kan fÄ tillgÄng till Internet, och dÄ Àr allt klart!
Denna enkelhet och kompakta kodbas har uppnÄtts genom att avstÄ frÄn funktioner för nyckeldistribution. HÀr finns inget komplicerat certifikatssystem och allt detta företagskaos, korta krypteringsnycklar sprids ungefÀr som SSH-nycklar. Men detta skapar ett problem: WireGuard kommer att vara nÄgot svÄrt att införa i vissa redan existerande nÀtverk.
Bland nackdelar kan nÀmnas att WireGuard inte fungerar genom HTTP-proxy, eftersom den endast har UDP-protokollet som transport. FrÄgan uppstÄr, Àr det möjligt att obfuska protokollet? SjÀlvklart Àr detta inte en direkt uppgift för en VPN, men för exempelvis OpenVPN finns det sÀtt att maskera under HTTPS, vilket hjÀlper invÄnare i totalitÀra lÀnder att fullt ut njuta av Internet.
Slutsatser
Sammanfattningsvis Àr detta ett mycket intressant och lovande projekt som redan nu kan anvÀndas pÄ personliga servrar. Vilken fördel? Hög prestanda pÄ Linux-system, enkel installation och underhÄll, samt en kompakt och lÀsbar kodbas. Men att kasta sig in i att översÀtta en komplex infrastruktur till WireGuard Àr Ànnu för tidigt, man bör vÀnta pÄ att det inkluderas i Linux-kÀrnan.
För att spara min (och din) tid har jag utvecklat . Med dess hjÀlp kan man enkelt sÀtta upp en personlig VPN för sig sjÀlv och sina bekanta, Àven utan att förstÄ nÄgot av detta.
KĂ€lla: habr.com
