Две многу различни работи се ставаат под името програмски VPN, и само една од нив е достапна за обична апликација на која било од двете мобилни платформи. Првата е вклучување профил што корисникот веќе го зачувал; втората е градење тунел во сопствениот процес. Android ви ја дава втората преку VpnService, а iOS ви ја дава втората преку правото Network Extension, додека првата останува кај системот, сопственикот на уредот или серверот MDM. Откривањето која навистина ви треба обично го прави проектот помал.

Две работи со исто име

Активирањето зачуван профил значи да му се каже на постоечки тунел да се крене: хост, акредитив, протокол, сѐ веќе конфигурирано на место што корисникот може да го види. Градењето тунел значи вашиот код го поседува интерфејсот, јамката на пакети и протоколот. Изгледаат слично во производителниот список и речиси не делат имплементација.

Ниту една мобилна платформа не ја изложува првата на SDK апликација. Врската што се појавува без корисникот да направи нешто не се разликува од злонамерен софтвер, затоа двата системи ставаат порта за согласност пред секоја апликација што носи сообраќај.

Android: порта за согласност и нема API за профили

VpnService постои од Android 4.0 и ѝ дозволува на апликацијата да создаде tun интерфејс, потоа да чита и пишува пакети. Услугата мора да се декларира со BIND_VPN_SERVICE, а VpnService.prepare() го создава системскиот дијалог што го прашува корисникот да дозволи. Примерот на платформата, ToyVpn, е најјасната изјава за предвидената форма: вашиот код го поседува интерфејсот и сѐ што тече низ него.

Она што не го прави е да додаде запис на екранот за VPN поставки на системот. За тоа нема јавен API, а апликацијата Поставки ги држи своите профили во складиште до кое обична апликација не може да стигне. Повиците до скриените класи од нормална апликација создаваат профили што системот никогаш не ги наведува, затоа кодот што изгледаше дека работи во една изградба тивко престанува да работи во следната.

Управуваната патека е одделна. Сопственик на уред или на профил може да назначи секогаш вклучен VPN пакет преку API-јата за политика на уредот, а корпоративна алатка може да прати профил што корисникот потоа го одобрува. Тоа е овластување за управување со уред, а не дозвола што апликацијата ја бара при инсталација. Ако вашиот клиент е организација, ова е патеката за која треба да се планира; ако вашиот клиент е личност што инсталира од продавница, таа воопшто не е достапна.

iOS: правото е граница

iOS ја дели истата работа поинаку. VPN клиент имплементира давател на пакетен тунел или прокси на апликација во рамката Network Extension, а соодветното право мора да му се додели на сметката за развивач. Лична VPN конфигурација преку NEVPNManager постои за поедноставниот случај и таа сѐ уште работи во истиот модел на дозволи. Apple ја документира целата површина во референцата за Network Extension, која вреди да се прочита пред да се одреди обемот на работата.

Нема поддржан начин да се отвори екранот за VPN поставки, да се прочитаат зачуваните конфигурации на корисникот или да се стартува една од нив. Клиентот може да прати конфигурациски профил за инсталација од корисникот, а потоа да го користи добиениот тунел преку обични мрежни повици. Тунелирањето по апликација го доделува сервер MDM преку правило при барање, а не го избира апликацијата за време на извршување.

VPN клиент од голем добавувач не е доказ дека вашата сметка може да го прати истото. Тие права се бараат по сметка за развивач и се прегледуваат, затоа ризикот за распоредот лежи кај Apple, а не во вашиот план за спринтот.

Десктопот стигнува подалеку, но сопственоста е иста

Windows е дозволувачкиот случај. Add-VpnConnection создава запис во телефонскиот именик од подигната PowerShell сесија, а rasdial го поврзува или исклучува од скрипта. Апликацијата може да управува и со клиент на добавувач преку неговата документирана командна линија. Создавањето на профилот сѐ уште е административно дејство, бидејќи записот живее во складиште за целата машина.

macOS се однесува исто со други алатки. scutil --nc start и stop работат на услуги што веќе постојат, додека создавањето на една е задача за системска администрација. Сопственоста на процесот на лаптоп не ве прави сопственик на конфигурацијата.

Што да се изгради наместо тоа

Ако вистинското барање е вашата апликација да стигне до внатрешен API, доволен е тунелот што корисникот веќе го користи. Праќајте обични HTTPS барања, оставете системот да го избере патот, и престанете да се обидувате да го контролирате тунелот. Ако барањето е само сообраќајот на вашата апликација да го користи тунелот, побарајте VPN по апликација преку каналот за управување, или завршете TLS внатре во апликацијата спрема услуга достапна без него.

Скриените API не се кратенка што вреди да се земе. Тие се менуваат меѓу изданија, паѓаат на прегледот на апликации, а дефектите што ги создаваат на оној што го наследува кодот му изгледаат како обични мрежни дефекти. Споредбата не е Android против iOS; тоа е поседување тунел против барање од платформата да насочува сообраќај, и само првото е ваше да се изгради.

Поврзани статии