Korzystanie z dwóch VPN-ów to nie jedno żądanie. Może oznaczać docieranie do dwóch organizacji jedna po drugiej, rozdzielenie aplikacji służbowych i prywatnych albo uruchomienie jednego tunelu wewnątrz drugiego. Android obsługuje te trzy przypadki zupełnie inaczej, a liczba zainstalowanych na telefonie aplikacji VPN nie jest architekturą. Pytanie, które je rozdziela, jest proste: czy dwie ścieżki muszą istnieć w tym samym momencie dla tej samej aplikacji?

Trzy układy, jedno pytanie

Jeśli odpowiedź brzmi nie, bo dwie sieci są używane w różnych momentach, chcesz świadomego przełączenia. Jeśli odpowiedź brzmi nie, bo same aplikacje są rozdzielone, chcesz rozdzielenia profili, w którym każda aplikacja siedzi w kontekście, do którego należy jej tunel. Jeśli odpowiedź brzmi tak i jedna ścieżka musi fizycznie przenosić drugą, chcesz łańcucha, i to jedyny z trzech, w którym kolejność jest częścią projektu.

Wszystko inne wynika z tego wyboru. Przełączanie ma okno przejścia, rozdzielenie ma granicę polityki, a łańcuch ma koszt narzutu i koszt zależności. Wybór niewłaściwego nie kończy się czysto; daje telefon, który wygląda na połączony, i aplikację, która do niczego nie dociera.

Przełączanie w jednym kontekście użytkownika

Android pozwala na jedną aktywną usługę VPN na użytkownika. Uruchomienie drugiej aplikacji VPN w tym samym kontekście zastępuje pierwszą albo zostaje wprost odrzucone; nigdy nie składa obu zestawów tras i na pewno nie nakłada ich szyfrowania. W obrębie jednego użytkownika dwa tunele to sekwencja, a nie suma.

Jest to wykonalne, gdy dostęp jest naprawdę sekwencyjny. Nazwij profile tak, aby aktywny był oczywisty, dokończ wszystko wrażliwe przed przełączeniem i oczekuj krótkiego okna, w którym żadna ze ścieżek nie jest w pełni ustanowiona. Zamknięcie karty przeglądarki to nie to samo co zakończenie sesji: karta może zachować stan swojego konta i po prostu wysłać następne żądanie przez nowo wybraną sieć, i to jest dokładnie ten wyciek, który ludzie zauważają później.

Tego, czego przełączanie dać nie może, to maszyna będąca w obu sieciach jednocześnie. Jeśli aplikacja potrzebuje prywatnego adresu z każdej strony, żadna dyscyplina klienta tego nie wytworzy.

Rozdzielenie według profilu

Zarządzany profil służbowy to odrębny użytkownik z własnymi aplikacjami, własnym magazynem kluczy i własną polityką sieciową. Klient poczty służbowej może używać tunelu organizacji, podczas gdy prywatna przeglądarka używa prywatnego, i oba mogą być połączone jednocześnie, bo nie są w tym samym kontekście walczącym o miejsce.

Rozdzielenie jest też granicą. Prywatna przeglądarka nie pożycza tunelu służbowego, nie widzi służbowych sufiksów DNS i nie dociera do sieci służbowej tylko dlatego, że obie usługi pokazują się jako połączone. Kiedy ktoś zgłasza, że link się nie otwiera, sprawdź, która kopia aplikacji go obsłużyła i który profil posiada to konto, zanim dotkniesz któregokolwiek z dwóch VPN-ów.

Traktuj granicę jako stałą. Utworzenie drugiego profilu albo usunięcie profilu służbowego, aby obejść decyzję o routingu pracodawcy, niszczy właśnie to rozdzielenie, które czyniło układ działającym, a na urządzeniu zarządzanym jest to zwykle naruszenie polityki, a nie zmiana konfiguracji.

Łańcuch, w którym kolejność jest projektem

Łańcuch to układ, o którym ludzie zwykle mówią, gdy mówią oba naraz: tunel telefonu podróżuje wewnątrz tunelu routera. To może działać, a ograniczenia są konkretne. Dostawca zewnętrzny musi zezwolić na działającą ścieżkę do punktu końcowego VPN telefonu, co w przypadku protokołów opartych na UDP oznacza, że usługa zewnętrzna nie może blokować ani ograniczać tego ruchu.

Zrozum, kto co widzi. Dostawca zewnętrzny widzi połączenie w stronę wewnętrznego punktu końcowego. Dostawca wewnętrzny odbiera ruch telefonu z wyjścia zewnętrznego i przekazuje go dalej. Ostateczny cel zwykle widzi wyjście usługi wewnętrznej i żaden dostawca wzdłuż łańcucha nie jest ślepy; konta aplikacji nadal identyfikują użytkownika niezależnie od ścieżki.

Oczekuj praktycznych kosztów. Każda warstwa dodaje enkapsulację, więc efektywne MTU spada i wartość, która była dobra dla jednego tunelu, teraz fragmentuje się lub zatrzymuje, dopóki MTU tunelu wewnętrznego nie zostanie ustawione ostrożnie. Dwie warstwy oznaczają też dwie zależności od awarii i dwa zestawy komunikatów podtrzymujących, a wewnętrzny tunel oparty na TCP przez stratne łącze zewnętrzne może zatrzymać się w sposób, który wygląda jak martwy serwer.

Co najważniejsze, łańcuch nie scala dwóch sieci prywatnych. Trasy, nakładające się prefiksy, rozwiązywanie DNS i reguły dostępu pozostają osobnymi decyzjami, a router przenoszący jeden VPN, podczas gdy telefon przenosi inny, nie daje telefonowi obu przestrzeni adresowych.

Sprawdź projekt, zanim zaczniesz go debugować

Zapisz układ w jednym zdaniu i przetestuj go na aplikacji, która zawiodła. Dostęp sekwencyjny powinien pokazywać jeden tunel naraz; rozdzielenie profili powinno pokazywać każdą aplikację w jej własnym użytkowniku; łańcuch powinien pokazywać tunel wewnętrzny ustanawiający się przez interfejs zewnętrzny, a nie fizyczny.

adb shell ip -br addr
adb shell ip route get 10.20.0.8
adb shell dumpsys connectivity | grep -i vpn

Jeśli wyszukiwanie trasy wskazuje interfejs fizyczny, gdy aplikacja oczekuje tunelu, projekt i kontekst aplikacji się nie zgadzają, i żadna dodatkowa aplikacja VPN ich nie pogodzi. Dokumentacja dotycząca profili zarządzanych obejmuje reguły rozdzielenia, jeśli potrzebujesz szczegółu polityki, a nie routingu.

Powiązane artykuły