Divi ļoti atšķirīgi darbi tiek likti zem programmatiskā VPN nosaukuma, un tikai viens no tiem ir pieejams parastai lietotnei jebkurā no divām mobilajām platformām. Pirmais ir ieslēgt profilu, ko lietotājs jau ir saglabājis; otrais ir būvēt tuneli savā procesā. Android dod otro caur VpnService un iOS dod otro caur Network Extension atļauju, bet pirmais paliek sistēmai, ierīces īpašniekam vai MDM serverim. Noskaidrošana, kurš jums patiešām vajadzīgs, parasti padara projektu mazāku.

Divi darbi ar vienu nosaukumu

Saglabāta profila aktivizēšana nozīmē pateikt esošam tunelim, lai tas ceļas augšā: resursdators, akreditācijas dati, protokols, viss jau konfigurēts vietā, ko lietotājs var redzēt. Tuneļa būvēšana nozīmē, ka jūsu kods pārvalda saskarni, pakešu cilpu un protokolu. Produkta sarakstā tie izskatās līdzīgi un gandrīz nedala ieviešanu.

Neviena mobilā platforma neatklāj pirmo SDK lietotnei. Savienojums, kas parādās bez lietotāja darbības, nav atšķirams no ļaunprātīgas programmatūras, tāpēc abas sistēmas liek piekrišanas vārtus priekšā katrai lietotnei, kas pārvadā trafiku.

Android: piekrišanas vārti un nekāda profila API

VpnService pastāv kopš Android 4.0 un ļauj lietotnei izveidot tun saskarni, pēc tam lasīt un rakstīt paketes. Pakalpojums ir jādeklarē ar BIND_VPN_SERVICE, un VpnService.prepare() rada sistēmas dialogu, kas lūdz lietotājam to atļaut. Platformas paraugs ToyVpn ir skaidrākais paredzētās formas izteikums: jūsu kods pārvalda saskarni un visu, kas caur to plūst.

Ko tas nedara, ir nepievieno ierakstu sistēmas VPN iestatījumu ekrānam. Tam nav publiska API, un lietotne Iestatījumi glabā savus profilus krātuvē, kurai parasta lietotne nevar piekļūt. Izsaukumi uz slēptajām klasēm no parastas lietotnes rada profilus, kurus sistēma nekad neuzskaita, tāpēc kods, kas šķita strādājam vienā būvējumā, klusi pārstāj strādāt nākamajā.

Pārvaldītais ceļš ir atsevišķs. Ierīces vai profila īpašnieks var norādīt vienmēr ieslēgtu VPN pakotni caur ierīces politikas API, un uzņēmuma rīks var nosūtīt profilu, ko lietotājs pēc tam apstiprina. Tā ir ierīces pārvaldības pilnvara, nevis atļauja, ko lietotne pieprasa instalēšanas laikā. Ja jūsu klients ir organizācija, tas ir ceļš, kuram jāplāno; ja jūsu klients ir persona, kas instalē no veikala, tas nemaz nav pieejams.

iOS: atļauja ir robeža

iOS sadala to pašu darbu citādi. VPN klients ievieš pakešu tuneļa nodrošinātāju vai lietotnes starpnieku Network Extension ietvarā, un atbilstošā atļauja ir jāpiešķir izstrādātāja kontam. Personiskā VPN konfigurācija caur NEVPNManager pastāv vienkāršākajam gadījumam, un tā joprojām darbojas tajā pašā atļauju modelī. Apple dokumentē visu virsmu Network Extension uzziņā, ko ir vērts izlasīt pirms darba apjoma noteikšanas.

Nav atbalstīta veida, kā atvērt VPN iestatījumu ekrānu, nolasīt lietotāja saglabātās konfigurācijas vai sākt kādu no tām. Klients var nosūtīt konfigurācijas profilu, ko lietotājs instalē, un pēc tam izmantot iegūto tuneli ar parastiem tīkla izsaukumiem. Tunelēšanu katrai lietotnei piešķir MDM serveris ar pieprasījuma noteikumu, nevis lietotne to izvēlas izpildes laikā.

Liela piegādātāja VPN klients nav pierādījums, ka jūsu konts var nosūtīt to pašu. Šīs atļaujas tiek pieprasītas katram izstrādātāja kontam un tiek pārskatītas, tāpēc grafika risks gulstas uz Apple, nevis uz jūsu sprinta plānu.

Dators aizsniedz tālāk, bet īpašumtiesības nemainās

Windows ir atļaujošais gadījums. Add-VpnConnection izveido tālruņu grāmatas ierakstu no paaugstinātas PowerShell sesijas, un rasdial savieno vai atvieno to no skripta. Lietotne var arī vadīt piegādātāja klientu caur tā dokumentēto komandrindu. Profila izveide joprojām ir administratīva darbība, jo ieraksts dzīvo visas mašīnas krātuvē.

macOS uzvedas tāpat ar citiem rīkiem. scutil --nc start un stop darbojas ar pakalpojumiem, kas jau pastāv, bet viena izveide ir sistēmas administrēšanas uzdevums. Procesa pārvaldīšana klēpjdatorā nepadara jūs par konfigurācijas īpašnieku.

Ko būvēt tā vietā

Ja patiesā prasība ir, lai jūsu lietotne sasniegtu iekšēju API, pietiek ar tuneli, ko lietotājs jau izmanto. Sūtiet parastus HTTPS pieprasījumus, ļaujiet sistēmai izvēlēties ceļu, un pārstājiet mēģināt kontrolēt tuneli. Ja prasība ir, lai tikai jūsu lietotnes trafiks izmantotu tuneli, pieprasiet VPN katrai lietotnei caur pārvaldības kanālu, vai pārtrauciet TLS lietotnes iekšienē pret pakalpojumu, kas sasniedzams bez tā.

Slēptie API nav īsceļš, ko ir vērts izmantot. Tie mainās starp laidieniem, tie neiztur lietotņu pārskatīšanu, un atteices, ko tie rada, tam, kas manto kodu, izskatās kā parastas tīkla atteices. Salīdzinājums nav Android pret iOS; tas ir tuneļa īpašumtiesības pret lūgumu platformai maršrutēt trafiku, un tikai pirmais ir jūsu būvējamais.

Saistītie raksti