Je WireGuard skvělá VPN budoucnosti?

Je WireGuard skvělá VPN budoucnosti?

Nastal čas, kdy VPN již není nějakým exotickým nástrojem vousatých systémových administrátorů. Uživatelé mají různé úkoly, ale faktem je, že každý potřebuje VPN.

Problém se současnými řešeními VPN je v tom, že je obtížné je správně nakonfigurovat, jsou drahé na údržbu a jsou plné starého kódu pochybné kvality.

Před několika lety se kanadský specialista na informační bezpečnost Jason A. Donenfeld rozhodl, že už toho má dost, a začal na tom pracovat WireGuard. WireGuard se nyní připravuje na začlenění do linuxového jádra a dokonce se mu dostalo pochvaly Linus Torvalds a americký senát.

Nárokované výhody WireGuard oproti jiným řešením VPN:

  • Snadné použití.
  • Používá moderní kryptografii: Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF atd.
  • Kompaktní, čitelný kód, snadnější prozkoumání zranitelností.
  • Vysoký výkon.
  • Přehledné a propracované Specifikace.

Našla se stříbrná kulka? Je čas pohřbít OpenVPN a IPSec? Rozhodl jsem se to řešit a zároveň jsem to udělal skript pro automatickou instalaci osobního serveru VPN.

Principy práce

Princip fungování lze popsat asi takto:

  • Vytvoří se rozhraní WireGuard a přiřadí se mu soukromý klíč a IP adresa. Načtou 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 zapouzdřeny v UDP a bezpečně doručeno ostatní vrstevníci.
  • Klienti specifikují veřejnou IP adresu serveru v nastavení. Server automaticky rozpozná externí adresy klientů, když od nich obdrží správně ověřená data.
  • Server může změnit veřejnou IP adresu, aniž by přerušil svou práci. Zároveň pošle upozornění připojeným klientům a ti budou za běhu aktualizovat svou konfiguraci.
  • Používá se koncept směrování Směrování kryptoklíčů. WireGuard přijímá a odesílá pakety na základě veřejného klíče partnera. Když server dešifruje správně ověřený paket, zkontroluje se jeho pole src. Pokud odpovídá konfiguraci allowed-ips ověřený peer, paket je přijat rozhraním WireGuard. Při odesílání odchozího paketu dojde k odpovídajícímu postupu: vezme se pole dst paketu a na jeho základě se vybere odpovídající peer, paket se podepíše svým klíčem, zašifruje se klíčem peer a odešle se na vzdálený koncový bod. .

Veškerá základní logika WireGuardu 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 zahrnout do linuxového jádra nové kryptografické API zinek. V současné době probíhá diskuse o tom, zda je to dobrý nápad.

Производительность

Maximální výkonová výhoda (ve srovnání s OpenVPN a IPSec) bude 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, v nichž však WireGuard běží v uživatelském prostoru se všemi z toho vyplývajícími výkonnostními důsledky. Očekává se, že v blízké budoucnosti bude přidána podpora Windows.

Srovnávat výsledky s oficiální stránky:

Je WireGuard skvělá VPN budoucnosti?

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

Nejsem odborník na VPN. Jednou jsem OpenVPN nastavil ručně a bylo to velmi zdlouhavé a IPSec jsem ani nezkoušel. Je potřeba udělat příliš mnoho rozhodnutí, je velmi snadné se střelit do nohy. Proto jsem pro konfiguraci serveru vždy používal hotové skripty.

WireGuard je tedy z mého pohledu pro uživatele obecně ideální. Všechna rozhodnutí na nízké úrovni se provádějí ve specifikaci, takže proces přípravy typické infrastruktury VPN trvá jen několik minut. V konfiguraci je téměř nemožné podvádět.

Proces instalace podrobně popsáno na oficiálních stránkách bych chtěl zvlášť poznamenat vynikající Podpora OpenWRT.

Šifrovací klíče generuje nástroj 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 musíte vytvořit konfiguraci serveru /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 zvedněte tunel pomocí skriptu wg-quick:

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

Na systémech s systemd můžete místo toho použít toto sudo systemctl start [email protected].

Na klientském počítači vytvořte config /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 # Внешний IP сервера
PersistentKeepalive = 25 

A zvedněte tunel stejným způsobem:

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

Zbývá pouze nakonfigurovat NAT na serveru tak, aby klienti měli přístup k internetu, a je hotovo!

Tato snadnost použití a kompaktnost základny kódu byla dosažena odstraněním funkce distribuce klíčů. Neexistuje žádný složitý systém certifikátů a celá tato firemní hrůza; krátké šifrovací klíče jsou distribuovány podobně jako klíče SSH. To však představuje problém: WireGuard nebude tak snadné implementovat do některých stávajících sítí.

Mezi nevýhody stojí za zmínku, že WireGuard nebude fungovat přes HTTP proxy, protože jako přenos je k dispozici pouze protokol UDP. Nabízí se otázka: bude možné protokol zatemnit? To samozřejmě není přímý úkol VPN, ale například pro OpenVPN existují způsoby, jak se maskovat jako HTTPS, což obyvatelům totalitních zemí pomáhá naplno využívat internet.

Závěry

Abych to shrnul, jedná se o velmi zajímavý a slibný projekt, již jej můžete využít na osobních serverech. jaký je zisk? Vysoký výkon na systémech Linux, snadné nastavení a podpora, kompaktní a čitelná kódová základna. Je však příliš brzy uspěchat s převodem komplexní infrastruktury na WireGuard, vyplatí se počkat na její zařazení do linuxového jádra.

Abych ušetřil svůj (a váš) čas, vyvinul jsem se Automatická instalace WireGuard. S jeho pomocí můžete nastavit osobní VPN pro sebe a své přátele, aniž byste o tom něčemu rozuměli.

Zdroj: www.habr.com

Přidat komentář