Àwọn API VPN fún iOS: NEVPNManager, olùpèsè tunnel tàbí profile?
Yan API ní ìbámu pẹ̀lú ọ̀nà ìgbékalẹ̀ tí o gbọ́dọ̀ bá sọ̀rọ̀, lẹ́yìn náà fi hàn pé tunnel ń gbé ìrìnàjò: ìtẹ̀léra save-load-start, entitlement provider àti àwọn ìlànà on-demand.
Àwọn ọjà mẹ́ta ọ̀tọ̀ọ̀tọ̀ ló ń dáhùn sí orúkọ iOS VPN, wọn kò sì pín API kan. Personal VPN ń gúnlé orí àwọn ọ̀nà ìgbékalẹ̀ IPsec àti IKEv2 tí ó wà nínú ẹ̀rọ náà. Custom tunnel ń ṣiṣẹ́ pẹ̀lú ìlànà rẹ tirẹ̀ nínú network extension. Configuration profile ń ṣètò ọ̀kan nínú wọn, ó sì lè ṣàfikún ìhùwàsí on-demand. Yíyan ní ìbámu pẹ̀lú ọ̀nà ìgbékalẹ̀ tí o gbọ́dọ̀ bá sọ̀rọ̀ yára ju yíyan ní ìbámu pẹ̀lú ìtọ́sọ́nà tí a ṣe àkópọ̀ rẹ̀ kọ́kọ́ lọ.
Ṣe àwọn àyẹ̀wò tí ó wà nísàlẹ̀ ní ìtẹ̀léra, nítorí pé ìgbésẹ̀ kọ̀ọ̀kan gbà pé èyí tí ó ṣáájú ti pèsè ìṣètò tí ó tọ́.
Ìgbésẹ̀ 1: yan ní ìbámu pẹ̀lú ọ̀nà ìgbékalẹ̀
Tí olùsìn bá jẹ́ IKEv2 tàbí IPsec ọ̀nà Cisco, NEVPNManager tó, àwọn ọ̀nà ìgbékalẹ̀ ẹ̀rọ náà sì wá lọ́fẹ̀ẹ́. Tí olùsìn bá ń sọ OpenVPN, WireGuard tàbí ohun mìíràn, NEVPNManager kò lè rànwọ́: kò ní ìdè fún ìlànà ẹ̀ka kẹta. Irú ọ̀ràn yẹn nílò NETunnelProviderManager pẹ̀lú packet tunnel provider tí ó ń ṣe ìlànà náà. Profile ń pín ìṣètò nìkan, kò sì lè ṣàfikún ọ̀nà ìgbékalẹ̀ tí ẹ̀rọ ìṣiṣẹ́ kò ní.
PPTP kì í ṣe àfojúsùn lórí àwọn ẹ̀rọ ìsinsìnyí. IPsec pẹ̀lú àṣírí tí a pín ń retí orúkọ ẹgbẹ́ nínú remoteIdentifier, ohun keychain tí ó ń pa àṣírí mọ́, àti ìjẹ́rìí gbígbòòrò nígbà tí olùsìn bá béèrè orúkọ olùlò. Ẹ̀ka kọ̀ọ̀kan tí ó ṣèé ṣe kù ń farahàn gẹ́gẹ́ bí aṣiṣe ìṣètò gbogbogbò kan náà, nítorí náà ṣàfikún gbogbo wọn kí o tó ṣe àtúnyẹ̀wò ohun mìíràn.
Ìgbésẹ̀ 2: bọ̀wọ̀ fún ìtẹ̀léra ìpamọ́, ìgbéwọlé, ìbẹ̀rẹ̀
NEVPNManager ń kọ sínú preferences, ó ń kà wọ́n padà, lẹ́yìn náà ni ó tó bẹ̀rẹ̀. Kún àwọn ohun ìlànà àti manager, pe saveToPreferences, pe loadFromPreferences, kí o sì pe startVPNTunnel láti inú load completion handler. Bíbẹ̀rẹ̀ kí ìgbéwọlé tó padà ń dá aṣiṣe configuration-invalid, NEVPNErrorDomain code 1, jáde lórí ìṣètò tí ó tọ́ nípa mìíràn.
Ìrísí náà kúrú tó láti tọ́jú ní ibi kan:
manager.protocolConfiguration = proto
manager.isEnabled = true
manager.saveToPreferences { }
manager.loadFromPreferences { manager.connection.startVPNTunnel() }startVPNTunnel ń padà nígbà tí a gba ìbéèrè náà, kì í ṣe nígbà tí tunnel ti wà lókè. Ṣàkíyèsí NEVPNStatusDidChange kí o sì ka connection.status fún ipò gidi. Ohun èlò tí ó gbà àṣeyọrí ní ibi ìpè ń ròyìn VPN tí ó so mọ́ nígbà tí extension ṣì ń ṣe ìdúnàádúrà. Ipò connecting jẹ́ déédé fún ìṣẹ́jú kan; ipò tí kò jáde kúrò nínú rẹ̀ láé ni àkùnà tí ó yẹ kí a kọ sínú àkọsílẹ̀.
Ìgbésẹ̀ 3: fún ìlànà provider ní ohun tí ó nílò
Custom transport ń ṣiṣẹ́ nínú ìlànà ọ̀tọ̀ pẹ̀lú bundle identifier tirẹ̀ àti entitlement tirẹ̀. Ohun èlò container àti provider méjèèjì nílò entitlement network-extension nígbà ìfọwọ́sí, àti pé ìkọ́ Developer ID ní òde App Store ṣì gbọ́dọ̀ gbé e nínú provisioning profile. Entitlement tí ó kù ń dà bí àkùnà ìlànà nítorí pé extension kò bẹ̀rẹ̀ rárá.
Kò sí socket descriptor gbogbogbo láti yá. NEPacketTunnelProvider ń fún ọ ní NEPacketTunnelFlow pẹ̀lú read, write àti cancel, kóòdù tí ó ń dé àwọn ọ̀nà kọ́kọ́rọ́ àdáni sì ń já ní àárín àwọn ìtẹ̀jáde. Provider ń tẹ̀síwájú ní ṣíṣe nígbà tí ohun èlò wà ní ẹ̀yìn, nítorí náà ohun èlò container kò nílò ipò ẹ̀yìn fún ìyẹn.
Ìgbésẹ̀ 4: on-demand jẹ́ àkójọ ìlànà, kì í ṣe yíyí
isOnDemandEnabled ń pèsè àwọn ìlànà nìkan; NEOnDemandRuleConnect àti àwọn arákùnrin rẹ̀ ń pinnu ìgbà tí tunnel yóò gòkè. Ìlànà evaluate-connection pẹ̀lú probe URL dára bí URL yẹn ṣe dára. Tí probe bá dáhùn láìsí tunnel, ìlànà náà pinnu pé a ti lè dé àwọn nẹ́tíwọ́kì àdáni, kò sì ní so mọ́ rárá, nítorí náà tọ́ka rẹ̀ sí ohun tí ó ń dáhùn láti inú nìkan.
Always-on jẹ́ ìlérí ọ̀tọ̀. Ó nílò ẹ̀rọ tí a ń bójú tó àti profile tí a ń ṣàkóso, olùlò tí a kò sì ń bójú tó lè yọ profile kúrò nígbàkigbà tí ó bá fẹ́. Má ṣe fi àpẹẹrẹ tí ó gbára lé always-on ránṣẹ́ àyàfi tí a bá ń bójú tó ẹgbẹ́ náà.
Ìgbésẹ̀ 5: fi ọ̀nà hàn, kì í ṣe àmi
Ṣíṣàyẹ̀wò àwọn interface tun, tap, ppp tàbí ipsec ń fi hàn pé a ti ṣètò VPN, kì í ṣe pé ìbéèrè rẹ lo ó. NWPathMonitor pẹ̀lú usesInterfaceType(.other) sọ pé interface àròsọ wà, viability handler sì lè dán host kan wò. Èyí tí ó kù kò fi ọ̀nà ìjáde hàn, nítorí náà so wọ́n pọ̀ mọ́ ìbéèrè sí orísun tí tunnel nìkan lè dé. Àwọn orúkọ interface jẹ́ ìrànwọ́ àyẹ̀wò, kì í ṣe ẹnubodè tí ìmọ̀ ohun èlò yẹ kí ó pín sí.
Fún àyẹ̀wò pápá, fi àdírẹ́sì gbogbogbo wé pẹ̀lú àti láìsí tunnel kí o sì gbé ojú-ìwé inú nìkan wá. Ìpè status lè ròyìn pé ó so mọ́ nígbà tí provider ń ṣe ìdúnàádúrà, nítorí náà jẹ́ kí àbájáde orísun pinnu, kí o sì ka status gẹ́gẹ́ bí ẹ̀rí àtìlẹ́yìn.