Urządzenie Android (smartfon, tablet) jako serwer VPN

Wstęp

W ostatnim czasie internet, a szczególnie serwis YouTube, roi się od reklam usługodawców VPN. Virtual Private Network (VPN) to dość dobrze znana usługa w świecie korporacyjnym, pozwalająca na zdalne łączenie się ze środowiskiem w biurze. Pracownik pracujący zdalnie najczęściej otrzymuje służbowego laptopa z klientem VPN wgranym przez dział IT. Po uruchomieniu oprogramowania i uwierzytelnieniu się, pracownik może łączyć się ze wszystkimi zasobami w sieci korporacyjnej, tak, jakby był fizycznie w biurze. Ruch pomiędzy pracownikiem a biurem jest w pełni szyfrowany, więc teoretycznie, wszystko jest bezpieczne i można pracować zdalnie.

Ot dziwo, w ostatnim czasie VPN zaczął być reklamowany poza środowiskami korporacyjnymi jako usługa chroniąca prywatność. Teoretycznie tak może być, choć – uwaga (!) – niekoniecznie.

Gdy użytkownik łączy się z serwerem VPN, jego ruch jest przekierowywany na serwery dostawcy VPN przy użyciu szyfrowanego tunelu. Jeżeli użytkownik chce odwiedzić jakąkolwiek zewnętrzną stronę internetową (choćby tą, waluszko.net), dostawca usługi “przekazuje” odebrany ruch dalej, jako własny. Takim sposobem dostawca internetu (Internet Service Provider – ISP) użytkownika nie ma wglądu do informacji dotyczących jakie strony odwiedza użytkownik. Z punktu widzenia ISP użytkownika (nazwijmy go ISP1), widać tylko zaszyfrowany ruch do serwera VPN usługodawcy.

Uproszczony diagram usługi Virtual Private Network (VPN)

Sytuacja zupełnie się zmienia od momentu, gdy ruch wpadnie do serwera usługodawcy VPN. Ten ma pełny wgląd do informacji, które użytkownik starał się ukryć przed swoim dostawcą internetu (ISP1). ISP2, czyli dostawca internetu usługodawcy, również widzi ruch wychodzący z serwera VPN.

Jak można zauważyć, VPN to dobre narzędzie do ukrycia ruchu przed lokalnym dostawcą internetu, ale nie jest żadnym gwarantem anonimowości w sieci. VPN to również dobry sposób na obejście geoblokady i cenzury.

Załóżmy, że mieszkamy w kraju, w którym mamy ograniczony dostęp do niektórych treści. Łącząc się i tunelując (przekazując) cały ruch z komputera przez serwer usługodawcy w innym kraju, możemy połączyć się z usługami zablokowanymi w naszym regionie. Świetna sprawa.

Problemy

VPN to świetne rozwiązanie do pracy zdalnej oraz ogólnie, do bezpiecznego łączenia się z inną siecią wewnętrzną. Jednak jeśli chodzi o ochronę prywatności, najwięcej zależy od usługodawcy, ponieważ oni de-facto mają wgląd do całego ruchu przetwarzanego przez ich serwery.

Wielu dostawców płatnych i bezpłatnych usług VPN chwali się ochroną prywatności, anonimowością lub brakiem zbierania danych. Czy tak jest? Trudno powiedzieć. Po pierwsze, dostawcy usług internetowych muszą się dostosować do lokalnych praw, zasad i dyrektyw. Jeżeli retencja danych jest wymagana przez prawo, logicznie, podmiot gospodarczy się dostosuje. Po drugie, ogólnie, brakuje niezależnych audytów obietnic usługodawców. “Zaufaj nam, nie zrobimy nic złego” nie jest gwarantem bezpieczeństwa. Po trzecie, niektórzy usługodawcy zarabiają na monitorowaniu i sprzedaży metadanych pozyskanych od swoich użytkowników. Inaczej mówiąc, ochrona prywatności użytkowników to tylko połowicznie prawdziwe hasło reklamowe.

Własny VPN

Gdy zaufanie do trzecich podmiotów jest ograniczone, oczywistym rozwiązaniem jest przygotowanie własnej usługi VPN. To, niestety, jest dość skomplikowanym procesem. Nie wchodząc w szczegóły, potrzebujemy wykupić wirtualny serwer VPS (Virtual Private Server), najlepiej w innym kraju/położeniu. Trzeba skonfigurować system Linux i ustawić wszelkie parametry OpenVPN lub WireGuard. Opcjonalnie można wszystko ustawić na własnym sprzęcie, ale wtedy trzeba gdzieś ten sprzęt podłączyć i opłacać prąd oraz ISP. 

Jednak jest światełko w tunelu VPNa: urządzenia Android, np. stary smartfon lub tablet. Przy odpowiedniej konfiguracji takie urządzenie może być wykorzystywane jako zdalna bramka proxy do przeglądania internetu z zupełnie innej sieci i lokalizacji.

Co będzie potrzebne

  1. Smartfon lub tablet (najlepiej funkcjonujący bez baterii ze względu na pracę w trybie 24/7 i bezpieczeństwo przeciwpożarowe) lub Android box (tanie, pasywnie chłodzone urządzenie podłączane do telewizora). System Android 5.0 i wyżej.
  2. Laptop lub komputer stacjonarny (z systemem operacyjnym Windows, Mac, Linux lub FreeBSD).
  3. Dostęp do internetu.
  4. Aplikacje: ZeroTier i Android Proxy Server.
Diagram rozwiązania (uwaga: adresy IP są przykładowe)

Zarys

ZeroTier jest usługą używającą technologię STUN i hole punching w celu ustanawiania bezpośrednich połączeń między urządzeniami równorzędnymi za NAT (Network Address Translation). Efektem działania rozwiązania jest przydzielenie nowego, sieciowego adresu IP dla każdego urządzenia połączonego do wirtualnej sieci tworzonej przez ZeroTier.

Urządzenie Android (np. Android box, smartfon) zostanie skonfigurowane jako serwer proxy, czyli serwer pośredniczący.

Urządzenie użytkownika (np. laptop) zostanie skonfigurowane aby używać serwera pośredniczącego dostępnego poprzez nowy adres IP przydzielony przez wirtualną sieć ZeroTier, tworząc z niego bramkę do ogólnodostępnego internetu.

Krok po kroku

1. Załóż nowe konto u usługodawcy ZeroTier. Wybierz “Create a new network”, nadaj nazwę swojej nowej sieci i wybierz pulę adresów IP, które Twoja sieć będzie używać. Dla potrzeb tego tekstu użyję 10.147.19.*.

Panel sterowania wirtualnymi sieciami

Opcjonalnie, zabezpiecz swoją sieć wybierając opcję “Private” w sekcji “Access Control”. Takim sposobem każde nowe urządzenie próbujące się podłączyć do Twojej sieci będzie musiało być zatwierdzone przed uzyskaniem sieciowego adresu IP.

2. Pobierz aplikację ZeroTier (dostępna m.in. na repozytorium F-Droid oraz na Google Play), zainstaluj na urządzeniu Android i dodaj do swojej wirtualnej sieci ZeroTier. Uwaga: aplikacja wymusi stworzenie lokalnego (zapętlonego) połączenia VPN.

3. Zaloguj się do panelu sterowania wirtualnej sieci ZeroTier i zatwierdź dostęp nowego urządzenia w polu “Auth?”.

Panel sterowania siecią wirtualną. Zezwolenie na dostęp do sieci w kolumnie “Auth?”.

4. Na tym samym urządzeniu Android, na którym zainstalowałeś ZeroTier, zainstaluj Android Proxy Server. Skonfiguruj Proxy HTTP i HTTPS i przydziel im port. W tym instruktarzu proxy HTTP i HTTPS będzie działał na porcie 9999.

Android Proxy Server z włączoną usługą proxy HTTP i HTTPS

Opcjonalnie zaznacz automatyczny start przy włączeniu urządzenia.

Z menu drop-down, jako adres świadczenia usług proxy, wybierz adres IP sieci ZeroTier (na przykład 10.147.19.2).

5. Dodaj komputer końcowy (np. swój laptop) do sieci ZeroTier poprzez instalację oprogramowania dostępnego ze strony usługodawcy (Windows/Mac/Linux/FreeBSD). Ponownie zatwierdź możliwość połączenia komputera z Twoją wirtualną siecią w panelu sterowania ZeroTier. (Powinieneś zauważyć, że na Twoim komputerze pojawił się nowy adres IP przypisany z puli wirtualnej sieci. Na przykład 10.147.19.1).

Przykład: tutaj został użyty komputer z systemem Ubuntu Linux. Po pobraniu i zainstalowaniu aplikacji jako snap poleceniem sudo snap install zerotier, wystarczy wpisać następujące polecenie: sudo zerotier join <id_sieci_tutaj> sudo zerotier status. Jeżeli otrzymamy odpowiedź 200 join OK, komputer poprawnie dołączył do sieci. Jeżeli nie, należy sprawdzić w panelu ZeroTier, czy komputer został zatwierdzony do dołączenia do wirtualnej sieci. Zezwolenie na dostęp znajduje się w kolumnie “Auth?” w panelu sterowania ZeroTier.

Rezultat polecenia sudo zerotier join <id_sieci_tutaj> sudo zerotier status na komputerze z systemem Ubuntu Linux. Komputer poprawnie dołączył do sieci.

6. Zweryfikuj, czy oba urządzenia “widzą się” w tej samej sieci. Najlepiej zrobić to zwykłym poleceniem ping. Otwórz Terminal lub Wiersz Poleceń i wpisz ping 10.147.19.2 na laptopie (oczywiście, użyj adresu IP określonego w panelu sterowania ZeroTier). Jeżeli poprawnie skonfigurowałeś wirtualną sieć, powinieneś dostać odpowiedź od urządzenia Android.

Rezultat polecenia ping. Urządzenie Android odpowiada na adresie IP przypisanym przez ZeroTier

7. Z włączoną usługą proxy HTTP i HTTPS, wejdź w ustawienia proxy przeglądarki. Tutaj dla przykładu użyję Firefoxa. Otwórz Menu (☰) > Settings > Network Settings > Przycisk “Settings” > Manual Proxy Configuration. Wpisz adres IP serwera proxy (urządzenia Android) oraz odpowiedni port, który wcześniej skonfigurowałeś.

Ustawienia serwerów proxy w przeglądarce Mozilla Firefox

8. To wszystko! Jeżeli wszystko działa poprawnie, masz możliwość przeglądania internetu przez tunel do urządzenia Android.

Jeżeli chcesz zweryfikować, czy faktycznie tak jest, sprawdź swój zewnętrzny adres IP bez włączonej opcji Manual Proxy w Firefoxie i ponownie z włączoną opcją Manual Proxy. Możesz to zrobić używając dowolnej strony internetowej, która taką usługę oferuje (np. w wyszukiwarce wpisz “what is my IP” i skorzystaj z dowolnej strony). Adresy powinny się różnić. Na przykładzie diagramu powyżej, bez włączonego Manual Proxy adres zewnętrzny to 85.140.56.109. Po włączeniu opcji Manual Proxy zewnętrzny adres IP to 41.17.108.15.

Niedociągnięcia i uwagi końcowe

Wyżej wymienione rozwiązanie jest ciekawym projektem testerskim, a nie zamiennikiem pełnego systemu VPN i tak powinno być traktowane. Jest na to wiele powodów.

Po pierwsze, Android nie jest systemem operacyjnym przeznaczonym do zastosowań serwerowych. M.in. oznacza to, że niektóre aplikacje nie mogą być skonfigurowane aby automatycznie wykonać zdefiniowane zadania. W wyżej wymienionym przypadku np. aplikacja ZeroTier musi być ręcznie uruchomiona i przycisk “połącz” ręcznie włączony.

Po drugie, nie mamy gwarancji, że oprogramowanie Android Proxy Server (lub jakikolwiek odpowiednik) lub ZeroTier nie posiada luk w bezpieczeństwie. Dla klarowności też dodam, że sposób, w jaki ZeroTier i usługa proxy łączy urządzenia teoretycznie powinien tworzyć pełny tunel w sensie połączenia w jedną sieć dwóch urządzeń i usług na nich działających. Czy tak jest i na ile ten ruch jest zamaskowany to temat do głębszego testowania.

Po trzecie, system operacyjny Android 5.0 jest dość przestarzałym systemem i raczej nie powinniśmy go dziś używać do celów poufnych. Powodem dlaczego jest wymieniony, jest kompatybilność z aplikacjami wymienionymi w tym instruktarzu.

Reasumując, nie powinniśmy używać tego rozwiązania do tunelowania ruchu, który może być poufny (np. bankowość, mail, itp). Niemniej, jeżeli chcemy przekierować część ruchu bądź w łatwy sposób obejść cenzurę, wyżej wymienione rozwiązanie może być ciekawą alternatywą.

Pytania, komentarze?

Szanowni Państwo, pisząc tutaj teksty dokładam starań, aby treści były aktualne, poparte przemyśleniami i były informacyjne. Jednakże każdemu zdarzają się pomyłki, dlatego uprzejmie proszę o kontakt, gdy takie Państwo znajdą.

Tagged: Tags