Tethering odwrócony przenosi ruch telefonu na komputer i wyprowadza go przez połączenie tego komputera. Sam kabel USB tego nie zrobi: telefon potrzebuje usługi przechwytywania, która przejmie jego trasowanie, a komputer przekaźnika, który poniesie te pakiety dalej. Ścieżka ma cztery przeskoki: aplikacja, przechwytywanie na telefonie, przekaźnik USB i wyjście hosta, a każdy ma innego właściciela. Ten podręcznik buduje tę ścieżkę, stawia VPN hosta tam, gdzie jego miejsce, i sprawdza każdy przeskok, zanim zaufasz wynikowi.

Zmapuj przeskoki, zanim cokolwiek uruchomisz

Każdy przeskok stosuje własną politykę, dlatego działający wynik na jednym końcu nic nie mówi o drugim. Aplikacja wybiera cel i resolver, usługa przechwytywania decyduje, który ruch wejdzie do przekaźnika, przekaźnik przekazuje do gniazd hosta, a trasowanie i VPN hosta decydują o adresie, który cel w końcu widzi.

HopOwnerWhat it decides
Application requestThe appDestination, resolver, address family
Capture servicePhone VpnService appWhich traffic enters the relay at all
ADB relayHost processForwarding phone flows to host sockets
Host egressHost routing and VPNExit address and host policy

Tylko jeden klient usługi VPN może naraz pełnić rolę przechwytywania telefonu, więc druga zwykła aplikacja VPN nie nakłada się na przekaźnik. Jeśli VPN należy do komputera, usługa przechwytywania jest ogniwem dostępu do tego komputera, a nie dowodem, że zdalny tunel już chroni wynik.

Przygotuj przekaźnik, zanim dotkniesz telefonu

Gnirehtet jest udokumentowanym przykładem tej architektury: klient usługi VPN bez roota na telefonie plus przekaźnik przenoszony przez ADB na hoście, obsługujący TCP i UDP po IPv4. Jego repozytorium podaje też, że projekt nie jest już aktywnie utrzymywany, więc traktuj go jako wzorzec referencyjny i działające narzędzie laboratoryjne, a nie jako wspierany produkt do standaryzacji w zarządzanej flocie.

adb devices
adb shell getprop ro.build.version.release
gnirehtet run

Najpierw uruchom adb devices. Telefon, który nie zaakceptował klucza debugowania hosta, jest zgłaszany jako nieautoryzowany, a przekaźnik nie podłączy się, dopóki monit na urządzeniu nie zostanie zaakceptowany. gnirehtet run instaluje klienta, uruchamia przekaźnik i aktywuje przechwytywanie; w wersji rozdzielającej kroki użyj zamiast tego udokumentowanych podpoleceń install, relay i start.

Dostęp ADB to relacja sterowania urządzeniem, a nie ustawienie sieci. Autoryzuj tylko komputer, który kontrolujesz, i zaplanuj odebranie tego upoważnienia po zakończeniu zadania.

Przywróć VPN hosta na ścieżkę

Przekaźnik jest zwykłym procesem hosta, więc jego dalsze połączenia podlegają tabeli trasowania hosta. Profil pełnego tunelu je przenosi; tunel dzielony może nie. Jeśli VPN hosta używa sterowania na aplikację, dodaj binarium przekaźnika do dozwolonego zbioru, inaczej przekaźnik nadal korzysta z interfejsu fizycznego, podczas gdy przeglądarka wygląda na chronioną.

ip route get 1.1.1.1
curl -4 https://ifconfig.me
sudo ss -tnp | grep -i relay

Uruchom pierwsze dwa polecenia przed i po podłączeniu VPN hosta. Jeśli adres się nie zmienia, przekaźnik nie jest w tunelu, cokolwiek mówi okno klienta. Tunel tylko prywatny zostawia też cele publiczne na zwykłym wyjściu hosta, co wygląda jak wyciek, ale jest polityką, którą ustawiłeś.

DNS jest rozwiązywany na hoście dla ruchu przez przekaźnik, więc resolver hosta decyduje, który serwer widzi nazwy. Prywatne ustawienie DNS na telefonie nie przechodzi przez przekaźnik, a test resolvera po stronie telefonu nie opisze zapytań hosta.

Sprawdź każdy przeskok osobno

Trzy kontrole w tej kolejności: telefon dociera do przekaźnika, przekaźnik dociera do celu zgodnie z polityką hosta, a aplikacja poprawnie rozwiązuje i używa tego celu. Zatrzymaj się przy pierwszym błędzie zamiast przeładowywać strony i zgadywać.

adb shell dumpsys connectivity | grep -i -A3 vpn
adb logcat -s GnirehtetRelay:V Gnirehtet:V

Wpis sieci VPN w zrzucie łączności pokazuje, że usługa przechwytywania jest aktywna; własny log przekaźnika pokazuje, czy strumienie docierają. Brak w jednym z nich czysto dzieli problem: brak przechwytywania to strona telefonu, brak strumieni to strona hosta.

Przeglądarka działająca na hoście dowodzi ścieżki przeglądarki hosta, a nie ścieżki procesu przekaźnika. Porównaj adresy, które każda zgłasza, i przetestuj zasób prywatny oraz stronę publiczną, bo tunel tylko prywatny może trasować jedno, a nie drugie.

Zdemontuj i wybierz zachowanie przy awarii

Wycofanie jest częścią podręcznika. Zatrzymaj i usuń przekaźnik, odinstaluj klienta przechwytywania i odbierz upoważnienie debugowania hosta w opcjach programisty telefonu, gdy zadanie się skończy.

gnirehtet stop
gnirehtet uninstall
adb kill-server

Zdecyduj, co telefon ma robić, gdy przekaźnik zniknie. Bez wyraźnego wyboru może wrócić do danych komórkowych i wyciec ruch, który próbowałeś trasować, więc ustaw świadomie zachowanie blokowania połączeń lub politykę VPN i przetestuj demontaż, zanim na nim polegasz.

Zapisz, który host został autoryzowany, wersję przekaźnika, politykę tunelu hosta i kroki demontażu. Ten zapis czyni następną konfigurację tetheringu odwróconego powtarzalną, a nie kolejnym popołudniem odkrywania od nowa.

Powiązane artykuły