WireGuard „przyjdzie” do jądra Linux — dlaczego?

Pod koniec lipca twórcy tunelu VPN WireGuard zaproponowali zbiór poprawek, które sprawią, że ich oprogramowanie do tworzenia tuneli VPN stanie się częścią jądra Linux. Dokładna data realizacji tego pomysłu nadal pozostaje jednak nieznana. Poniżej przyjrzymy się temu narzędziu bliżej.

WireGuard „przyjdzie” do jądra Linux — dlaczego?
/ фото Tambako The Jaguar CC

Krótko o projekcie

WireGuard to tunel VPN nowej generacji stworzony przez Jasona A. Donenfelda, szefa firmy Edge Security. Projekt powstał jako uproszczona i szybka alternatywa dla OpenVPN oraz IPsec. Pierwsza wersja produktu zawierała zaledwie 4 tys. linii kodu. Dla porównania OpenVPN ma ich około 120 tys., a IPsec — 420 tys.

Według słowami Według deweloperów WireGuard jest łatwy w konfiguracji, a bezpieczeństwo protokołu zapewniają sprawdzone algorytmy kryptograficzne. Przy zmianie sieci: Wi‑Fi, LTE lub Ethernet za każdym razem trzeba ponownie łączyć się z serwerem VPN. Serwery WireGuard nie zrywają jednak połączenia, nawet jeśli użytkownik otrzyma nowy adres IP.

Mimo że WireGuard od początku był projektowany z myślą o jądrze Linux, deweloperzy zadbali również o przenośną wersję narzędzia dla urządzeń z Androidem. Aplikacja nie jest jeszcze dopracowana, ale już teraz można ją przetestować w praktyce. W tym celu trzeba zostać jednym z testerów.

Ogólnie rzecz biorąc, WireGuard cieszy się sporą popularnością i został już zrealizowano wdrożony przez kilku dostawców VPN, na przykład Mullvad i AzireVPN. W sieci opublikowano także wiele dużo treści poradników konfiguracji tego rozwiązania. Na przykład są poradniki, które tworzą użytkownicy, a są też poradniki przygotowane przez autorów projektu.

Szczegóły techniczne

W oficjalnej dokumentacji (str. 18) zaznaczono, że przepustowość WireGuard jest czterokrotnie wyższa niż w OpenVPN: odpowiednio 1011 Mb/s wobec 258 Mb/s. WireGuard wyprzedza także standardowe linuxowe rozwiązanie IPsec, które osiąga 881 Mb/s. Przewyższa je również pod względem łatwości konfiguracji.

Po wymianie kluczy (połączenie VPN jest inicjalizowane niemal tak jak w SSH) i zestawieniu połączenia WireGuard samodzielnie rozwiązuje wszystkie pozostałe kwestie: nie trzeba martwić się o routing, kontrolę stanu i inne aspekty. Dodatkowy wysiłek konfiguracyjny będzie potrzebny tylko wtedy, gdy chce się zastosować szyfrowanie symetryczne.

WireGuard „przyjdzie” do jądra Linux — dlaczego?
/ фото Anders Hojbjerg CC

Do instalacji potrzebna będzie dystrybucja z jądrem Linux nowszym niż 4.1. Można ją znaleźć w repozytoriach głównych dystrybucji Linux.

$ sudo add-apt-repository ppa:hda-me/wireguard
$ sudo apt update
$ sudo apt install wireguard-dkms wireguard-tools

Jak zauważają redaktorzy xakep.ru, samodzielna kompilacja ze źródeł również nie jest trudna. Wystarczy uruchomić interfejs i wygenerować klucz publiczny oraz prywatny:

$ sudo ip link add dev wg0 type wireguard
$ wg genkey | tee privatekey | wg pubkey > publickey

WireGuard nie korzysta interfejs do współpracy z dostawcą kryptografii CryptoAPI. Zamiast niego wykorzystywany jest szyfr strumieniowy ChaCha20, kryptograficzny kod uwierzytelniający Poly1305 oraz własne kryptograficzne funkcje skrótu.

Klucz tajny jest generowany z wykorzystaniem protokółu Diffiego-Hellmana opartego na krzywej eliptycznej Curve25519. Podczas haszowania wykorzystywane są funkcje skrótu BLAKE2 i SipHash. Dzięki formatowi znaczników czasu TAI64N protokół odrzuca pakiety z mniejszą wartością timestamp, tym samym zapobiegając atakom DoS i i atakom replay.

Jednocześnie WireGuard wykorzystuje funkcję ioctl do kontroli wejścia/wyjścia (wcześniej używano Netlink), co sprawia, że kod jest czystszy i prostszy. Można się o tym przekonać, zaglądając do kodu konfiguracyjnego.

Plany deweloperów

Na razie WireGuard to moduł jądra out-of-tree. Jednak autor projektu, Jason Donenfeld, mówiuważa, że nadszedł już czas na pełnoprawną implementację w jądrze Linux, ponieważ jest prostsza i bardziej niezawodna niż inne rozwiązania. W tej opinii Jasona wspiera popiera nawet sam Linus Torvalds — nazwał kod WireGuard „dziełem sztuki”.

Jednak na razie nikt nie podaje dokładnych terminów wdrożenia WireGuard do jądra. I raczej nie stanie się to wraz z wydaniem sierpniowego Linux kernel 4.18. Istnieje jednak szansa, że nastąpi to już w najbliższej przyszłości: w wersji 4.19 lub 5.0.

Gdy WireGuard zostanie dodany do jądra, deweloperzy chcą dopracować aplikację na urządzenia z Androidem i rozpocząć prace nad aplikacją dla iOS. Ponadto planują ukończyć implementacje w Go i Rust oraz przenieść je na macOS, Windows i BSD. Planowana jest także implementacja WireGuard dla bardziej „egzotycznych systemów”: DPDK, FPGA, a także wiele innych interesujących rzeczy. Wszystkie zostały wymienione na liście to-do autorów projektu.

P.S. Jeszcze kilka artykułów z naszego bloga firmowego:

Głównym kierunkiem naszej działalności jest świadczenie usług chmurowych:

Infrastruktura wirtualna (IaaS) | Hosting PCI DSS | Chmura FZ-152 | Hosting SAP | Wirtualna pamięć masowa | Szyfrowanie danych w chmurze | Chmura dyskowa

Źródło: habr.com

Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS - ProHoster