SSH SOCKS-проксі на Android: чаму падключаецца толькі палова праграм
ssh -D будуе SOCKS-слухач, а не тунель прылады. Прайдзіце ланцуг ад праграмы да адаптара і SSH, праверце DNS і тэрміны жыцця.
Вы ўваходзіце па SSH, дадаяце -D 1080, і каманда выконваецца. Цяпер на тэлефоне ёсць SOCKS-слухач, а палова праграм па-ранейшаму выходзіць праз мабільныя даныя. Гэта звычайны вынік, а не зламаны тунель: ssh -D стварае проксі-канчатковы пункт, а праграмы Android выкарыстоўваюць проксі толькі тады, калі нешта іх прымушае. Пакрокавае праходжанне ланцуга паказвае, дзе насамрэч знаходзіцца кожная частка працы.
Пачніце адтуль, дзе пачынаецца трафік
Выберыце праграму, якая павінна выкарыстоўваць тунель, і праверце, ці ёсць у яе ўласная налада проксі. Браўзер з полем SOCKS — просты выпадак: накіруйце яго на 127.0.0.1:1080, уключыце аддалены DNS, калі такая налада ёсць, і запыт пройдзе. Чат-кліент, карта або гульня без такога поля не маюць спосабу выкарыстаць слухач, і нішто з набранага ў камандзе SSH гэтага не зменіць.
Перш чым задзейнічаць што-небудзь яшчэ, дакажыце, што слухач працуе з уласнай абалонкі тэлефона кліентам, які размаўляе па SOCKS наўпрост:
ssh -N -D 1080 [email protected]
curl --socks5-hostname 127.0.0.1:1080 https://ifconfig.me
Адрас, які вернецца, павінен быць адрасам SSH-сервера, а не тэлефона. Калі так, проксі-палова зроблена, а астатняя праца — пра пакрыццё. Калі не, спачатку выпраўце бок SSH: аўтэнтыфікацыю ключом, здольнасць сервера дасягнуць прызначэння і ўласны выхад SSH-сервера.
Дадайце частку, патрэбную Android
Праграмы без налады проксі маюць патрэбу ў чымсьці, што перахоплівае іх пакеты і ператварае іх у проксі-злучэнні. На прыладзе без root гэта адаптар службы VPN: праграма, якая бярэ віртуальны інтэрфейс і накіроўвае выбраны трафік у лакальны SOCKS-слухач. Ланцуг выглядае так: праграма, адаптар, SOCKS-слухач, злучэнне SSH, прызначэнне.
Усталюйце адаптар, дайце яму дазвол VPN і выберыце праграмы або маршруты, якія ён павінен перахопліваць. Тады значок ключа ў радку стану азначае адаптар, а не асобны камерцыйны VPN. Android дазваляе адно актыўнае злучэнне службы VPN на профіль карыстальніка, таму другая праграма VPN не дадае пласт зверху, а спаборнічае за тую ж ролю.
Гэта таксама крок, на якім паспяховы тэст можа падмануць. Калі адаптар перахоплівае толькі той браўзер, які вы ўжо накіравалі на проксі, усё працуе і больш нічога не пакрыта. Прачытайце спіс перахопу, перш чым рабіць выснову, што прылада ў тунелі.
Трымайце транспарт SSH па-за перахопам
Само злучэнне SSH не павінна вяртацца ў SOCKS-тунель, які яно падтрымлівае. Калі адаптар перахоплівае трафік праграмы SSH, тунель залежыць ад злучэння, якое чакае тунель, і вынік — пятля, што затынаецца або ламаецца, як толькі адаптар запускаецца.
Інтэграваныя рэалізацыі абараняюць уласны транспартны сокет. З асобнымі праграмамі патрэбна падтрыманае выключэнне: пакіньце праграму SSH па-за перахопам альбо выключыце канчатковы пункт SSH па адрасе. Абодва варыянты маюць кошт. Выключэнне цэлай тэрмінальнай праграмы прыбірае з тунеля і яе іншую сеткавую актыўнасць, а выключэнне па адрасе ламаецца, калі адрас сервера змяняецца або імя пры наступным злучэнні развяжацца інакш.
Праверце выключэнне звонку: перападлучыце адаптар, затым пераканайцеся, што сеанс SSH жыве і проксі-запыт па-ранейшаму паведамляе адрас сервера. Сеанс, які працуе да запуску адаптара, а затым замірае, — гэта і ёсць пятля.
Прасочыце DNS і UDP да канца ланцуга
Дынамічны forward OpenSSH пераносіць TCP-злучэнні. Гэта не UDP-асацыяцыя і не транспарт ICMP, і адаптар не можа вынайсці перанакіраванне UDP, прымаючы UDP-пакеты. Усё, што патрабуе UDP, уключаючы QUIC і медыя WebRTC, або пацерпіць няўдачу, або вернецца на TCP у залежнасці ад праграмы.
DNS патрабуе ўласнага рашэння. Праграма, якая развязвае імя лакальна, адпраўляе запыт праз звычайны рэзалвер да злучэння, таму тунель пераносіць злучэнне, але не пошук. Кліент, які ўлічвае проксі і мае опцыю аддаленага DNS, гэтага пазбягае; перахопленая праграма без такой опцыі — не. Праверце, які рэзалвер адказаў, замест таго каб меркаваць, што адаптар яго змяніў.
Трымайце SOCKS-слухач прывязаным да loopback, праверце ключ хоста SSH-сервера пры першым выкарыстанні і пакіньце звычайную праверку HTTPS для канчатковага сайта. SSH абараняе адрэзак ад тэлефона да сервера; ён не шыфруе тое, што сервер робіць далей.
Праверце два тэрміны жыцця і вырашыце
Адаптар і сеанс SSH маюць асобныя тэрміны жыцця. Калі SSH абрываецца, пакуль адаптар працягвае перахоп, праграмы могуць завіснуць без відавочнай памылкі, бо іх пакеты па-ранейшаму трапляюць у віртуальны інтэрфейс, у якога больш няма працоўнага выхаду. Калі адаптар спыняецца, праграмы або ідуць наўпрост, або блакуюцца — у залежнасці ад палітыкі VPN прылады.
Праверце абодва кірункі наўмысна: забіце сеанс SSH пры працуючым адаптары, затым спыніце адаптар, пакуль SSH жывы. Тое, што тэлефон робіць у кожным выпадку, і ёсць палітыка, якую вы насамрэч укараняеце, што б ні сцвярджала інструкцыя.
Калі працэсу патрэбна пакрыццё ўсёй прылады з прадказальным рэжымам адмовы, сумленны адказ — сапраўдны IP VPN або адаптар, які падтрымліваецца і створаны для гэтага ланцуга. Сеанс абалонкі побач з непавязанай праграмай перахопу — не падтрыманы тунель прылады; гэта два кампаненты без дамовы пра тое, што адбудзецца, калі адзін з іх скончыцца.