Käänteinen tethering siirtää puhelimen liikenteen tietokoneelle ja vie sen ulos tietokoneen yhteyden kautta. Pelkkä USB-kaapeli ei sitä tee: puhelin tarvitsee kaappauspalvelun, joka ottaa sen reitityksen haltuunsa, ja tietokone releen, joka kantaa paketit eteenpäin. Polulla on neljä hyppyä: sovellus, kaappaus puhelimessa, USB-rele ja isännän ulostulo, ja jokaisella on eri omistaja. Tämä ohjekirja rakentaa polun, sijoittaa isännän VPN:n oikeaan paikkaan ja tarkistaa jokaisen hypyn ennen kuin luotat tulokseen.

Kartoita hypyt ennen kuin ajat mitään

Jokainen hyppy soveltaa omaa käytäntöään, siksi toimiva tulos toisessa päässä ei kerro toisesta mitään. Sovellus valitsee kohteen ja ratkaisijan, kaappauspalvelu päättää, mikä liikenne tulee releeseen, rele välittää isännän soketteihin, ja isännän reititys ja VPN päättävät osoitteen, jonka kohde lopulta näkee.

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

Vain yksi VPN-palvelun asiakas voi pitää puhelimen kaappausroolia kerrallaan, joten toinen tavallinen VPN-sovellus ei pinoudu releen päälle. Jos VPN kuuluu tietokoneelle, kaappauspalvelu on pääsylinkki tuohon tietokoneeseen, ei todiste siitä, että etätunneli jo suojaa tulosta.

Valmistele rele ennen kuin kosket puhelinta

Gnirehtet on tämän arkkitehtuurin dokumentoitu esimerkki: VPN-palvelun asiakas ilman rootia puhelimessa sekä ADB:n kautta isännällä kannettava rele, joka tukee TCP- ja UDP-liikennettä IPv4:n päällä. Sen tietovarasto kertoo myös, että projektia ei enää ylläpidetä aktiivisesti, joten kohtele sitä viitesuunnitelmana ja laboratoriossa toimivana työkaluna, älä tuettuna tuotteena, jota standardoitaisiin hallitussa laitekannassa.

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

Aja ensin adb devices. Puhelin, joka ei ole hyväksynyt isännän viritysavainta, raportoidaan valtuuttamattomaksi, eikä rele yhdistä ennen kuin laitteen kehote hyväksytään. gnirehtet run asentaa asiakkaan, käynnistää releen ja aktivoi kaappauksen; versiossa, joka erottaa vaiheet, käytä sen sijaan dokumentoituja alikomentoja install, relay ja start.

ADB-yhteys on laitteen hallintasuhde, ei verkkoasetus. Valtuuta vain tietokone, jota hallitset, ja suunnittele valtuutuksen peruuttaminen, kun tehtävä on valmis.

Palauta isännän VPN takaisin polulle

Rele on tavallinen isännän prosessi, joten sen jatkoyhteydet noudattavat isännän reititystaulukkoa. Kokotunnelin profiili kantaa ne; jaettu tunneli ei välttämättä. Jos isännän VPN käyttää sovelluskohtaisia kontrolleja, lisää releen binääri sallittuun joukkoon, muuten rele käyttää edelleen fyysistä liitäntää, kun selain näyttää suojatulta.

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

Aja kaksi ensimmäistä komentoa ennen isännän VPN:n yhdistämistä ja sen jälkeen. Jos osoite ei muutu, rele ei ole tunnelissa, mitä tahansa asiakasikkuna sanoo. Vain yksityisiin verkkoihin tarkoitettu tunneli jättää myös julkiset kohteet isännän tavalliselle ulostulolle, mikä näyttää vuodolta mutta on käytäntö, jonka määritit.

DNS ratkaistaan isännällä releen kautta kulkevalle liikenteelle, joten isännän ratkaisija päättää, mikä palvelin näkee nimet. Puhelimen yksityinen DNS-asetus ei siirry releen yli, eikä puhelimen ratkaisijatesti kuvaa isännän hakuja.

Varmista jokainen hyppy erikseen

Kolme tarkistusta tässä järjestyksessä: puhelin tavoittaa releen, rele tavoittaa kohteen isännän käytännön alaisena, ja sovellus ratkaisee ja käyttää kohdetta oikein. Pysähdy ensimmäiseen epäonnistumiseen sen sijaan, että lataisit sivuja uudelleen ja arvailisit.

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

VPN-verkon merkintä yhteyksien vedoksessa osoittaa, että kaappauspalvelu on aktiivinen; releen oma loki osoittaa, saapuvatko virrat. Puuttuminen toisessa jakaa ongelman puhtaasti: ei kaappausta tarkoittaa puhelimen puolta, ei virtoja tarkoittaa isännän puolta.

Isännällä toimiva selain todistaa isännän selaimen polun, ei releprosessin polkua. Vertaa osoitteita, jotka kumpikin ilmoittaa, ja testaa sekä yksityinen resurssi että julkinen sivu, koska vain yksityisiin verkkoihin tarkoitettu tunneli voi reitittää toisen eikä toista.

Pura asennus ja valitse vikatilanteen toiminta

Peruutus on osa ohjekirjaa. Pysäytä ja poista rele, poista kaappausasiakas ja peruuta isännän viritysvaltuutus puhelimen kehittäjäasetuksista, kun tehtävä on valmis.

gnirehtet stop
gnirehtet uninstall
adb kill-server

Päätä, mitä puhelimen pitää tehdä, kun rele katoaa. Ilman selvää valintaa se voi palata mobiilidataan ja vuotaa liikenteen, jota yritit reitittää, joten aseta yhteyksien estokäyttäytyminen tai VPN-käytäntö tarkoituksella ja testaa purku ennen kuin luotat siihen.

Kirjaa valtuutettu isäntä, releen versio, isännän tunnelikäytäntö ja purkuvaiheet. Juuri se kirjaus tekee seuraavasta käänteisen tetheringin asennuksesta toistettavan uuden löytämisen iltapäivän sijaan.

Aiheeseen liittyvät artikkelit