
De tijd is gekomen waarin VPN geen exotisch hulpmiddel meer is voor een paar baarddragende sysadmins. Gebruikers hebben verschillende behoeften, maar het feit is dat VPN nu voor iedereen essentieel is geworden.
Het probleem met de huidige VPN-oplossingen is dat ze moeilijk goed in te stellen zijn, duur om te onderhouden en er vol zit met legacy code van twijfelachtige kwaliteit.
Enkele jaren geleden besloot de Canadese informatiebeveiligingsspecialist Jason A. Donenfeld dat het genoeg was en begon hij te werken aan . Momenteel wordt WireGuard voorbereid voor opname in de Linux-kernel, en het heeft zelfs lof gekregen van en in .
De geclaimde voordelen van WireGuard ten opzichte van andere VPN-oplossingen:
- Eenvoudig in gebruik.
- Maakt gebruik van moderne cryptografie: Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF, enz.
- Compact leesbare code, gemakkelijker te onderzoeken op kwetsbaarheden.
- Hoge prestaties.
- Duidelijk en goed doordacht .
Is er dan eindelijk een zilveren kogel gevonden? Is het tijd om OpenVPN en IPSec te begraven? Ik besloot dit te onderzoeken en maakte ondertussen .
De werkprincipes
De werking kan ongeveer als volgt worden beschreven:
- Er wordt een WireGuard-interface aangemaakt, die een privƩ-sleutel en IP-adres krijgt toegewezen. De instellingen van andere peers worden geladen: hun publieke sleutels, IP-adressen, enzovoort.
- Alle IP-pakketten die op de WireGuard-interface binnenkomen, worden ingekapseld in UDP en aan andere peers.
- Klanten geven het publieke IP-adres van de server op in hun instellingen. De server ontdekt automatisch de externe adressen van de klanten wanneer de correct geauthenticeerde gegevens van hen binnenkomen.
- De server kan het publieke IP-adres wijzigen zonder de werking te onderbreken. Op dat moment zal deze een melding sturen naar verbonden klanten, zodat zij hun configuratie op het vlieg kunnen bijwerken.
- Het concept van routering . WireGuard ontvangt en verzendt pakketten op basis van de publieke sleutel van de peer. Wanneer de server een correct geauthenticeerd pakket ontsleutelt, wordt het src-veld gecontroleerd. Als het overeenkomt met de configuratie van
allowed-ipsvan de geauthenticeerde peer, wordt het pakket geaccepteerd door de WireGuard-interface. Bij het verzenden van een uitgaand pakket vindt een overeenkomstig proces plaats: het dst-veld van het pakket wordt genomen en op basis daarvan wordt de overeenkomstige peer gekozen, het pakket wordt ondertekend met zijn sleutel, versleuteld met de sleutel van de peer en verzonden naar het externe eindpunt.
De belangrijkste logica van WireGuard beslaat minder dan 4000 regels code, terwijl OpenVPN en IPSec honderdduizenden regels hebben. Voor ondersteuning van moderne cryptografie-algoritmen wordt voorgesteld om een nieuwe cryptografische API op te nemen in de Linux-kernel. Momenteel wordt er discussie gevoerd over hoe succesvol dit idee is.
Prestaties
Het maximale prestatievoordeel (in vergelijking met OpenVPN en IPSec) zal vooral merkbaar zijn op Linux-systemen, omdat WireGuard daar als een kernelmodule is geĆÆmplementeerd. Daarnaast worden macOS, Android, iOS, FreeBSD en OpenBSD ondersteund, maar daar draait WireGuard in de userspace, met alle gevolgen voor de prestaties. De ondersteuning voor Windows wordt in de nabije toekomst beloofd.
Benchmarkresultaten met :

Mijn ervaring met het gebruik van
Ik ben geen expert in het configureren van VPN's. Een keer heb ik OpenVPN handmatig ingesteld en dat was heel omslachtig; met IPSec heb ik het zelfs niet geprobeerd. Er moeten te veel beslissingen worden genomen, het is heel gemakkelijk om jezelf in de voet te schieten. Daarom heb ik altijd gebruik gemaakt van kant-en-klare scripts voor het opzetten van servers.
Dus, vanuit mijn perspectief, is WireGuard absoluut ideaal voor de gebruiker. Alle low-level beslissingen zijn in de specificatie vastgelegd, waardoor het opzetten van een typische VPN-infrastructuur slechts enkele minuten duurt. Het is bijna onmogelijk om een fout te maken in de configuratie.
De installatieprocedure op de officiƫle website wil ik graag de uitstekende .
Encryptiesleutels worden gegenereerd met de tool wg:
SERVER_PRIVKEY=$( wg genkey )
SERVER_PUBKEY=$( echo $SERVER_PRIVKEY | wg pubkey )
CLIENT_PRIVKEY=$( wg genkey )
CLIENT_PUBKEY=$( echo $CLIENT_PRIVKEY | wg pubkey )Vervolgens moet je de serverconfiguratie aanmaken /etc/wireguard/wg0.conf met de volgende inhoud:
[Interface]
Address = 10.9.0.1/24
PrivateKey = $SERVER_PRIVKEY
[Peer]
PublicKey = $CLIENT_PUBKEY
AllowedIPs = 10.9.0.2/32en de tunnel opzetten met het script wg-quick:
sudo wg-quick up /etc/wireguard/wg0.confIn systemen met systemd kan in plaats daarvan worden gebruikt sudo systemctl start wg-quick@wg0.service.
Op de clientmachine, maak de configuratie aan /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 # Extern IP van de server
PersistentKeepalive = 25 En op dezelfde manier de tunnel opzetten:
sudo wg-quick up /etc/wireguard/wg0.confHet enige wat overblijft is NAT op de server instellen, zodat clients toegang hebben tot het internet, en dan is alles klaar!
Deze eenvoud in gebruik en de compacte codebase zijn bereikt door af te zien van het sleuteldistributie-functionaliteit. Er is geen ingewikkeld certificaatsysteem en al dat soort bedrijfsellende; korte encryptiesleutels worden verspreid zoals SSH-sleutels. Maar hierdoor ontstaat het probleem dat WireGuard niet eenvoudig te implementeren zal zijn in sommige bestaande netwerken.
Een nadeel is dat WireGuard niet werkt via HTTP-proxy, omdat het alleen UDP als transportprotocol gebruikt. Dit roept de vraag op of het protocol misschien te verbergen is? Natuurlijk is dit niet de primaire taak van een VPN, maar voor OpenVPN zijn er manieren om zich als HTTPS voor te doen, wat helpt voor inwoners van totalitaire landen om volledig gebruik te maken van het internet.
Conclusies
Samenvattend, dit is een erg interessant en veelbelovend project, dat je nu al op persoonlijke servers kunt gebruiken. Wat zijn de voordelen? Hoge prestaties op Linux-systemen, eenvoud in configuratie en ondersteuning, en een compacte en leesbare codebasis. Maar het is nog vroeg om een complexe infrastructuur naar WireGuard te migreren; het is verstandig om te wachten op opname in de Linux-kernel.
Om tijd te besparen voor jou (en mezelf) heb ik . Hiermee kun je een persoonlijke VPN opzetten voor jezelf en je vrienden, zelfs als je er niets van begrijpt.
Bron: habr.com
