Дзве вельмі розныя задачы трапляюць пад назву праграмнага 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; гэта ўладанне тунелем супраць просьбы да платформы накіроўваць трафік, і толькі першае — ваша, каб будаваць.

Падобныя артыкулы