iOS қолданбасынан телефон VPN-де ме деп сұраңыз, және шынайы жауап: ол мұны сіз меңзеген мағынада біле алмайды. SDK «құрылғы туннельде» деген жалауша бермейді, ал оған жақындай алатын жеке интерфейстер шығарылатын қолданбалар үшін жабық. Сіз өз қолданбаңыздың конфигурациясын, оған байланған күйді және желілік стектен бір-екі жанама белгіні бақылай аласыз. Әрқайсысы басқа сұраққа жауап береді, ал бұзылған тексерулердің көбі солардың біреуін толық жауап деп қабылдаудан туындайды.

Бір VPN жалаушасы туралы аңыз

Сенім бойынша SDK-нің бір жерінде құрылғының туннельде екенін хабарлайтын қасиет бар, дәл қолжетімділік жалаушасы хосттың жауап беретінін хабарлайтыны сияқты. Мұндай жария қасиет жоқ. Тіпті болса да, «туннель бар» және «менің трафигім оны пайдаланады» — екі бөлек тұжырым, ал көптеген қолданба үшін тек екіншісі маңызды.

Дәл осы алшақтық бір жолдық VPN детекторын жарнамалайтын кітапханалардың интерфейс атауы немесе прокси кілті сияқты нәзік нәрсені оқып, оны үкім ретінде ұсынуының себебі.

nil-ге сенбес бұрын параметрлерді жүктеңіз

Ортақ менеджер данасы сұраған сәтте-ақ бар, бірақ оның протокол қасиеті жүктеу callback-ы аяқталғанша nil болып қалады. Сондықтан nil протокол «әлі жүктелмеген» дегенді «орнатылмаған» дегеннен кем емес жиілікте білдіреді. Оқуды аяқтау блогының ішінде жасаңыз, содан кейін ғана шешіңіз: бар протокол нысаны, қосу жалаушасы қосулы күйі — «орнатылған» деген осылай көрінеді.

Екінші сигнал қосылым нысанында: жарамсыз күй, оны жүйе осы қолданбада орнатылған конфигурация болмағанда хабарлайды. Аяқталған жүктеуден кейін жарамсыз күй мен nil протокол бірге нақты жоқтық, уақыт жарысы емес.

Қосылым өзгерістері хабарлама ретінде келеді

load және save-ке берілген өңдеушілер конфигурацияға не болғанын хабарлайды, туннельдің не істеп жатқанын емес. Қосылу кезінде солардың бірі іске қосылуын күту — ешқашан шешілмейтін жарыс. Оның орнына күй өзгерісінің хабарламасын қадағалаңыз және ол келгенде қосылым нысанының ағымдағы мәнін оқыңыз.

Конфигурация орнатылған соң қосылым күйі қысқа реттіліктен өтеді: ажыратылған, қосылуда, қосылған, қайта растауда, ажыратуда. «Қосылған» туннельді сипаттайды, оның артындағы серверді емес, сондықтан бұл трафиктің ағып жатқанының дәлелі емес. On-demand қолданба кідіртілген кезде де туннельді көтере алады, сонда хабарлама жаңартатын ештеңе болмай тұрып келеді.

Шектеулі прокси суреті — белгі, үкім емес

CFNetwork қолданбаға жүйенің ағымдағы прокси параметрлерін бере алады, және сол нәтиженің ішінде интерфейс атауы бойынша кілттелген шектеулі сөздік бар. tun, utun, ppp, ipsec немесе tap-пен басталатын атауды көру — туннельдің бар екендігінің белгісі. Бұл осы қолданба көре алатын нәрсенің суреті болып қалады, пакеттердің қайда баратыны туралы мәлімдеме емес.

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

Симулятор Mac-ты қарызға алады, ал басқа қолданбалар көрінбейді

Симулятордың өз желілік стегі жоқ; ол жасайтын әрбір қосылым — Mac-тікі. Сондықтан хост Mac-та жұмыс істеп тұрған VPN симуляцияланған қолданба үшін әлдеқашан күшінде, ал симулятордың өз параметрлері ештеңе көрсетпейді. Егер туннель симулятор іске қосылғаннан кейін көтерілсе, оны қайта іске қосу қолданбаны жөндеуден әдетте жылдамырақ. Стандартты емес порттағы хостқа сол порт URL-де қажет, немесе socat TCP-LISTEN:12345,fork TCP:host:12345 сияқты жергілікті бағыттау қажет.

Жария API-лер басқа қолданбаларға немесе конфигурация профильдеріне тиесілі VPN профильдерін тізімдемейді. Бір белгілі қолданба үшін canOpenURL арқылы URL схемасын тексеру — тасымалданатын тәсіл, ал iOS 9-дан бастап сұралатын схема Info.plist-те жариялануы керек; оны қалдырсаңыз, шақыру false қайтарады. OpenVPN Connect openvpn://-ге жауап береді, бұл оны жақсы мысал және нашар жалпы детектор етеді.

Үш бақылауды біріктіріп, олардың нені білдіретінін айтыңыз

Іс жүзінде үш нәтижені қабаттаңыз: жүктелген және қосулы конфигурация, жарамсыз емес қосылым күйі және тек туннель арқылы қолжетімді мекенжайға сұраныс. Әрқайсысы жеке алдайды; бірге олар қолданба нені біле алатынын айтады, пайдаланушы нені болжайтынын емес.

Нәтижені диагностикада бір boolean емес, үш жол етіп жазыңыз. Пайдаланушы VPN өшірулі деп айтқанда, ал қолданбаңыз келіспесе, үш жол қай бақылаудың ауытқығанын көрсетеді, және бұл — әрекет етуге болатын қолдау билеті мен «менде жұмыс істейді» деп аяқталатын билеттің айырмашылығы.

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