iOS VPN API: NEVPNManager، د ټنل چمتو کوونکی که پروفایل؟
API د هغه ټرانسپورټ له مخې غوره کړئ چې تاسو ورسره خبرې کوئ، بیا ثابته کړئ چې ټنل ترافیک وړي: save-load-start ترتیب، provider entitlementونه او on-demand قواعد۔
درې بېلابېل محصولات د iOS VPN په نوم یادیږي، او دوی یو API نه شریکوي۔ Personal VPN د سیستم په داخلي IPsec او IKEv2 ټرانسپورټونو ولاړ دی۔ Custom tunnel خپل پروتوکول د network extension په داخل کې چلوي۔ Configuration profile له دوی څخه یو تنظیموي او کولی شي on-demand چلند اضافه کړي۔ د هغه ټرانسپورټ له مخې غوره کول چې تاسو ورسره خبرې کوئ، د هغه ټیوټوریل له مخې غوره کولو څخه چټک دی چې لومړی کمپایل شوی وي۔
لاندې ازموینې په ترتیب سره چل کړئ، ځکه هر ګام فرض کوي چې پخواني یې سم تنظیمات جوړ کړي دي۔
1 ګام: د ټرانسپورټ له مخې غوره کړئ
که سرور IKEv2 یا د Cisco په سټایل IPsec وي، NEVPNManager بسنه کوي او د سیستم ټرانسپورټونه وړیا راځي۔ که سرور OpenVPN، WireGuard یا بل څه وایي، NEVPNManager نشي مرسته کولی: د دریمې ډلې پروتوکول لپاره هغه هیڅ هنګ نلري۔ هغه حالت د packet tunnel provider سره NETunnelProviderManager ته اړتیا لري چې پروتوکول پلي کوي۔ پروفایل یوازې تنظیمات ویشي، او هغه ټرانسپورټ نشي اضافه کولی چې عملیاتي سیستم یې نلري۔
PPTP په اوسنیو سیستمونو کې هدف نه دی۔ Shared-secret IPsec لا هم په remoteIdentifier کې د ډلې نوم، د راز ساتلو keychain توکي، او کله چې سرور د کارن نوم غواړي پراخه تصدیق ته انتظار کوي۔ هر ورک شوی ټوټه د همدې عمومي تنظیماتو تېروتنې په توګه ښکاري، نو د بل هر څه د ډیبګ کولو دمخه یې ټولې اضافه کړئ۔
2 ګام: د خوندي کولو، لوډ کولو، پیل کولو ترتیب وساتئ
NEVPNManager preferences ته لیکي، هغه بیرته لولي، او بیا یوازې پیل کوي۔ د پروتوکول او manager توکي ډک کړئ، saveToPreferences وبلئ، loadFromPreferences وبلئ، او له load completion handler څخه startVPNTunnel وبلئ۔ د لوډ له بیرته راګرځېدو دمخه پیل کول په بل ډول سم تنظیماتو کې configuration-invalid تېروتنه، NEVPNErrorDomain code 1، رامنځته کوي۔
بڼه دومره لنډه ده چې په یو ځای کې وساتل شي:
manager.protocolConfiguration = proto
manager.isEnabled = true
manager.saveToPreferences { }
manager.loadFromPreferences { manager.connection.startVPNTunnel() }startVPNTunnel هغه وخت بیرته راځي چې غوښتنه ومنل شي، نه هغه وخت چې ټنل پورته شي۔ NEVPNStatusDidChange وګورئ او د ریښتیني حالت لپاره connection.status ولولئ۔ هغه اپلیکیشن چې د زنګ په ځای کې بریا فرض کوي د VPN وصل شوي راپور ورکوي پداسې حال کې چې extension لا هم خبرې اترې کوي۔ Connecting حالت د یوې شیبې لپاره نورمال دی؛ هغه حالت چې هیڅکله ترې نه وځي هغه ناکامي ده چې د ثبت وړ ده۔
3 ګام: provider پروسې ته هغه څه ورکړئ چې ورته اړتیا لري
Custom transport په جلا پروسه کې د خپل bundle identifier او خپل entitlement سره چلیږي۔ container اپلیکیشن او provider دواړه د لاسلیک په وخت کې network-extension entitlement ته اړتیا لري، او د App Store څخه بهر Developer ID build لا هم باید هغه په provisioning profile کې ولري۔ ورک entitlement د پروتوکول بګ په څیر ښکاري ځکه extension په ساده ډول نه پیل کیږي۔
د پور اخیستلو لپاره هیڅ عامه socket descriptor نشته۔ NEPacketTunnelProvider تاسو ته د read، write او cancel سره NEPacketTunnelFlow درکوي، او هغه کوډ چې خصوصي کیلي لارو ته رسیږي د خپرونو ترمنځ ماتيږي۔ provider هغه وخت هم چلیږي چې اپلیکیشن په شالید کې وي، نو container اپلیکیشن ورته د شالید حالت ته اړتیا نلري۔
4 ګام: on-demand د قواعدو ټولګه ده، نه سویچ
isOnDemandEnabled یوازې قواعد چمتو کوي؛ NEOnDemandRuleConnect او نور وروڼه یې تصمیم نیسي چې ټنل کله پورته شي۔ د probe URL سره evaluate-connection قاعده یوازې د هغه URL په اندازه ښه ده۔ که probe پرته له ټنل څخه ځواب ووایي، قاعده نتیجه اخلي چې خصوصي شبکه لا دمخه د لاسرسي وړ ده او هیڅکله نه نښلیږي، نو هغه یو څه ته اشاره کړئ چې یوازې له داخله ځواب وایي۔
Always-on جلا ژمنه ده۔ دا نظارت شوی وسیله او مدیریت شوی پروفایل ته اړتیا لري، او نانظارت کارن کولی شي پروفایل هر وخت لرې کړي۔ هغه ډیزاین مه لیږئ چې په always-on تکیه کوي پرته له دې چې بیړۍ نظارت شي۔
5 ګام: لیبل نه، لاره ثابته کړئ
د tun، tap، ppp یا ipsec انټرفیسونو سکین کول ثابتوي چې VPN تنظیم شوی، نه دا چې ستاسو غوښتنې هغه کارولی۔ NWPathMonitor د usesInterfaceType(.other) سره وایي چې مجازي انټرفیس شته، او viability handler کولی شي یو هوسټ وازمویي۔ دواړه د وتلو لاره نه ثابتوي، نو دوی د هغه سرچینې غوښتنې سره یوځای کړئ چې یوازې ټنل ورته رسیږي۔ د انټرفیس نومونه د تشخیص مرستندویه دي، هیڅکله هغه دروازه نه چې اپلیکیشن منطق باید پرې څانګه وکړي۔
د ساحې ازموینې لپاره، عامه پته له ټنل سره او پرته پرتله کړئ او یوازې داخلي پاڼه راوړئ۔ د status زنګ کولی شي وصل شوي راپور ورکړي پداسې حال کې چې provider خبرې اترې کوي، نو پریکړه دې د سرچینې پایله وکړي او status د ملاتړ شواهدو په توګه وګڼئ۔