तपाईंको Android एपले प्रणाली VPN प्रोफाइल किन थप्न सक्दैन
VpnService तपाईंको एपको स्वामित्वको सुरुङ बनाउँछ; यसले फोनको PPTP, L2TP वा IPsec प्रविष्टिहरू थप्न वा सम्पादन गर्न सक्दैन। सीमा पछ्याउनुहोस् र सही बाटो छान्नुहोस्।
तपाईं सेटिङमा VPN पंक्तिमा ट्याप गर्नुहुन्छ, अरू कसैले स्थापना गरेको प्रोफाइल देख्नुहुन्छ, र त्यसलाई थप्ने कल खोज्न थाल्नुहुन्छ। त्यस्तो कल छैन। एपले VpnService मार्फत आफ्नै सुरुङ खोल्न सक्छ, तर त्यो सूचीका प्रविष्टिहरू प्लेटफर्म र तिनलाई बनाउने क्लाइन्टका हुन्। रेखा ठ्याक्कै कहाँ छ भन्ने थाहा हुनुले लुकेका क्लासहरूको पछि दौडने एक हप्ता बचाउँछ।
सेटिङ स्क्रिनले देखाउने कुराबाट सुरु गर्नुहोस्
VPN सूची प्रणाली वा विक्रेताको क्लाइन्टले स्थापना गरेका प्रोफाइलहरूको दर्ता हो: PPTP, L2TP/IPsec, IKEv2, र OEM एप वा MDM ले धकेलेका जुनसुकै पंक्ति। प्रत्येक पंक्तिले सर्भर ठेगाना, प्रमाणहरू र तपाईंको प्रक्रिया बाहिर बाँच्ने प्रोटोकल कार्यान्वयन बोक्छ। प्रयोगकर्ताले त्यहाँ जडान ट्याप गर्दा सुरुङ प्लेटफर्मको क्लाइन्टले उठाउँछ, तपाईंको कोडले होइन। त्यसैले त्यो पंक्ति रिबुटपछि पनि रहन्छ र त्यसैले तपाईंको एप अनइन्स्टल गर्दा त्यसले कहिल्यै हटाउँदैन।
प्रयोगकर्ताको तर्फबाट सूची API सतहजस्तो देखिन्छ, जहाँ VPN थप्नु एक इन्टेन्टको दूरीमा हुनुपर्छ। त्यस्तो छैन। यसलाई छुने एकमात्र सार्वजनिक प्रवेश बिन्दु नेभिगेसन इन्टेन्ट हुन्, र यसमा लेख्ने सबै प्लेटफर्म वा विशेषाधिकार प्राप्त घटकको हो।
व्यावहारिक परिणाम: यदि समर्थन पाठले प्रयोगकर्ताहरूलाई सेटिङमा प्रोफाइल थप्न भन्छ भने, तपाईंको एप त्यो प्रवाहको अंश नै होइन।
VpnService ले वास्तवमा के दिन्छ
VpnService र VpnService.Builder तपाईंको एपको स्वामित्वको एउटा सुरुङ वर्णन गर्छन्। तपाईं ठेगाना, मार्ग, DNS सर्भर र MTU थप्नुहुन्छ, addAllowedApplication() वा addDisallowedApplication() ले ट्राफिक सीमा तोक्नुहुन्छ, अनि establish() ले TUN इन्टरफेसका लागि ParcelFileDescriptor फर्काउँछ। त्यस क्षणदेखि एपले IP प्याकेट पढ्छ र जवाफ लेख्छ, अर्थात् प्रोटोकल कार्यान्वयन वा समावेश गर्ने काम तपाईंको हो: OpenVPN, WireGuard, कस्टम ट्रान्सपोर्ट।
त्यो क्रममा केहीले पनि PPTP, L2TP/IPsec वा IKEv2 बोल्दैन। Builder मा प्रणालीको L2TP क्लाइन्ट प्रयोग गर भन्ने स्विच छैन, र प्लेटफर्मसँग पहिले नै भएको प्रोफाइल चलाउन दिने कुनै कलब्याक छैन। यही वास्तविक सीमा हो, र यो अनुमतिको खाली ठाउँ होइन, डिजाइनको सीमा हो।
त्यसैले एप Android मा पक्कै VPN क्लाइन्ट हुन सक्छ। फोनसँगै आउने क्लाइन्टहरूको प्रबन्धक मात्र हुन सक्दैन।
सहमति संवाद सजावट होइन
तपाईंको सुरुङले अन्य एपको ट्राफिक समात्न सक्ने भएकाले, प्रणालीले प्रयोगकर्ताबाट स्पष्ट स्वीकृति माग्छ। prepare() ले तपाईंले सुरु गर्नुपर्ने Intent फर्काउँछ, स्वीकृति तपाईंको प्याकेजसँग बाँधिएको हुन्छ, र सुरुङ चालु हुँदा स्टाटस बारमा स्थायी सूचक देखिन्छ। दोस्रो VPN माथि आए पहिलो निष्क्रिय हुन्छ, किनकि Android एक पटकमा एउटै सक्रिय VPN चलाउँछ।
एक-सक्रियको यो नियमले परीक्षणमा मानिसहरूलाई अलमल्याउँछ। कर्पोरेट क्लाइन्ट जोडिएको बेला तपाईं आफ्नो सुरुङ उठाउनुहुन्छ र कोड बिग्रिएको निष्कर्ष निकाल्नुहुन्छ, जबकि प्लेटफर्म अर्को क्लाइन्टबाट सरेको मात्र हो। स्वीकृति पछि रद्द हुन सक्छ, र स्वीकृति गतिविधि नभएका यन्त्रहरूमा prepare() ले null फर्काउन सक्छ, त्यसैले establish() ले अझै असफलता सम्हाल्नुपर्छ।
लुकेका API र सेटिङ इन्टेन्ट
पुराना उत्तरहरू com.android.internal क्लास र AIDL इन्टरफेसतर्फ संकेत गर्छन् जुन बिल्ट-इन क्लाइन्टले प्रयोग गर्छ। ती SDK मा छैनन्, रिलिजहरूबीच जानकारी बिना बदलिन्छन्, र एप स्टोरहरूले त्यो पहुँचलाई जोखिम मान्छन्। यन्त्र रुट गरे पनि ती स्थिर हुँदैनन्, किनकि रुट र लुकेको API पहुँच असम्बन्धित समस्याहरू हुन्।
समर्थित नेभिगेसन सहायक Settings.ACTION_VPN_SETTINGS हो, जसको मान android.net.vpn.SETTINGS हो। सुरु गर्नुअघि यसलाई रिजोल्भ गर्नुहोस्, किनकि केही OEM बिल्डले त्यो गतिविधि दिँदैनन्, र रिजोल्भ असफल भए लिखित चरणहरूमा जानुहोस्। यसले प्रयोगकर्तालाई स्क्रिनमा लैजान्छ र केही पनि कन्फिगर गर्दैन।
यन्त्र-मालिक र MDM मार्गहरू मानिसहरूले सामान्यतया भन्ने अपवाद हुन्। DevicePolicyManager ले सधैं-चालु VPN प्याकेज तोक्न सक्छ, र व्यवस्थापित कन्फिगरेसनले तिनलाई समर्थन गर्ने क्लाइन्टका लागि सेटिङ पहिले नै लोड गर्न सक्छ, तर त्यो अझै सार्वजनिक SDK ले PPTP प्रोफाइल लेख्नु होइन।
प्रयोगकर्ताको तर्फबाट निर्णय हेर्नुहोस्
तपाईंको उत्पादनले ट्राफिक बोक्नुपर्ने भए, VpnService र वास्तविक प्रोटोकल स्ट्याक योजना गर्नुहोस्, र स्वीकृति प्रवाह तथा एक-VPN नियमका लागि समय छुट्याउनुहोस्। लक्ष्य विद्यमान कर्पोरेट प्रोफाइलमा जोडिनु हो भने, तपाईंको काम मार्गदर्शन हो: सेटिङ स्क्रिनमा गहिरो लिङ्क, फिल्डहरूको कागजात, र सुरुङ प्लेटफर्म क्लाइन्टले गरोस्। एपले निजी एन्डपोइन्टमा पुग्न मात्रुपर्ने भए, त्यसलाई आफ्नै सुरुङ आवश्यक नै छैन।
कोड लेख्नुअघि त्यो निर्णय लेख्नुहोस्, किनकि पहिलो स्प्रिन्टपछि तीनवटै मार्गमा लगभग केही समान छैन।
सुरु गर्नुअघि अन्तिम जाँच: आवश्यकताले हाम्रो एप जोडिन्छ भन्छ कि यन्त्र जोडिन्छ? पहिलो VpnService हो, दोस्रो त्यो प्रोफाइल हो जुन तपाईं बनाउन सक्नुहुन्न। त्यो वाक्य ठीक गर्नु कुनै पुनर्संरचनाभन्दा सस्तो छ।