iOS एप भित्र VPN स्क्रिन बनाउँदा पहिलो आश्चर्य यो हुन्छ: Settings एपको प्रोटोकल सूची API को सूची होइन। Network Extension फ्रेमवर्कले तपाईंको एपलाई त्यो एपको स्वामित्वको एउटा व्यक्तिगत VPN कन्फिगरेसन बनाउन दिन्छ, र यसले थोरै प्रोटोकल वस्तुहरू मात्र स्वीकार गर्छ। मानिसहरूले अपेक्षा गर्ने बाँकी सबै, L2TP देखि डाउनलोड गरिएको प्रोफाइलसम्म, त्यो सतह बाहिर छ वा Apple का लागि निजी हो। त्यसपछि आउने असफलताहरू सामान्यतया बग होइनन्, API ले कहिल्यै नदिइएको काम अस्वीकार गरिरहेको छ।

मिथक: API एउटा Settings सम्पादक हो

iOS ले IKEv1, IKEv2, L2TP र IPsec प्रोफाइलहरू कन्फिगर गर्न सक्ने भएकाले एपले तीमध्ये कुनै पनि प्रोग्रामेटिक रूपमा बनाउन सक्छ भन्ने विश्वास छ। सक्दैन। फ्रेमवर्कले बोलाउने एपलाई ठ्याक्कै एउटा कन्फिगरेसन स्लट दिन्छ, र त्यो स्लटले सार्वजनिक प्रोटोकल वर्गहरूको सानो समूह मात्र स्वीकार गर्छ। मानिसहरूले अपेक्षा गर्ने बाँकी सबै, L2TP देखि डाउनलोड गरिएको प्रोफाइलसम्म, त्यो सतह बाहिर छ वा Apple का लागि निजी हो।

त्यसपछि आउने असफलताहरू सामान्यतया बग होइनन्। API ले कहिल्यै नदिइएको काम अस्वीकार गरिरहेको छ, र समाधान भनेको API ले स्वामित्व राख्ने कुराको वरिपरि स्क्रिन डिजाइन गर्नु हो।

तीन प्रोटोकल वस्तु र नभएका

तपाईंका विकल्पहरू हुन् NEVPNProtocolIPSec मार्फत IKEv1, NEVPNProtocolIKEv2 मार्फत IKEv2, र आफ्नै प्याकेट टनेल एक्सटेन्सन पठाउनुहुन्छ भने NETunnelProviderProtocol। NEVPNManager सन्दर्भ ले स्वीकार गरिएका प्रोटोकल वस्तुहरू सूचीबद्ध गर्छ। L2TP र PPTP त्यो सूचीमा कहिल्यै देखिँदैनन् किनकि Apple ले तिनका लागि कुनै वर्ग प्रकाशित गरेन। तीमध्ये कुनै पनि प्रयास गर्दा सुरक्षित गर्दा त्रुटिसँग अन्त्य हुन्छ, वा अझ नराम्रो, सिस्टमले चुपचाप प्रयोग गर्न अस्वीकार गर्ने कन्फिगरेसनसँग।

डेस्कटप कोडले फरक नियमहरू पछ्याउँछ। macOS मा SCNetworkInterfaceCreateWithInterface ले IPv4 माथिको L2TP जस्तो इन्टरफेस प्रकार थुपार्छ र यसलाई नेटवर्क सेवासँग जोड्छ, र networksetup -connectpppoeservice ले परिणाम सुरु गर्छ। प्रशासक अधिकार र सहायक उपकरण आवश्यक छ, किनकि साझा रहस्य र पासवर्ड प्रणाली कीचेनमा जान्छन्। त्यो डिजाइन iOS मा प्रतिलिपि गर्नुहोस् र केही पनि कम्पाइल हुँदैन।

पासवर्ड होइन, कीचेन सन्दर्भ दिनुहोस्

कुनै पनि IKE वर्गले पासवर्डलाई पाठको रूपमा स्वीकार गर्दैन। passwordReference र sharedSecretReference दुई गुणहरूले स्थायी कीचेन सन्दर्भ चाहन्छन्, जुन तपाईंले kSecReturnPersistentRef मागेर SecItemCopyMatching बाट पाउनुहुन्छ। वस्तुको डेटा पठाउँदा, वा फिल्डमा स्ट्रिङ हाल्दा, सुरक्षित गर्न असफलता वा खाली प्रमाणहरूसहितको जडान उत्पन्न हुन्छ। सन्दर्भ त्यसको पछाडिको कीचेन वस्तुजत्तिकै मात्र टिकाउ हुन्छ, त्यसैले कन्फिगरेसन जोड्नु अघि वस्तु अवश्य हुनुपर्छ। यसलाई सुरक्षित गर्ने त्यही कारोबारमा बनाउनुहोस् र क्रमसम्बन्धी बगको पूरा वर्ग हटाउनुहुन्छ।

प्रमाणपत्र प्रमाणीकरणले फरक मार्ग लिन्छ: PKCS#12 ब्लबका लागि identityData र identityDataPassword। त्यो ब्लब एप बन्डलभित्र पठाउनु नमूना कोडबाट आएको बानी हो, रिलिज निर्णय होइन, किनकि पासवर्ड त्यससँगै यात्रा गर्छ र एपको प्रत्येक प्रतिले उही पहिचान बोक्छ।

अधिकार र उपलब्धताले सबैलाई ढोका लगाउँछन्

व्यवस्थापक पटक्कै नहुन सक्छ, र कारण प्रोभिजनिङ हो। तपाईंको एप पहिचानकर्तालाई Network Extension क्षमता र व्यक्तिगत VPN अधिकार दुवै आवश्यक छ, र बिल्डमा हस्ताक्षर गर्ने प्रोफाइलमा दुवै हुनुपर्छ।

यो छोडिदिनुभयो भने साझा इन्स्टेन्सले nil फर्काउँछ, वा सुरक्षित गर्ने क्रम अधिकारको कहिल्यै उल्लेख नगर्ने त्रुटिले असफल हुन्छ। उपलब्धता अर्को ढोका हो। iOS 8 भन्दा पुरानो लक्ष्य बनाउनुभयो भने रनटाइममा चिन्ह हुँदैन, त्यसैले असफलता क्र्यास वा nil व्यवस्थापक हो, कन्फिगरेसन नभएको व्यवस्थापक होइन। आफ्नो वस्तु ग्राफ डिबग गर्नु अघि रनटाइम र अधिकार जाँच्नुहोस्।

लोड गर्नुहोस्, बदल्नुहोस्, सुरक्षित गर्नुहोस्, त्यसपछि मागअनुसार क्रम हेर्नुहोस्

जीवनचक्रलाई लोड, बदलाव, सुरक्षितको रूपमा लिनुहोस् र लोड कहिल्यै नछोड्नुहोस्। loadFromPreferences पूरा नभएसम्म व्यवस्थापकले केही राख्दैन र प्रोटोकल वस्तु पढ्न वा बदल्न सकिँदैन।

दोस्रो सुरक्षितले अर्को थप्नुको सट्टा कन्फिगरेसन प्रतिस्थापन गर्छ, त्यसैले आधा अधुरो सुरक्षितले काम गरिरहेको प्रोफाइललाई हानि पुर्याउन सक्छ। मागअनुसारका नियमहरूले क्रमबद्ध एरे बनाउँछन्, र त्यही क्रम नीति हो। जहाँबाट पनि जडान नियमलाई विच्छेद नियमभन्दा अघि राख्नुहोस् र म्यानुअल विच्छेदपछि तुरुन्तै पुनः जडान हुन्छ, जो दोषजस्तो देखिन्छ तर दस्तावेजीकृत मूल्यांकन पछ्याउँछ।

प्रयोगकर्ताको कार्य जित्नुपर्ने बेला विच्छेद नियम अगाडि सार्नुहोस्। एपको नियन्त्रण बाहिर रहने कुराले पनि उत्तिकै महत्व राख्छ। मार्गहरू तपाईंले सेट गर्ने प्राथमिकताबाट होइन, टनेल वा सर्भर नीतिबाट आउँछन्, र प्याकेट टनेल प्रदायकले सुरु हुँदा तिनको रिपोर्ट गर्छ। एपले अन्य एप वा कन्फिगरेसन प्रोफाइलले स्थापना गरेका प्रोफाइलहरू सूचीबद्ध वा सम्पादन गर्न सक्दैन, त्यसैले यन्त्रको हरेक VPN देखाउने स्क्रिनको वाचा नगर्नुहोस्।

सम्बन्धित लेखहरू