Czy WireGuard to świetna sieć VPN przyszłości?

Czy WireGuard to świetna sieć VPN przyszłości?

Nadszedł czas, kiedy VPN nie jest już jakimś egzotycznym narzędziem brodatych administratorów systemów. Użytkownicy mają różne zadania, ale faktem jest, że VPN każdy potrzebuje.

Problem z obecnymi rozwiązaniami VPN polega na tym, że są one trudne do prawidłowej konfiguracji, drogie w utrzymaniu i zawierają przestarzały kod o wątpliwej jakości.

Kilka lat temu kanadyjski specjalista ds. bezpieczeństwa informacji Jason A. Donenfeld stwierdził, że ma już tego dość i zaczął pracować nad tym WireGuard. WireGuard jest obecnie przygotowywany do włączenia do jądra Linuksa i otrzymał nawet pochwały od niego Linus Torvalds i Senat USA.

Deklarowane zalety WireGuard w porównaniu z innymi rozwiązaniami VPN:

  • Łatwy w użyciu.
  • Wykorzystuje nowoczesną kryptografię: framework protokołu Noise, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF itp.
  • Kompaktowy, czytelny kod, łatwiejszy do zbadania pod kątem luk.
  • Wysoka wydajność
  • Jasne i szczegółowe specyfikacja.

Czy znaleziono złoty środek? Czy nadszedł czas, aby pogrzebać OpenVPN i IPSec? Postanowiłem sobie z tym poradzić i jednocześnie to zrobiłem skrypt do automatycznej instalacji osobistego serwera VPN.

Zasady pracy

Zasady działania można opisać mniej więcej tak:

  • Tworzony jest interfejs WireGuard, do którego przypisywany jest klucz prywatny i adres IP. Ładowane są ustawienia innych peerów: ich klucze publiczne, adresy IP itp.
  • Wszystkie pakiety IP docierające do interfejsu WireGuard są hermetyzowane w formacie UDP i dostarczone bezpiecznie inni rówieśnicy.
  • Klienci określają publiczny adres IP serwera w ustawieniach. Serwer automatycznie rozpoznaje zewnętrzne adresy klientów po otrzymaniu od nich poprawnie uwierzytelnionych danych.
  • Serwer może zmienić publiczny adres IP bez przerywania swojej pracy. Jednocześnie wyśle ​​alert do podłączonych klientów, a oni na bieżąco zaktualizują swoją konfigurację.
  • Stosowana jest koncepcja routingu Routing kluczy kryptograficznych. WireGuard akceptuje i wysyła pakiety w oparciu o klucz publiczny partnera. Kiedy serwer odszyfrowuje poprawnie uwierzytelniony pakiet, sprawdzane jest jego pole src. Jeśli pasuje do konfiguracji allowed-ips uwierzytelniony peer, pakiet jest odbierany przez interfejs WireGuard. Podczas wysyłania pakietu wychodzącego następuje odpowiednia procedura: pobierane jest pole dst pakietu i na jego podstawie wybierany jest odpowiedni peer, pakiet jest podpisywany jego kluczem, szyfrowany kluczem peera i wysyłany do zdalnego punktu końcowego .

Cała podstawowa logika WireGuarda zajmuje mniej niż 4 tysiące linii kodu, podczas gdy OpenVPN i IPSec mają setki tysięcy linii. Aby wspierać nowoczesne algorytmy kryptograficzne, proponuje się włączenie nowego kryptograficznego API do jądra Linuksa Cynk. Obecnie toczy się dyskusja, czy jest to dobry pomysł.

produktywność

Maksymalna przewaga wydajności (w porównaniu z OpenVPN i IPSec) będzie zauważalna w systemach Linux, ponieważ WireGuard jest tam zaimplementowany jako moduł jądra. Ponadto obsługiwane są macOS, Android, iOS, FreeBSD i OpenBSD, ale w nich WireGuard działa w przestrzeni użytkownika, co wiąże się ze wszystkimi konsekwencjami wydajnościowymi. Oczekuje się, że obsługa systemu Windows zostanie dodana w najbliższej przyszłości.

Wyniki testów porównawczych z Oficjalna strona:

Czy WireGuard to świetna sieć VPN przyszłości?

Moje doświadczenie w korzystaniu

Nie jestem ekspertem od VPN. Kiedyś skonfigurowałem OpenVPN ręcznie i było to bardzo nudne, a nawet nie próbowałem IPSec. Jest zbyt wiele decyzji do podjęcia, bardzo łatwo strzelić sobie w stopę. Dlatego do konfiguracji serwera zawsze korzystałem z gotowych skryptów.

Z mojego punktu widzenia WireGuard jest ogólnie idealny dla użytkownika. Wszystkie decyzje niskiego poziomu podejmowane są w specyfikacji, dlatego proces przygotowania typowej infrastruktury VPN zajmuje tylko kilka minut. Oszukiwanie w konfiguracji jest prawie niemożliwe.

Proces instalacji szczegółowo opisane na oficjalnej stronie internetowej chciałbym osobno odnotować doskonałe Obsługa OpenWRT.

Klucze szyfrujące są generowane przez narzędzie wg:

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

Następnie musisz utworzyć konfigurację serwera /etc/wireguard/wg0.conf o następującej treści:

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

i podnieś tunel za pomocą skryptu wg-quick:

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

Zamiast tego możesz użyć tego w systemach z systemem systemd sudo systemctl start [email protected].

Na komputerze klienckim utwórz plik 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 

I podnieś tunel w ten sam sposób:

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

Pozostaje tylko skonfigurować NAT na serwerze, aby klienci mogli uzyskać dostęp do Internetu i gotowe!

Tę łatwość użycia i zwartość bazy kodu uzyskano poprzez wyeliminowanie funkcjonalności dystrybucji kluczy. Nie ma skomplikowanego systemu certyfikatów i całego tego korporacyjnego horroru; krótkie klucze szyfrujące są dystrybuowane podobnie jak klucze SSH. Ale to stwarza problem: WireGuard nie będzie tak łatwy do wdrożenia w niektórych istniejących sieciach.

Wśród wad warto zauważyć, że WireGuard nie będzie działać za pośrednictwem serwera proxy HTTP, ponieważ jako transport dostępny jest tylko protokół UDP. Powstaje pytanie: czy uda się zaciemnić protokół? Oczywiście nie jest to bezpośrednie zadanie VPN, ale np. w przypadku OpenVPN istnieją sposoby na przebranie się za HTTPS, co pomaga mieszkańcom krajów totalitarnych w pełni korzystać z Internetu.

odkrycia

Podsumowując, jest to bardzo ciekawy i obiecujący projekt, można go już używać na serwerach osobistych. Jaki jest zysk? Wysoka wydajność w systemach Linux, łatwość konfiguracji i wsparcia, kompaktowa i czytelna baza kodu. Jest jednak zbyt wcześnie, aby spieszyć się z przenoszeniem złożonej infrastruktury do WireGuarda, warto poczekać na włączenie jej do jądra Linuksa.

Aby zaoszczędzić mój (i Twój) czas, opracowałem Automatyczny instalator WireGuard. Z jego pomocą możesz skonfigurować osobistą sieć VPN dla siebie i swoich znajomych, nawet nie mając o tym zielonego pojęcia.

Źródło: www.habr.com

Dodaj komentarz