WireGuard — skvělá VPN budoucnosti?

WireGuard — skvělá VPN budoucnosti?

Nastal čas, kdy VPN už není nějakým exotickým nástrojem vousatých administrátorů. Úkoly uživatelů jsou různé, ale faktem je, že VPN je potřeba už opravdu všem.

Problém současných VPN řešení spočívá v tom, že je těžké je správně nastavit, jsou drahé na údržbu a navíc v nich je spousta legacy kódu pochybné kvality.

Před několika lety se kanadský odborník na informační bezpečnost Jason A. Donenfeld rozhodl, že je dost a začal pracovat na WireGuard. V současnosti se WireGuard připravuje na zařazení do jádra Linuxu, dokonce obdržel pochvalu od Linuse Torvaldse a v americkém senátu.

Uvedené výhody WireGuard oproti jiným VPN řešením:

  • Jednoduché použití.
  • Používá moderní kryptografii: Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF atd.
  • Kompaktní a čitelný kód, snadnější na prozkoumání zranitelností.
  • Vysoký výkon.
  • Jasně a promyšleně specification.

Není to snad nalezená stříbrná kulka? Je čas pohřbít OpenVPN a IPSec? Rozhodl jsem se to prozkoumat a zároveň jsem vytvořil skript pro automatickou instalaci osobního VPN serveru.

Principy fungování

Principy fungování lze popsat zhruba takto:

  • Vytváří se rozhraní WireGuard, kterému je přiřazen soukromý klíč a IP adresa. Načítají se nastavení ostatních peerů: jejich veřejné klíče, IP adresy atd.
  • Všechny IP pakety přicházející na rozhraní WireGuard jsou inkapsulovány do UDP a bezpečně doručovány ostatním peerům.
  • Klienti zadávají veřejnou IP adresu serveru v nastavení. Server automaticky zjistí externí adresy klientů, když od nich obdrží správně autentizovaná data.
  • Server může změnit veřejnou IP adresu, aniž by došlo k přerušení provozu. Přitom odešle oznámení připojeným klientům a ti na místě aktualizují svou konfiguraci.
  • Používá se koncept směrování Cryptokey Routing. WireGuard přijímá a odesílá pakety na základě veřejného klíče peeru. Když server dešifruje správně autentizovaný paket, kontroluje jeho поле src. Pokud odpovídá konfiguraci allowed-ips autentizovaného peeru, paket je přijat rozhraním WireGuard. Při odesílání odchozího paketu probíhá odpovídající procedura: vezme se поле dst paketu a na základě něj se vybírá odpovídající peer, paket se podepisuje vlastním klíčem, šifruje klíčem peeru a odesílá se na vzdálený koncový bod.

Všechna hlavní logika WireGuard zabírá méně než 4 tisíce řádků kódu, zatímco OpenVPN a IPSec mají stovky tisíc řádků. Pro podporu moderních kryptografických algoritmů se navrhuje zařadit do jádra Linuxu novou kryptografickou API. ZincV současné době se diskutuje, jak moc je to dobrý nápad.

Výkon

Maximální výkon (ve srovnání s OpenVPN a IPSec) bude nejvíce patrný na systémech Linux, protože tam je WireGuard implementován jako modul jádra. Kromě toho jsou podporovány macOS, Android, iOS, FreeBSD a OpenBSD, ale tam WireGuard běží v uživatelském prostoru, což má dopad na výkon. Podpora pro Windows by měla být přidána v nejbližší době.

Výsledky benchmarků s oficiálního webu:

WireGuard — skvělá VPN budoucnosti?

Má zkušenost s používáním

Nejsem expert na nastavení VPN. Jednou jsem nastavoval OpenVPN ručně a to bylo velmi zdlouhavé, a na IPSec jsem se ani nepokoušel. Je třeba učinit příliš mnoho rozhodnutí, je velmi snadné si ublížit. Takže jsem vždy používal hotové skripty pro nastavení serveru.

WireGuard je podle mého názoru ideální pro uživatele. Všechny nízkoúrovňové rozhodnutí jsou uvedena ve specifikaci, takže příprava typické VPN infrastruktury trvá jen několik minut. Je téměř nemožné udělat chybu v konfiguraci.

Proces instalace je podrobně popsán na oficiálních stránkách, je třeba zvlášť vyzdvihnout skvělou podporu OpenWRT.

Klíče pro šifrování jsou generovány pomocí nástroje wg:

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

Dále je třeba vytvořit serverovou konfiguraci /etc/wireguard/wg0.conf s následujícím obsahem:

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

a zprovoznit tunel skriptem wg-quick:

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

V systémech se systemd můžete místo toho použít sudo systemctl start wg-quick@wg0.service.

Na klientském počítači vytvořte konfiguraci /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 # Vnější IP serveru
PersistentKeepalive = 25 

A stejně tak zprovoznit tunel:

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

Zbývá nastavit NAT na serveru, aby se klienti mohli připojit k internetu, a je hotovo!

Takovou jednoduchost používání a kompaktnost kódu se podařilo dosáhnout díky zrušení funkce distribuce klíčů. Neexistuje zde složitý systém certifikátů a veškerého toho podnikatelského zmatku, krátké šifrovací klíče se distribuují podobně jako SSH klíče. S tím však vzniká problém: WireGuard nebude snadné implementovat v některých již existujících sítích.

Mezi nevýhody patří to, že WireGuard nefunguje přes HTTP proxy, protože jako transportní protokol je pouze UDP. Otázkou je, zda bude možné protokol obfuskovat? Samozřejmě, že to není přímý úkol VPN, ale pro OpenVPN například existují způsoby, jak maskovat se jako HTTPS, což pomáhá obyvatelům totalitních zemí plně využívat internet.

Závěry

Shrnuto, je to velmi zajímavý a perspektivní projekt, který lze již nyní použít na osobních serverech. Jaký je profit? Vysoký výkon na systémech Linux, jednoduchost nastavení a údržby, kompaktní a čitelná základna kódu. Nicméně, je ještě brzy se vrhnout na převod komplexní infrastruktury na WireGuard, je dobré počkat na zařazení do jádra Linux.

Abych ušetřil svůj (a váš) čas, vytvořil jsem automatického instalátora WireGuard. S jeho pomocí můžete vytvořit osobní VPN pro sebe a své známé i bez hlubších znalostí.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster