SSH SOCKS прокси на Android-у: зашто се повезује само половина ваших апликација
ssh -D прави SOCKS ослушкивач, а не тунел целог уређаја. Прођите ланац од апликације до адаптера и до SSH-а, затим проверите празнине у DNS-у и животном циклусу.
Пријављујете се преко SSH-а, додајете -D 1080 и команда успева. Сада на телефону постоји SOCKS ослушкивач, а половина апликација и даље излази преко мобилних података. То је нормалан исход, а не покварен тунел: ssh -D прави proxy завршну тачку, а Android апликације користе proxy само ако их нешто на то примора. Пролазак кроз ланац корак по корак показује где сваки део посла заиста живи.
Почните тамо где саобраћај почиње
Изаберите једну апликацију која би требало да користи тунел и проверите да ли има сопствено proxy подешавање. Прегледач са SOCKS пољем је једноставан случај: усмерите га на 127.0.0.1:1080, укључите удаљени DNS ако подешавање постоји, и захтев пролази. Chat клијент, апликација за мапе или игра без таквог поља немају начина да користе ослушкивач, и ништа што упишете у SSH команду то не мења.
Пре него што укључите било шта друго, докажите да ослушкивач ради из сопствене љуске телефона са клијентом који директно говори SOCKS:
ssh -N -D 1080 [email protected]
curl --socks5-hostname 127.0.0.1:1080 https://ifconfig.me
Адреса која се враћа треба да буде адреса SSH сервера, а не телефона. Ако јесте, proxy половина је готова и остатак посла се односи на покривеност. Ако није, прво поправите SSH страну: аутентификацију кључем, способност сервера да достигне одредиште и сопствени излаз SSH сервера.
Додајте део који Android тражи
Апликације без proxy подешавања требају нешто што хвата њихове пакете и претвара их у proxy везе. На уређају без root-а то је адаптер VPN услуге: апликација која преузима виртуелни интерфејс и прослеђује изабрани саобраћај локалном SOCKS ослушкивачу. Ланац постаје апликација, адаптер, SOCKS ослушкивач, SSH веза, одредиште.
Инсталирајте адаптер, дајте му VPN дозволу и изаберите апликације или руте које треба да хвата. Икона кључа у статусној траци тада представља адаптер, а не засебан комерцијални VPN. Android дозвољава једну активну везу VPN услуге по корисничком профилу, па покретање друге VPN апликације не додаје слој ланцу: она се такмичи за исту улогу.
Ово је и корак у коме успешан тест може да вас завара. Ако је адаптер подешен да хвата само прегледач који сте већ усмерили на proxy, све ради и ништа друго није покривено. Прочитајте листу хватања пре него што закључите да је уређај у тунелу.
Држите SSH пренос изван хватања
Сама SSH веза не сме да се враћа у SOCKS тунел који одржава. Ако адаптер хвата саобраћај SSH апликације, тунел зависи од везе која чека тунел, а резултат је петља која се заглављује или пада чим адаптер крене.
Интегрисане имплементације штите сопствени преносни socket. Са одвојеним апликацијама треба вам подржано изузеће: оставите SSH апликацију изван хватања или изузмите SSH завршну тачку по адреси. Оба имају цену. Изузеће целе терминалне апликације уклања из тунела и њену неповезану мрежну активност, а изузеће адресе се квари када се адреса сервера промени или када се име при следећој вези разреши другачије.
Проверите изузеће споља: поново повежите адаптер, затим потврдите да SSH сесија преживљава и да proxy захтев још пријављује адресу сервера. Сесија која ради док адаптер не крене и затим се смрзне јесте та петља.
Пратите DNS и UDP до краја ланца
OpenSSH динамичко прослеђивање преноси TCP везе. То није UDP-associate ни ICMP пренос, и адаптер не може да измисли UDP прослеђивање прихватањем UDP пакета. Све што инсистира на UDP-у, укључујући QUIC и WebRTC медије, или ће пасти или ће се вратити на TCP, зависно од апликације.
DNS тражи сопствену одлуку. Апликација која име разрешава локално шаље упит кроз уобичајени resolver пре повезивања, па тунел преноси везу али не и претрагу. Proxy свестан клијент са опцијом удаљеног DNS-а то избегава; ухваћена апликација без ње не. Проверите који је resolver одговорио уместо да претпоставите да га је адаптер променио.
Држите SOCKS ослушкивач везан за loopback, проверите host кључ SSH сервера при првом коришћењу и оставите уобичајену HTTPS проверу на месту за завршни сајт. SSH штити део телефон-до-сервера; не шифрује оно што сервер ради после.
Проверите два животна циклуса и одлучите
Адаптер и SSH сесија имају одвојене животне циклусе. Ако SSH падне док адаптер наставља да хвата, апликације могу да висе без очигледне грешке, јер њихови пакети још улазе у виртуелни интерфејс који више нема радни излаз. Ако адаптер стане, апликације или иду директно или бивају блокиране, зависно од VPN политике уређаја.
Намерно тестирајте оба смера: убијте SSH сесију док адаптер ради, затим зауставите адаптер док SSH остаје горе. Оно што телефон чини у сваком случају јесте политика коју заиста уводите, шта год тврдила упутства за инсталацију.
Ако радни ток тражи покривеност целог уређаја са предвидивим начином отказа, прави IP VPN или одржаван адаптер намењен овом ланцу је искрен одговор. Љуска сесија остављена да ради поред неповезане апликације за хватање није одржаван тунел уређаја; то су две компоненте без договора о томе шта се дешава када једна од њих заврши.