
Nastala doba, kedy VPN už nie je exotickým nástrojom pre starších administrátorov. Používateľské úlohy sú rôzne, no faktom je, že VPN sa stal potrebným pre každého.
Problémom súčasných VPN riešení je, že sú ťažko správne nastaviť, sú drahé na údržbu a obsahujú množstvo starého kódu pochybnou kvalitou.
Pred niekoľkými rokmi sa kanadský odborník na bezpečnosť Jason A. Donenfeld rozhodol, že je načase to zmeniť, a začal pracovať na . V súčasnosti sa WireGuard pripravuje na zaradenie do jadra Linuxu a dokonca získal pochvalu od a v .
Vyhlásené výhody WireGuardu oproti iným VPN riešeniam:
- Jednoduché na používanie.
- Používa modernú kryptografiu: Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF atď.
- Kompaktný a čitateľný kód, jednoduchšie na skúmanie zraniteľností.
- Vysoký výkon.
- Jasná a prepracovaná .
Nájdeme nakoniec striebornú guľu? Je čas zakopať OpenVPN a IPSec? Rozhodol som sa to preskúmať a zároveň som vytvoril .
Princípy práce
Princípy fungovania môžu byť opísané asi takto:
- Vytvorí sa rozhranie WireGuard, pridelí sa mu súkromný kľúč a IP adresa. Načítajú sa nastavenia iných peerov: ich verejné kľúče, IP adresy a pod.
- Všetky IP pakety, ktoré prichádzajú na rozhranie WireGuard, sú enkapsulované do UDP a ostatným peerom.
- Klienti zadávajú verejnú IP adresu servera v nastaveniach. Server automaticky zisťuje vonkajšie adresy klientov, keď od nich prichádzajú správne autentifikované údaje.
- Server môže zmeniť verejnú IP adresu bez prerušenia prevádzky. Pri tom pošle oznámenie pripojeným klientom a oni aktualizujú svoju konfiguráciu za behu.
- Používa sa koncept smerovania . WireGuard prijíma a posiela pakety na základe verejného kľúča peera. Keď server dešifruje správne autentifikovaný paket, kontroluje jeho src pole. Ak zodpovedá konfigurácii
allowed-ipsautentifikovaného peera, paket sa prijíma rozhraním WireGuard. Pri odosielaní výstupného paketu prebieha príslušný proces: vezme sa dst pole paketu a na jeho základe sa vyberie príslušný peer, paket sa podpíše svojím kľúčom, zašifruje kľúčom peera a odošle na vzdialený koncový bod.
Celá základná logika WireGuardu zaberá menej ako 4 tisícky riadkov kódu, zatiaľ čo OpenVPN a IPSec majú stovky tisíc riadkov. Na podporu moderných kryptografických algoritmov sa navrhuje zahrnúť do jadra Linux nový kryptografický API. . Momentálne sa diskutuje, ako úspešná je táto myšlienka.
Výkon
Najvyššie výhody výkonu (v porovnaní s OpenVPN a IPSec) sa dajú pozorovať na systémoch Linux, pretože tam je WireGuard implementovaný ako modul jadra. Okrem toho sú podporované aj macOS, Android, iOS, FreeBSD a OpenBSD, ale v týchto systémoch sa WireGuard vykonáva v userspace so všetkými dôsledkami na výkon. Podporu pre Windows sľubujú pridať v blízkej budúcnosti.
Výsledky benchmarkov s :

Môj zážitok z používania
Nie som expert na nastavenie VPN. Raz som nastavoval OpenVPN ručne a bolo to veľmi zdĺhavé, a IPSec som sa ani nepokúšal. Príliš veľa rozhodnutí je potrebné urobiť, je veľmi ľahké sa sekírovať. Preto som vždy používal hotové skripty na nastavenie servera.
Takže podľa môjho názoru je WireGuard ideálny pre užívateľov. Všetky low-level rozhodnutia sú prijaté v špecifikácii, takže príprava typickej VPN infraštruktúry trvá len pár minút. Zmazať sa v konfigurácii je prakticky nemožné.
Proces inštalácie na oficiálnej stránke, osobitne by som chcel vyzdvihnúť vynikajúcu .
Generujú sa šifrovacie kľúče pomocou nástroja wg:
SERVER_PRIVKEY=$( wg genkey )
SERVER_PUBKEY=$( echo $SERVER_PRIVKEY | wg pubkey )
CLIENT_PRIVKEY=$( wg genkey )
CLIENT_PUBKEY=$( echo $CLIENT_PRIVKEY | wg pubkey )Potom je potrebné vytvoriť serverový konfiguračný súbor /etc/wireguard/wg0.conf so nasledujúcim obsahom:
[Interface]
Address = 10.9.0.1/24
PrivateKey = $SERVER_PRIVKEY
[Peer]
PublicKey = $CLIENT_PUBKEY
AllowedIPs = 10.9.0.2/32a zdvihnúť tunel skriptom wg-quick:
sudo wg-quick up /etc/wireguard/wg0.confV systémoch s systemd namiesto toho môžete použiť sudo systemctl start wg-quick@wg0.service.
Na klientskej mašine vytvorte konfiguračný súbor /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 servera
PersistentKeepalive = 25 A presne takisto zdvihnúť tunel:
sudo wg-quick up /etc/wireguard/wg0.confZostáva nastaviť NAT na serveri, aby sa klienti mohli pripojiť na Internet, a všetko je hotové!
Túto jednoduchosť používania a kompaktnosť zdrojového kódu sa podarilo dosiahnuť vďaka odmietnutiu funkcionality distribúcie kľúčov. Tu nie je zložitý systém certifikátov a všetkého toho korporátneho chaosu, krátke šifrovacie kľúče sa šíria približne ako SSH kľúče. V súvislosti s tým však vzniká problém: WireGuard nebude tak jednoduché implementovať v niektorých už existujúcich sieťach.
Medzi nevýhody patrí, že WireGuard nebude fungovať cez HTTP proxy, pretože ako transportný protokol je k dispozícii len UDP. Vzniká otázka, je možné obfuskovanie protokolu? Samozrejme, nie je to priamy cieľ VPN, ale pre OpenVPN existujú spôsoby maskovania pod HTTPS, čo pomáha obyvateľom totalitných krajín plne využívať internet.
Zhrnutie
Na záver, ide o veľmi zaujímavý a perspektívny projekt, ktorý už teraz môžete použiť na osobných serveroch. Aký je zisk? Vysoký výkon na systémoch Linux, jednoduchosť nastavenia a údržby, kompaktný a čitateľný zdrojový kód. Avšak, prechádzať na WireGuard s komplexnou infraštruktúrou je ešte predčasné, treba počkať na jeho zaradenie do jadra Linux.
Aby som ušetril svoj (a váš) čas, vyvinul som . S jeho pomocou si môžete zdvihnúť osobný VPN pre seba a svojich známych, aj keď tomu vôbec nerozumiete.
Zdroj: habr.com
