Käänteinen tethering Androidille USB:n kautta: komennot, tarkistukset, peruutus
Käänteinen tethering lähettää puhelimen liikenteen isännän releen kautta. Rakenna polku puhelimesta isäntään, pidä isännän VPN silmukassa ja varmista jokainen hyppy.
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.
| Hop | Owner | What it decides |
|---|---|---|
| Application request | The app | Destination, resolver, address family |
| Capture service | Phone VpnService app | Which traffic enters the relay at all |
| ADB relay | Host process | Forwarding phone flows to host sockets |
| Host egress | Host routing and VPN | Exit 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.