Reverzní tethering přesouvá provoz telefonu do počítače a vede ho ven spojením toho počítače. Samotný USB kabel to neudělá: telefon potřebuje službu zachytávání, která převezme jeho směrování, a počítač potřebuje relay, který tyto pakety nese dál. Cesta má čtyři skoky: aplikace, zachytávání na telefonu, USB relay a výstup hostitele, a každý má jiného vlastníka. Tato příručka tuto cestu staví, umisťuje VPN hostitele tam, kam patří, a kontroluje každý skok, než výsledku uvěříte.

Než něco spustíte, zmapujte skoky

Každý skok uplatňuje vlastní politiku, a proto funkční výsledek na jednom konci nic neříká o druhém. Aplikace volí cíl a resolver, služba zachytávání rozhoduje, který provoz vstoupí do relaye, relay předává do socketů hostitele a směrování a VPN hostitele určují adresu, kterou cíl nakonec vidí.

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

Roli zachytávání na telefonu může najednou držet jen jeden klient služby VPN, takže druhá běžná VPN aplikace se na relay nenaskládá. Pokud VPN patří počítači, je služba zachytávání přístupovým článkem k tomu počítači, ne důkazem, že vzdálený tunel už výsledek chrání.

Připravte relay, než se telefonu dotknete

Gnirehtet je dokumentovaný příklad této architektury: klient služby VPN bez rootu na telefonu plus relay přenášený přes ADB na hostiteli, s podporou TCP a UDP přes IPv4. Jeho repozitář také uvádí, že projekt už není aktivně udržován, takže ho berte jako referenční návrh a funkční nástroj pro laboratoř, ne jako podporovaný produkt k standardizaci na spravované flotile.

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

Nejprve spusťte adb devices. Telefon, který nepřijal ladicí klíč hostitele, se hlásí jako neautorizovaný a relay se nepřipojí, dokud se výzva na zařízení nepřijme. gnirehtet run nainstaluje klienta, spustí relay a aktivuje zachytávání; u verze, která kroky odděluje, použijte místo toho dokumentované podpříkazy install, relay a start.

Přístup přes ADB je vztah ovládání zařízení, ne síťové nastavení. Autorizujte jen počítač, který ovládáte, a po dokončení úkolu toto oprávnění odvolejte.

Vraťte VPN hostitele do cesty

Relay je běžný proces hostitele, takže jeho další spojení sledují směrovací tabulku hostitele. Profil plného tunelu je přenese; rozdělený tunel možná ne. Pokud VPN hostitele používá ovládání po aplikacích, přidejte binárku relaye do povolené sady, jinak relay dál používá fyzické rozhraní, zatímco prohlížeč vypadá chráněně.

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

Spusťte první dva příkazy před připojením VPN hostitele a po něm. Pokud se adresa nezmění, relay není v tunelu, ať okno klienta říká cokoli. Tunel jen pro privátní sítě také nechává veřejné cíle na obvyklém výstupu hostitele, což vypadá jako únik, ale je to politika, kterou jste nastavili.

DNS se pro provoz přes relay řeší na hostiteli, takže resolver hostitele rozhoduje, který server jména uvidí. Nastavení privátního DNS na telefonu se přes relay nepřenáší a test resolveru na straně telefonu popis dotazů hostitele nenahradí.

Ověřte každý skok zvlášť

Tři kontroly v tomto pořadí: telefon dosáhne na relay, relay dosáhne na cíl podle politiky hostitele a aplikace cíl správně přeloží a použije. Zastavte se u prvního selhání, místo abyste znovu načítali stránky a hádali.

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

Záznam sítě VPN ve výpisu konektivity ukazuje, že služba zachytávání je aktivní; vlastní log relaye ukazuje, zda toky přicházejí. Nepřítomnost v jednom z nich problém čistě rozdělí: žádné zachytávání znamená stranu telefonu, žádné toky stranu hostitele.

Prohlížeč, který funguje na hostiteli, dokazuje cestu prohlížeče hostitele, ne cestu procesu relaye. Porovnejte adresy, které každý hlásí, a otestujte privátní zdroj i veřejnou stránku, protože tunel jen pro privátní sítě může směrovat jedno a ne druhé.

Odstraňte instalaci a zvolte chování při selhání

Návrat je součástí příručky. Zastavte a odstraňte relay, odinstalujte klienta zachytávání a po dokončení úkolu odvolejte oprávnění k ladění hostitele v možnostech pro vývojáře na telefonu.

gnirehtet stop
gnirehtet uninstall
adb kill-server

Rozhodněte, co má telefon dělat, když relay zmizí. Bez výslovné volby může přejít na mobilní data a uniknout provoz, který jste chtěli směrovat, proto chování blokování spojení nebo politiku VPN nastavte záměrně a demontáž otestujte, než se na ni spolehnete.

Zapište, který hostitel byl autorizován, verzi relaye, politiku tunelu hostitele a kroky demontáže. Právě tento záznam dělá příští nastavení reverzního tetheringu opakovatelným, místo dalšího odpoledne znovuobjevování.

Související články