Kodėl programėlė negali įjungti išsaugoto VPN profilio „Android“ arba „iOS“ sistemose
Savo tunelio kūrimas ir išsaugoto profilio įjungimas yra du skirtingi darbai. Palyginkite, ką „Android“, „iOS“ ir darbalaukis iš tikrųjų leidžia programėlei.
Du labai skirtingi darbai patenka po programinio VPN pavadinimu, ir tik vienas jų prieinamas įprastai programėlei bet kurioje iš dviejų mobiliųjų platformų. Pirmasis – įjungti profilį, kurį naudotojas jau išsaugojo; antrasis – sukurti tunelį savo paties procese. „Android“ duoda antrąjį per VpnService, o „iOS“ duoda antrąjį per Network Extension teisę, tuo tarpu pirmasis lieka sistemai, įrenginio savininkui arba MDM serveriui. Išsiaiškinimas, kurio iš tikrųjų reikia, paprastai sumažina projektą.
Du darbai su tuo pačiu pavadinimu
Išsaugoto profilio aktyvavimas reiškia pasakymą esamam tuneliui, kad jis kiltų: hostas, prisijungimo duomuo, protokolas, viskas jau sukonfigūruota vietoje, kurią naudotojas mato. Tunelio kūrimas reiškia, kad jūsų kodas valdo sąsają, paketų ciklą ir protokolą. Produkto eilėje jie atrodo panašiai ir beveik nesidalija įgyvendinimu.
Nė viena mobili platforma neatskleidžia pirmojo SDK programėlei. Ryšys, kuris atsiranda nieko nedarant naudotojui, nesiskiria nuo kenkėjiškos programos, todėl abi sistemos stato sutikimo vartus prieš kiekvieną programėlę, kuri perduoda srautą.
„Android“: sutikimo vartai ir jokio profilio API
VpnService egzistuoja nuo „Android“ 4.0 ir leidžia programėlei sukurti tun sąsają, tada skaityti ir rašyti paketus. Paslauga turi būti deklaruota su BIND_VPN_SERVICE, o VpnService.prepare() sukuria sistemos dialogą, prašantį naudotojo leisti. Platformos pavyzdys ToyVpn yra aiškiausias numatytos formos pareiškimas: jūsų kodas valdo sąsają ir viską, kas ja teka.
Ko ji nedaro, tai neprideda įrašo į sistemos VPN nustatymų ekraną. Tam nėra viešo API, o „Nustatymai“ programėlė laiko savo profilius saugykloje, kurios įprasta programėlė nepasiekia. Kreipiniai į paslėptas klases iš įprastos programos sukuria profilius, kurių sistema niekada nerodo, todėl kodas, kuris atrodė veikiantis viename kūrinyje, tyliai nustoja veikti kitame.
Valdomas kelias yra atskiras. Įrenginio arba profilio savininkas gali paskirti visada įjungtą VPN paketą per įrenginio politikos API, o įmonės įrankis gali išsiųsti profilį, kurį naudotojas vėliau patvirtina. Tai įrenginio valdymo įgaliojimas, o ne leidimas, kurio programėlė prašo diegimo metu. Jei jūsų klientas yra organizacija, tai kelias, kuriam reikia planuoti; jei jūsų klientas yra asmuo, diegiantis iš parduotuvės, jo visai nėra.
„iOS“: teisė yra riba
„iOS“ tą patį darbą skirsto kitaip. VPN klientas įgyvendina paketinio tunelio teikėją arba programėlės tarpinį serverį pagal Network Extension sistemą, ir atitinkama teisė turi būti suteikta kūrėjo paskyrai. Asmeninė VPN konfigūracija per NEVPNManager egzistuoja paprastesniam atvejui, ir ji vis dar veikia toje pačioje leidimų modelio dalyje. „Apple“ dokumentuoja visą paviršių Network Extension žinyne, kurį verta perskaityti prieš nustatant darbo apimtį.
Nėra palaikomo būdo atidaryti VPN nustatymų ekraną, perskaityti naudotojo išsaugotas konfigūracijas arba paleisti vieną iš jų. Klientas gali išsiųsti konfigūracijos profilį, kurį naudotojas įdiegs, ir tada naudoti gautą tunelį įprastais tinklo kreipiniais. Tuneliavimas pagal programėlę priskiriamas MDM serverio pagal pareikalavimo taisyklę, o ne programėlės pasirenkamas vykdymo metu.
Didelio tiekėjo VPN klientas nėra įrodymas, kad jūsų paskyra gali išsiųsti tą patį. Tos teisės prašomos kiekvienai kūrėjo paskyrai ir peržiūrimos, todėl grafiko rizika tenka „Apple“, o ne jūsų sprinto planui.
Darbalaukis pasiekia toliau, bet nuosavybė nesikeičia
„Windows“ yra leidžiantis atvejis. Add-VpnConnection sukuria telefonų knygos įrašą iš paaukštintos „PowerShell“ sesijos, o rasdial prijungia arba atjungia jį iš scenarijaus. Programėlė taip pat gali valdyti tiekėjo klientą per jo dokumentuotą komandų eilutę. Profilio kūrimas vis dar yra administracinis veiksmas, nes įrašas gyvena visos mašinos saugykloje.
„macOS“ elgiasi taip pat su kitais įrankiais. scutil --nc start ir stop veikia jau egzistuojančiose paslaugose, o vienos sukūrimas yra sistemos administravimo užduotis. Proceso valdymas nešiojamajame kompiuteryje nepadaro jūsų konfigūracijos savininku.
Ką statyti vietoj to
Jei tikrasis reikalavimas yra, kad jūsų programėlė pasiektų vidinį API, pakanka tunelio, kurį naudotojas jau naudoja. Siųskite įprastus HTTPS užklausimus, leiskite sistemai pasirinkti kelią, ir nustokite bandyti valdyti tunelį. Jei reikalavimas yra, kad tik jūsų programėlės srautas naudotų tunelį, paprašykite VPN pagal programėlę per valdymo kanalą arba užbaikite TLS programėlės viduje prieš paslaugą, pasiekiamą be jo.
Paslėpti API nėra verta imtis trumpasis kelias. Jie keičiasi tarp leidimų, jie nepraeina programėlių peržiūros, o gedimai, kuriuos jie sukelia, tam, kas paveldi kodą, atrodo kaip įprasti tinklo gedimai. Palyginimas nėra „Android“ prieš „iOS“; tai tunelio nuosavybė prieš prašymą platformai maršrutizuoti srautą, ir tik pirmasis yra jūsų statyti.