Proxy SOCKS prek SSH v Androidu: zakaj se poveže le polovica aplikacij
ssh -D zgradi poslušalca SOCKS, ne tunela celotne naprave. Prehodite verigo od aplikacije do adapterja in do SSH, nato preverite vrzeli v DNS in življenjskem ciklu.
Prijavite se prek SSH, dodate -D 1080 in ukaz uspe. Na telefonu zdaj obstaja poslušalec SOCKS, polovica aplikacij pa še vedno izhaja prek mobilnih podatkov. To je običajen rezultat, ne pokvarjen tunel: ssh -D ustvari končno točko proxyja, aplikacije Android pa proxy uporabljajo le, če jih nekaj prisili. Prehod verige korak za korakom pokaže, kje v resnici živi vsak del dela.
Začnite tam, kjer se promet začne
Izberite eno aplikacijo, ki bi morala uporabljati tunel, in preverite, ali ima svojo nastavitev proxyja. Brskalnik s poljem SOCKS je preprost primer: usmerite ga na 127.0.0.1:1080, vklopite oddaljeni DNS, če nastavitev obstaja, in zahteva gre skozi. Klepetalni odjemalec, aplikacija z zemljovidi ali igra brez takega polja ne morejo uporabiti poslušalca, in nič, kar vpišete v ukaz SSH, tega ne spremeni.
Preden vključite karkoli drugega, dokažite, da poslušalec deluje iz lupine telefona samega z odjemalcem, ki govori SOCKS neposredno:
ssh -N -D 1080 [email protected]
curl --socks5-hostname 127.0.0.1:1080 https://ifconfig.me
Naslov, ki se vrne, mora biti naslov strežnika SSH, ne telefona. Če je, je polovica proxyja končana, preostanek dela pa se nanaša na pokritost. Če ni, najprej popravite stran SSH: overjanje s ključem, zmožnost strežnika doseči cilj in lastni izhod strežnika SSH.
Dodajte del, ki ga Android potrebuje
Aplikacije brez nastavitve proxyja potrebujejo nekaj, kar ujame njihove pakete in jih spremeni v proxy povezave. Na napravi brez roota je to adapter storitve VPN: aplikacija, ki prevzame navidezni vmesnik in posreduje izbrani promet lokalnemu poslušalcu SOCKS. Veriga postane aplikacija, adapter, poslušalec SOCKS, povezava SSH, cilj.
Namestite adapter, mu dodelite dovoljenje VPN in izberite aplikacije ali poti, ki jih mora ujeti. Ikona ključa v vrstici stanja nato predstavlja adapter, ne ločenega komercialnega VPN. Android dovoli eno dejavno povezavo storitve VPN na uporabniški profil, zato zagon druge aplikacije VPN verigi ne doda plasti: tekmuje za isto vlogo.
To je tudi korak, kjer vas uspešen test lahko zavede. Če je adapter nastavljen, da ujame le brskalnik, ki ste ga že usmerili na proxy, vse deluje in nič drugega ni pokrito. Preberite seznam zajemanja, preden sklepate, da je naprava v tunelu.
Držite transport SSH zunaj zajemanja
Sama povezava SSH se ne sme vračati v tunel SOCKS, ki ga vzdržuje. Če adapter ujame promet aplikacije SSH, je tunel odvisen od povezave, ki čaka na tunel, rezultat pa je zanka, ki se ustavi ali spodleti takoj, ko adapter začne.
Integrirane izvedbe ščitijo svoj transportni vtič. Pri ločenih aplikacijah potrebujete podprto izjemo: pustite aplikacijo SSH zunaj zajemanja ali izvzemite končno točko SSH po naslovu. Obe imata ceno. Izvzem cele terminalske aplikacije odstrani iz tunela tudi njeno nepovezano omrežno dejavnost, izjema naslova pa se zlomi, ko se naslov strežnika spremeni ali ko se ime pri naslednji povezavi razreši drugače.
Preverite izjemo od zunaj: znova povežite adapter, nato potrdite, da seja SSH preživi in da zahteva prek proxyja še vedno poroča naslov strežnika. Seja, ki deluje do zagona adapterja in nato zamrzne, je ta zanka.
Sledite DNS in UDP do konca verige
Dinamično posredovanje OpenSSH prenaša povezave TCP. To ni transport UDP-associate ali ICMP, adapter pa ne more izmisliti posredovanja UDP s sprejemanjem paketov UDP. Vse, kar vztraja pri UDP, vključno s QUIC in mediji WebRTC, bodisi spodleti bodisi pade nazaj na TCP, odvisno od aplikacije.
DNS potrebuje svojo odločitev. Aplikacija, ki ime razreši lokalno, pošlje poizvedbo prek običajnega razreševalnika pred povezavo, zato tunel prenaša povezavo, ne pa iskanja. Odjemalec, ki se zaveda proxyja z možnostjo oddaljenega DNS, se temu izogne; ujeta aplikacija brez te možnosti se ne. Preverite, kateri razreševalnik je odgovoril, namesto da predvidevate, da je adapter to spremenil.
Držite poslušalca SOCKS vezanega na loopback, ob prvi uporabi preverite host ključ strežnika SSH in pustite običajno preverjanje HTTPS na mestu za končno mesto. SSH ščiti odsek telefon-do-strežnika; ne šifrira tega, kar strežnik počne potem.
Preverite dva življenjska cikla in se odločite
Adapter in seja SSH imata ločena življenjska cikla. Če SSH pade, medtem ko adapter še vedno zajema, lahko aplikacije obvisijo brez očitne napake, ker njihovi paketi še vedno vstopajo v navidezni vmesnik, ki nima več delujočega izhoda. Če se adapter ustavi, aplikacije bodisi gredo neposredno bodisi so blokirane, odvisno od politike VPN naprave.
Namerno preizkusite obe smeri: ubijte sejo SSH med delovanjem adapterja, nato ustavite adapter, medtem ko SSH ostane gor. Kar telefon počne v vsakem primeru, je politika, ki jo res uvajate, karkoli so trdila navodila za namestitev.
Če delovni tok potrebuje pokritost celotne naprave s predvidljivim načinom odpovedi, je pošten odgovor pravi IP VPN ali vzdrževan adapter, zasnovan za to verigo. Seja lupine, puščena delovati ob nepovezani aplikaciji za zajemanje, ni vzdrževan tunel naprave; to sta dve komponenti brez dogovora o tem, kaj se zgodi, ko ena od njiju konča.