Proxy SOCKS cez SSH na Androide: prečo sa pripojí len polovica aplikácií
ssh -D vytvára SOCKS naslúchač, nie tunel celého zariadenia. Prejdite reťaz od aplikácie k adaptéru a k SSH, potom skontrolujte medzery v DNS a životnom cykle.
Prihlásite sa cez SSH, pridáte -D 1080 a príkaz uspeje. Na telefóne teraz existuje SOCKS naslúchač a polovica aplikácií stále vychádza cez mobilné dáta. To je normálny výsledok, nie pokazený tunel: ssh -D vytvára koncový bod proxy a aplikácie Android používajú proxy len vtedy, keď ich na to niečo prinúti. Prejdenie reťaze krok za krokom ukazuje, kde každá časť práce naozaj žije.
Začnite tam, kde sa začína prevádzka
Vyberte jednu aplikáciu, ktorá by mala používať tunel, a skontrolujte, či má vlastné nastavenie proxy. Prehliadač s poľom SOCKS je jednoduchý prípad: nasmerujte ho na 127.0.0.1:1080, zapnite vzdialené DNS, ak také nastavenie existuje, a požiadavka prejde. Klient chatu, aplikácia máp alebo hra bez takého poľa nemajú spôsob, ako naslúchač použiť, a nič, čo napíšete do príkazu SSH, to nezmení.
Skôr než zapojíte čokoľvek ďalšie, dokážte, že naslúchač funguje z vlastnej shellu telefónu s klientom, ktorý hovorí priamo SOCKS:
ssh -N -D 1080 [email protected]
curl --socks5-hostname 127.0.0.1:1080 https://ifconfig.me
Adresa, ktorá sa vráti, by mala byť adresou servera SSH, nie telefónu. Ak je, polovica proxy je hotová a zvyšok práce sa týka pokrytia. Ak nie, najprv opravte stranu SSH: overovanie kľúčom, schopnosť servera dosiahnuť cieľ a vlastný výstup servera SSH.
Pridajte časť, ktorú Android potrebuje
Aplikácie bez nastavenia proxy potrebujú niečo, čo zachytí ich pakety a premení ich na proxy spojenia. Na zariadení bez rootu je to adaptér služby VPN: aplikácia, ktorá prevezme virtuálne rozhranie a posiela vybranú prevádzku do lokálneho SOCKS naslúchača. Reťaz sa stane aplikáciou, adaptérom, SOCKS naslúchačom, SSH spojením, cieľom.
Nainštalujte adaptér, udeľte mu povolenie VPN a vyberte aplikácie alebo trasy, ktoré má zachytávať. Ikona kľúča v stavovom riadku potom predstavuje adaptér, nie samostatnú komerčnú VPN. Android povoľuje jedno aktívne spojenie služby VPN na používateľský profil, takže spustenie druhej VPN aplikácie nepridá vrstvu na reťaz: súťaží o tú istú úlohu.
Toto je aj krok, v ktorom vás úspešný test môže oklamať. Ak je adaptér nastavený zachytávať len prehliadač, ktorý ste už nasmerovali na proxy, všetko funguje a nič iné nie je pokryté. Prečítajte si zoznam zachytávania, skôr než usúdite, že zariadenie je v tuneli.
Držte transport SSH mimo zachytávania
Samotné SSH spojenie sa nesmie vracať do SOCKS tunela, ktorý udržiava. Ak adaptér zachytáva prevádzku SSH aplikácie, tunel závisí od spojenia, ktoré čaká na tunel, a výsledkom je slučka, ktorá sa zasekne alebo zlyhá hneď, ako adaptér začne.
Integrované implementácie chránia vlastný transportný socket. Pri samostatných aplikáciách potrebujete podporovanú výnimku: nechajte SSH aplikáciu mimo zachytávania alebo vylúčte koncový bod SSH podľa adresy. Obe majú cenu. Vylúčenie celej terminálovej aplikácie odoberie z tunela aj jej nesúvisiacu sieťovú aktivitu a výnimka adresy sa pokazí, keď sa adresa servera zmení alebo keď sa meno pri ďalšom pripojení vyrieši inak.
Skontrolujte výnimku zvonka: znova pripojte adaptér, potom potvrďte, že SSH relácia prežije a že požiadavka cez proxy stále hlási adresu servera. Relácia, ktorá funguje do štartu adaptéra a potom zamrzne, je tou slučkou.
Sledujte DNS a UDP až do konca reťaze
Dynamické preposielanie OpenSSH prenáša TCP spojenia. Nie je to UDP-associate ani ICMP transport a adaptér nemôže vymyslieť UDP preposielanie tým, že prijíma UDP pakety. Všetko, čo trvá na UDP, vrátane QUIC a médií WebRTC, buď zlyhá, alebo sa vráti na TCP podľa aplikácie.
DNS potrebuje vlastné rozhodnutie. Aplikácia, ktorá rieši meno lokálne, odošle otázku cez bežný resolver pred pripojením, takže tunel prenáša spojenie, ale nie vyhľadávanie. Klient, ktorý si je vedomý proxy s možnosťou vzdialeného DNS, tomu sa vyhne; zachytená aplikácia bez nej nie. Skontrolujte, ktorý resolver odpovedal, namiesto toho, aby ste predpokladali, že to adaptér zmenil.
Držte SOCKS naslúchač pripútaný k loopbacku, pri prvom použití overte host kľúč servera SSH a nechajte bežnú validáciu HTTPS na mieste pre koncovú lokalitu. SSH chráni úsek telefón-server; nešifruje to, čo server robí potom.
Skontrolujte dva životné cykly a rozhodnite
Adaptér a SSH relácia majú oddelené životné cykly. Ak SSH padne, kým adaptér pokračuje v zachytávaní, aplikácie môžu visieť bez zjavnej chyby, pretože ich pakety stále vstupujú do virtuálneho rozhrania, ktoré už nemá funkčný výstup. Ak adaptér zastane, aplikácie buď idú priamo, alebo sú zablokované, podľa VPN politiky zariadenia.
Otestujte oba smery zámerne: zabite SSH reláciu, keď adaptér beží, potom zastavte adaptér, kým SSH zostáva hore. To, čo telefón v každom prípade robí, je politika, ktorú naozaj zavádzate, nech už inštalačné pokyny tvrdili čokoľvek.
Ak pracovný postup potrebuje pokrytie celého zariadenia s predvídateľným režimom zlyhania, čestnou odpoveďou je skutočný IP VPN alebo udržiavaný adaptér navrhnutý pre túto reťaz. Shell relácia ponechaná bežať vedľa nesúvisiacej zachytávacej aplikácie nie je udržiavaný tunel zariadenia; sú to dve komponenty bez dohody o tom, čo sa stane, keď jedna z nich skončí.