Dostawca VPN Mullvad, rozwijający przeglądarkę internetową Mullvad Browser oraz zapewniający infrastrukturę dla usługi Mozilla VPN, zaprezentował projekt GotaTun z realizacją protokołu VPN WireGuard, napisanego w języku Rust i działającego w przestrzeni użytkownika. Kod projektu jest dystrybuowany na licencji BSD. Firma Mullvad już wdrożyła GotaTun w kliencie VPN na platformę Android i w przyszłym roku zamierza przenieść na niego aplikacje na desktopy i iOS.
GotaTun jest forkiem narzędzia BoringTun, rozwijanego przez firmę Cloudflare i wykorzystywanego w aplikacji WARP. GotaTun różni się od BoringTun pełnym wsparciem dla platformy Android, optymalizacjami wydajności oraz dodatkowymi możliwościami ochrony prywatności.
W GotaTun zintegrowano wsparcie technologii DAITA (Obrona przed Analizą Ruchu Kierowanego przez AI) w celu ochrony przed analizą szyfrowanego ruchu tranzytowego, prowadzonego za pomocą narzędzi opartych na systemach uczenia maszynowego. DAITA normalizuje rozmiar wysyłanych pakietów, dodaje losowy ruch tła oraz zniekształca wzorce typowych przepływów danych. W GotaTun wdrożono także tryb Multihop, umożliwiający dostęp do VPN-serwerów nie bezpośrednio, a za pośrednictwem serii węzłów tranzytowych, co na przykład pozwala zorganizować przeprowadzenie ruchu przez bardziej optymalne trasy.
Aby zwiększyć wydajność, w GotaTun zaimplementowano przetwarzanie wielowątkowe oraz zastosowano strategię pracy z pamięcią w trybie zero-copy, bez pośredniego buforowania, wykorzystując tylko pierwotnie dostarczony bufor.
Wcześniej w aplikacjach firmy Mullvad używano forka implementacji WireGuard w języku Go — wireguard-go, rozszerzonego o wsparcie DAITA i Multihop. Według statystyk Google, 85% wszystkich zgłoszeń o awariach aplikacji Mullvad na Androida związanych było z kodem wireguard-go, dlatego firma Mullvad postanowiła zastąpić implementację WireGuard bardziej niezawodną wersją.
Realizacja w języku Rust została wybrana, ponieważ aplikacja Mullvad VPN została napisana w tym języku, z wyjątkiem kodu wireguard-go, którego interakcja została zorganizowana za pomocą złożonego interfejsu FFI (foreign function interface) z blokami unsafe. W opublikowanej pod koniec listopada wersji klienta Mullvad na Androida, implementacja wireguard-go została zastąpiona GotaTun, co rozwiązało problemy z niezawodnością działania — w porównaniu do wcześniejszych wersji, wskaźnik awaryjnych zakończeń zmienił się z 0,40% na 0,01%.
Źródło: opennet.ru
