Бұл сенім факт ретінде қабылданатын дәрежеде кең таралған: Android тек бір VPN-ге рұқсат береді, сондықтан телефонда жұмыс істейтін SSH сервері сол туннель арқылы жұмыс істей алмайды. Бірінші жартысы дұрыс, ал қорытынды одан туындамайды. Платформаның шектеуі VPN қызметінің ұясын қанша қолданба ұстай алатыны туралы, ал қанша socket болуы мүмкін немесе кімге телефонға қосылуға рұқсат етілгені туралы емес. Тыңдайтын socket-і бар SSH демоны қарапайым порты бар қарапайым қолданба, ал туннель оның трафигі жүре алатын жолдардың бірі.

Бір VPN ережесі шын мәнінде нені шектейді

VpnService бір ұялы ресурс. Қолданба туннель орнатқанда ол құрылғының VPN-іне айналады, ал туннель орнатуға тырысқан екінші қолданба біріншісі жойылғанша қабылданбайды. Бұл туннель иелігі туралы ереже және екі VPN клиентінің неге бір уақытта жұмыс істей алмайтынын түсіндіреді.

Ол тыңдайтын socket-тер туралы ештеңе айтпайды. SSH сервері VpnService-ді шақырмайды, пакеттерді ұстамайды және сол ұя үшін бәсекелеспейді. Ол портты байланыстырады және қосылымдарды қабылдайды, бұл VPN мүлде орнатылмаған кезде де жасайтын нәрсесі. Сондықтан аңыз туннель жеткізушілеріне қойылатын шектеуді желілік қосылымдарға қойылатын шектеумен шатастырады, ал бұл екеуінің арасында ешқандай байланыс жоқ.

Тыңдаушы — мақсат, туннельдің бөлігі емес

Туннель пайда болғанда, телефонның онда мекенжайы болады, ал серіктес құрылғының сол мекенжайға маршруты болады. Бірдеңе жауап бере ме, оны тыңдаушы шешеді. loopback-ке байланған демон тек телефонның өзінен қолжетімді; ескі туннель мекенжайына байланған демон қайта қосылғаннан кейін байлауын сақтауы мүмкін, бірақ ол байланған мекенжай өзгерген.

Байлау ережелері — қарапайым SSH конфигурациясы: тыңдау мекенжайы мен порты және кімнің аутентификациядан өте алатыны. Android-те бұл параметрлер қолданбаның өз конфигурациясында тұрады, ал қолданба процесінің иесіне артықшылықты порттарды пайдалануға рұқсат етілмеуі мүмкін, сондықтан 22 портын root ретінде байлаудың десктоп әдеті өзгеріссіз көшпейді.

ListenAddress 10.90.0.4
Port 2222
AllowUsers alice

Содан кейін жолдың өзіне рұқсат бар. Шығыс веб-трафигін қуана тасымалдайтын тұтынушылық VPN өз клиенттеріне кіріс қосылымдарына мүлде рұқсат бермеуі мүмкін; көпшілігі бермейді, өйткені бұл бір клиентті екіншісіне әшкере етеді. Егер серіктес телефонның туннель мекенжайына еш жерден жете алмаса, мәселе қызмет саясатында, телефонда емес.

Жауап жолы әдетте сынатын жер

Серіктес телефонның туннель мекенжайына жетіп, SYN келді делік. Енді жауап сол жолмен шығуы керек, және бұл телефонның ішіндегі маршруттау шешімі. Егер жауап әдепкі желі болғандықтан Wi-Fi арқылы шықса, серіктес ешқашан аяқталмайтын қосылымды көреді, бұл дәл файрволға ұқсайды.

Android мұны десктоптан күрделі етеді, өйткені әдепкі желі процесс бойынша таңдалады және VPN қолданбасының саясаты оны өзгерте алады. VPN клиенті тек рұқсат етілген қолданбалар тізімін маршруттай алады, сондықтан сол тізімнен тыс сервер қолданбасы жауаптары үшін физикалық желіні пайдалана береді, ал серіктес оларды туннель арқылы күтеді.

Қолданба өз socket-терін белгілі бір желіге де байлай алады, бұл әдепкіні ауыстырады. Қызмет бір мекенжайдан қолжетімді, ал екіншісінен емес деген есепті оқығанда, әдетте осы механизм тұрады.

VPN-ді айналып өту кіріс қызметін жөндемейді

Танымал шешім, SSH қолданбасын VPN-нен шығару арқылы оның трафигі қайта бағытталмайтын болуы, қарсы мәселенің түзетуі. Бұл шығыс SSH клиентінің тасымалы туннель салдарынан үнемі бұзылғанда көмектеседі. Хостингтегі сервер үшін ол жауаптарды серіктес пайдаланып отырған туннельден шығарып жіберуі мүмкін, бұл ішінара сәтсіздікті толық сәтсіздікке айналдырады.

Дәл осы маршрутизаторда жария порт ашуға да қатысты. Егер талап бір уәкілетті құрылғының VPN арқылы телефонға жетуі болса, SSH-ді интернетке шығару басқа қауіп моделі, жөндеу емес.

Алдымен қызметтің мекенжайын шешіңіз: телефонның LAN мекенжайы, оның туннель мекенжайы немесе әдейі бағытталған соңғы нүкте. Әрқайсысының өз қолжетімділік және әшкерелеу шарты бар, ал оларды араластыру шағын қолжетімділік мәселесін тұрақты тесікке айналдыратын жол.

Бір уақытта бір бағытты диагностикалаңыз

Конфигурацияны өзгертуге дейін төрт фактіні жазыңыз: серіктес қосылатын мекенжай, телефондағы тыңдаушының күйі, оны иеленетін қолданба мен пайдаланушы контексті және әр бағытта байқалған жол. VPN SSH-ді ажыратады деген есепте осылардың ешқайсысы жоқ және ол клиент тасымалының мәселесін қолжетімсіз серверден ажырата алмайды.

adb shell ip -br addr
adb shell ip route get 10.90.0.9
nc -vz 10.90.0.4 2222

Порт тексеруін серіктестен іске қосыңыз, телефоннан емес, және SSH клиентінің егжей-тегжейлі шығысын оқып, оның TCP қол алысуының алдында немесе кейін сәтсіз болатынын қараңыз. Ешқашан қосылмайтын socket пен қабылданбаған кіру — әртүрлі кезеңдер, жауаптылар да әртүрлі.

Жөндеу кезінде хост кілтін тексеруді және тіркелгі шектеулерін бұзбай ұстаңыз. Тыңдаушы мен рұқсат етілген пайдаланушыларды шектеу — қолжетімді серверді қабылдарлық ететін дәл сол. Қосылым жұмыс істесін деп оларды босаңсыту бір мәселені одан да нашарға ауыстырады. OpenSSH серверінің анықтамасы тыңдау мен қолжетімділік бақылауларын қамтиды, егер сіздің Android іске асыруыңыз сол конфигурация атауларын ұстанса.

Қатысты мақалалар