आपका iPhone ऐप सिस्टम VPN को चालू या बंद क्यों नहीं कर सकता
एक सार्वजनिक ऐप सिस्टम VPN को टॉगल नहीं कर सकता, उसकी स्थिति नहीं पढ़ सकता या कनेक्शन नहीं थोप सकता। On Demand नियम, पर्यवेक्षित डिवाइसों पर Always On प्रोफ़ाइल और MDM विकल्प हैं।
कोई प्रोडक्ट मैनेजर ऐसा बटन मांगता है जो कंपनी का VPN चालू करे, और अनुरोध तुच्छ लगता है। iOS पर यह छोटी सुविधा नहीं है; यह सार्वजनिक अनुबंध से बाहर है, और हर बायपास या तो समीक्षा में फेल होता है या अगली रिलीज़ में टूट जाता है। अनुरोध को उसी से गुज़ारिए जिसकी प्लेटफ़ॉर्म वास्तव में अनुमति देता है, और डिज़ाइन अधिकतर खुद लिख जाता है। ऐप किसी VPN कॉन्फ़िगरेशन का मालिक हो सकता है और उसे शुरू कर सकता है। ऐप सिस्टम स्विच तक नहीं पहुँच सकता, ऐसी प्रोफ़ाइल की स्थिति नहीं पढ़ सकता जो उसने बनाई नहीं, और किसी उपयोगकर्ता को उसकी इच्छा के विरुद्ध जुड़ा नहीं रख सकता।
उन तीन बातों से शुरू करें जो उपयोगकर्ता का अर्थ है
API अलग करने से पहले अर्थ अलग करें। कभी उपयोगकर्ता चाहता है कि आपके ऐप की सुरंग जुड़ी रहे, कभी वह किसी और द्वारा इंस्टॉल की गई प्रोफ़ाइल के लिए सेटिंग्स का स्विच पलटना चाहता है, और कभी वह चाहता है कि फ़ोन सुरंग के बिना ब्राउज़ न कर सके। ये तीन अलग तंत्रों से मेल खाते हैं, और केवल पहला सामान्य ऐप के लिए खुला है।
दूसरा अर्थ ही Stack Overflow के सवाल पैदा करता है, और उसका कोई समर्थित उत्तर नहीं है। सेटिंग्स का टॉगल उपयोगकर्ता का है और प्रबंधित डिवाइसों पर प्रोफ़ाइल का। कोई सार्वजनिक API VPN कॉन्फ़िगरेशन नहीं गिनाता, यह नहीं बताता कि सिस्टम सुरंग ऊपर है या नहीं, और उसे पलटता नहीं है।
ऐप वास्तव में क्या बना सकता है
NetworkExtension किसी ऐप को NEVPNManager के ज़रिए अपना कॉन्फ़िगरेशन देता है। Personal VPN हक़ और उपयोगकर्ता की सहमति के साथ, ऐप ऐसा कॉन्फ़िगरेशन सहेजता है जो सेटिंग्स में उसके अपने नाम से दिखता है, और वह उस एक कनेक्शन को शुरू या बंद कर सकता है। यह वास्तविक, समीक्षा-योग्य क्षमता है, और पूरा दायरा भी यही है: प्रबंधक केवल वही पढ़ता और लिखता है जो उसने बनाया।
हक़ स्वचालित नहीं है। आप इसे Apple से मांगते हैं और तर्क देते हैं कि ऐप को सुरंग की ज़रूरत ही क्यों है, और जिस ग्राहक का एकमात्र लक्ष्य किसी और की प्रोफ़ाइल चालू करना है उसके पास अच्छा उत्तर नहीं है। पैकेट सुरंग प्रदाता उसी नियम का पालन अलग क्लास के साथ करते हैं: NETunnelProviderManager ऐसे प्रदाता-आधारित कॉन्फ़िगरेशन का मालिक है जो ऐप ने खुद इंस्टॉल किए। दोनों में से कोई रास्ता MDM द्वारा दी गई प्रोफ़ाइल तक नहीं पहुँचता।
सहमति सहेजने के समय भी लागू होती है। कॉन्फ़िगरेशन लिखना उपयोगकर्ता से पूछता है, और यह पूछना ऐसी चीज़ नहीं है जिसे ऐप सुविधा के लिए दबा सके।
स्थिति पढ़ना उसी दीवार से टकराता है
स्थिति नियंत्रण से ज़्यादा मिलनसार दिखती है और उतनी ही बंद है। NEVPNStatus ऐप के अपने कॉन्फ़िगरेशन के लिए अमान्य, डिस्कनेक्टेड, कनेक्ट हो रहा, कनेक्टेड, पुनः पुष्टि या डिस्कनेक्ट हो रहा बताता है, और हर बदलाव पर सूचना चलती है। प्रबंधन प्रोफ़ाइल द्वारा इंस्टॉल की गई सुरंग के बारे में यह कुछ नहीं कहता, और हेल्प डेस्क असल में वही स्थिति देखना चाहता है।
नेटवर्क पथ निगरानी और इंटरफ़ेस बदलाव डिज़ाइन समीक्षाओं में विकल्प के रूप में पेश किए जाते हैं। ये बताते हैं कि ऐप का ट्रैफ़िक कौन-सा रास्ता लेता है, जो VPN स्थिति से असंबंधित कारणों से बदलता है, और इन्हें VPN रीडआउट की तरह इस्तेमाल करने से ऐसा UI मिलता है जो दोनों दिशाओं में झूठ बोलता है।
On Demand और Always On असली लीवर हैं
समर्थित लीवर ऐप में नहीं, प्रोफ़ाइल में रहते हैं। On Demand नियम सिस्टम को बताते हैं कि कब कनेक्ट करना है: क्रियाओं के साथ शर्तों की क्रमबद्ध सूची, जिसका मूल्यांकन आपका कोड नहीं, ऑपरेटिंग सिस्टम करता है। किसी भी इंटरफ़ेस पर कनेक्ट होने वाला नियम किसी ऐप को नियंत्रण दिए बिना हमेशा-जुड़े होने का एहसास बनाता है।
Always On VPN प्रवर्तन का तंत्र है, और यह पर्यवेक्षण से बंधा है। पर्यवेक्षित डिवाइस पर MDM ऐसी प्रोफ़ाइल इंस्टॉल करता है जो सुरंग ऊपर रखती है; बिना पर्यवेक्षण वाले निजी फ़ोन पर वही कुंजियाँ वही व्यवहार नहीं देतीं। यह असमानता जानबूझकर है, और पेलोड कुंजियों का कोई संयोजन इसे नहीं हटाता। जब अपेक्षा वास्तव में यही हो कि VPN चालू ही रहे, तब अपेक्षा असल में यह होती है कि डिवाइस प्रबंधित हो।
दोनों के बीच कमज़ोर चचेरा बैठा है: ऐसा नियम जो उपयोगकर्ता के डिस्कनेक्ट करने के बाद फिर जुड़ता है। यह अगली बार नियम के मूल्यांकन पर जुड़ता है, जो तुरंत होने के बराबर नहीं है, और जिसने जानबूझकर डिस्कनेक्ट किया उसे फ़र्क दिखेगा। ताला देने का वादा करने के बजाय इंटरफ़ेस को उसी खाई के इर्द-गिर्द डिज़ाइन करें।
समर्थित रास्ता भेजें
किसी भी कोड से पहले चार सवाल तंत्र तय करते हैं: डिवाइस किसका है, क्या वह पर्यवेक्षित है, कौन-सा क्लाइंट सुरंग ख़त्म करता है, और प्रोफ़ाइल कहाँ से आती है। इनमें से कोई भी अज्ञात हो तो सुविधा-अनुरोध अनुमान के लिए तैयार नहीं है।
सिस्टम VPN को छेड़ने वाला निजी API डेमो पास करेगा और समीक्षा में फेल होगा, और अगर किसी और रास्ते से भेजा गया तो अगली iOS रिलीज़ में टूटेगा। एक स्विच के लिए इस सौदे का कोई संस्करण इस लायक नहीं है।
प्रबंधन टेलीमेट्री अलग चैनल है: यह बताती है कि कोई प्रोफ़ाइल इंस्टॉल है और डिवाइस अनुरूप है या नहीं, जो रिपोर्टिंग है, प्रति-ऐप नियंत्रण सतह नहीं। हर अपडेट के बाद असली डिवाइस पर प्रवाह जाँचें, क्योंकि समर्थित व्यवहार OS में रहता है और OS आगे बढ़ता है।