VPN

Android, डेवलपर को वर्चुअल प्राइवेट नेटवर्क (वीपीएन) बनाने के लिए एपीआई उपलब्ध कराता है समाधान. यह गाइड पढ़ने के बाद, आपको पता चलेगा कि अपने Android डिवाइस के लिए वीपीएन क्लाइंट का इस्तेमाल किया जा सकता है.

खास जानकारी

वीपीएन, उन डिवाइसों को सुरक्षित तरीके से ऐक्सेस करने की अनुमति देते हैं जो किसी नेटवर्क पर मौजूद नहीं हैं नेटवर्क.

Android में, पहले से मौजूद (PPTP और L2TP/IPSec) वीपीएन क्लाइंट शामिल होता है. ऐसा कभी-कभी होता है इस नाम को लेगसी वीपीएन कहते हैं. Android 4.0 (एपीआई लेवल 14) ने एपीआई उपलब्ध कराए हैं, ताकि ऐप्लिकेशन डेवलपर अपने खुद के वीपीएन समाधान उपलब्ध करा सकते हैं. वीपीएन समाधान को पैकेज किया जाता है जिसे लोग डिवाइस पर इंस्टॉल करते हैं. डेवलपर आम तौर पर वीपीएन बनाते हैं को इनमें से किसी एक वजह से डाला गया है:

  • उन वीपीएन प्रोटोकॉल की सुविधा देना जो पहले से मौजूद क्लाइंट के साथ काम नहीं करते.
  • इससे लोगों को मुश्किल कॉन्फ़िगरेशन के बिना, वीपीएन सेवा से कनेक्ट करने में मदद मिलती है.

इस गाइड के बाकी हिस्से में, वीपीएन ऐप्लिकेशन डेवलप करने का तरीका बताया गया है (इसमें हमेशा चालू रहने वाली और हर ऐप्लिकेशन के हिसाब से वीपीएन से कनेक्ट की जाती है. पहले से मौजूद वीपीएन क्लाइंट.

उपयोगकर्ता अनुभव

Android एक यूज़र इंटरफ़ेस (यूआई) उपलब्ध कराता है, ताकि किसी व्यक्ति को उसे कॉन्फ़िगर करने, शुरू करने, और अपने वीपीएन सलूशन को बंद करें. सिस्टम यूज़र इंटरफ़ेस (यूआई) की मदद से, उपयोगकर्ता डिवाइस का इस्तेमाल भी कर सकता है को ऐक्टिव वीपीएन कनेक्शन के बारे में पता है. Android, इसके लिए ये यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट दिखाता है वीपीएन कनेक्शन:

  • वीपीएन ऐप्लिकेशन को पहली बार चालू करने से पहले, सिस्टम कनेक्शन के अनुरोध का डायलॉग बॉक्स. डायलॉग बॉक्स, डिवाइस का इस्तेमाल करने वाले व्यक्ति को यह पुष्टि करें कि उन्हें वीपीएन पर भरोसा है और उन्होंने आपका अनुरोध स्वीकार किया है.
  • वीपीएन सेटिंग स्क्रीन (सेटिंग > नेटवर्क और इंटरनेट > वीपीएन) पर वीपीएन ऐसे ऐप्लिकेशन जिनमें व्यक्ति ने कनेक्शन के अनुरोधों को स्वीकार किया हो. कॉन्फ़िगर करने के लिए एक बटन मौजूद है या वीपीएन को भूल जाएं.
  • कनेक्शन के होने पर क्विक सेटिंग ट्रे, जानकारी वाला पैनल दिखाती है सक्रिय है. लेबल पर टैप करने पर, ज़्यादा जानकारी वाला डायलॉग बॉक्स दिखता है. इसमें एक लिंक भी होता है सेटिंग पर जाएं.
  • स्टेटस बार में, वीपीएन (कुंजी) का आइकॉन शामिल होता है. इससे पता चलता है कि कनेक्शन चालू है.

आपके ऐप्लिकेशन के लिए यूज़र इंटरफ़ेस (यूआई) भी ज़रूरी है, ताकि डिवाइस का इस्तेमाल करने वाला व्यक्ति अपनी सेवा के विकल्पों को कॉन्फ़िगर करें. उदाहरण के लिए, आपके समाधान के लिए खाते की पुष्टि करने की सेटिंग कैप्चर करें. ऐप्लिकेशन को यह यूज़र इंटरफ़ेस (यूआई) दिखाना चाहिए:

  • किसी कनेक्शन को मैन्युअल तरीके से शुरू और रोकने के लिए कंट्रोल. वीपीएन हमेशा चालू रखें ज़रूरत पड़ने पर कनेक्ट कर सकता है, लेकिन लोगों को पहले कनेक्शन को कॉन्फ़िगर करने की अनुमति देगा आपके वीपीएन का इस्तेमाल किस समय किया जाएगा.
  • सेवा चालू होने पर दिखने वाली सूचना, जिसे खारिज नहीं किया जा सकता. सूचना ये काम करती है: कनेक्शन की स्थिति दिखाने या ज़्यादा जानकारी देने के लिए. जैसे, नेटवर्क के आंकड़े दिखाने के लिए. सूचना पर टैप करने से आपका ऐप्लिकेशन फ़ोरग्राउंड में आ जाता है. इसे निकालें सूचना दिखाई देगी.

वीपीएन सेवा

आपका ऐप्लिकेशन किसी उपयोगकर्ता (या किसी काम से जुड़े ऐप्लिकेशन) के लिए सिस्टम की नेटवर्किंग को कनेक्ट करता है प्रोफ़ाइल) से कनेक्ट करता है. हर उपयोगकर्ता (या वर्क प्रोफ़ाइल) कोई दूसरा वीपीएन ऐप्लिकेशन है. आप एक VPN सेवा बनाते हैं जिसे सिस्टम शुरू करने के लिए इस्तेमाल करता है और वीपीएन बंद करें और कनेक्शन की स्थिति ट्रैक करें. आपकी वीपीएन सेवा यहां से इनहेरिट की गई है VpnService.

यह सेवा, वीपीएन गेटवे कनेक्शन के लिए आपके कंटेनर के तौर पर भी काम करती है और डिवाइस इंटरफ़ेस पर काम करता है. आपका सेवा इंस्टेंस कॉल नया लोकल इंटरफ़ेस बनाने के VpnService.Builder तरीके.

पहली इमेज. VpnService, Android को कैसे कनेक्ट करता है वीपीएन गेटवे से कनेक्ट करना
ब्लॉक-आर्किटेक्चर डायग्राम में दिखाया गया है कि VpnService कैसे लोकल टीयूएन बनाता है
         इंटरफ़ेस पर स्विच करता है.

आपका ऐप्लिकेशन, डिवाइस को वीपीएन गेटवे से कनेक्ट करने के लिए, नीचे दिया गया डेटा ट्रांसफ़र करता है:

  • लोकल इंटरफ़ेस के फ़ाइल डिस्क्रिप्टर से भेजे गए आउटगोइंग आईपी पैकेट को पढ़ता है और एन्क्रिप्ट (सुरक्षित) करता है और उन्हें वीपीएन गेटवे पर भेज देता है.
  • वीपीएन गेटवे से इनकमिंग पैकेट (वीपीएन गेटवे से मिला और डिक्रिप्ट किया गया) को लोकल इंटरफ़ेस का फ़ाइल डिस्क्रिप्टर.

हर उपयोगकर्ता या प्रोफ़ाइल के लिए सिर्फ़ एक सेवा चालू है. नई सेवा शुरू करने के बाद, मौजूदा सेवा को अपने-आप रोक देती है.

कोई सेवा जोड़ें

अपने ऐप्लिकेशन में वीपीएन सेवा जोड़ने के लिए, ऐसी Android सेवा बनाएं जो VpnService. अपने ऐप्लिकेशन में वीपीएन सेवा के बारे में जानकारी देना मेनिफ़ेस्ट फ़ाइल में ये चीज़ें जोड़ी गई हैं:

  • BIND_VPN_SERVICE की मदद से सेवा को सुरक्षित रखना अनुमति नहीं है ताकि केवल सिस्टम आपकी सेवा से जुड़ सके.
  • "android.net.VpnService" इंटेंट फ़िल्टर की मदद से सेवा का विज्ञापन करें, ताकि सिस्टम आपकी सेवा ढूंढ सकता है.

इस उदाहरण में बताया गया है कि अपनी ऐप्लिकेशन मेनिफ़ेस्ट फ़ाइल में, सेवा का एलान कैसे किया जा सकता है:

<service android:name=".MyVpnService"
         android:permission="android.permission.BIND_VPN_SERVICE">
     <intent-filter>
         <action android:name="android.net.VpnService"/>
     </intent-filter>
</service>

अब आपका ऐप्लिकेशन, सेवा का एलान करने पर, सिस्टम अपने-आप और ज़रूरत पड़ने पर अपने ऐप्लिकेशन की वीपीएन सेवा को बंद कर दें. उदाहरण के लिए, सिस्टम कंट्रोल हमेशा-चालू वीपीएन इस्तेमाल करने पर, आपको मिलने वाली सेवा का इस्तेमाल कैसे किया जा सकता है.

कोई सेवा तैयार करना

ऐप्लिकेशन को उपयोगकर्ता की मौजूदा वीपीएन सेवा बनाने के लिए तैयार करने के लिए, कॉल करें VpnService.prepare(). अगर डिवाइस का इस्तेमाल करने वाले व्यक्ति ने आपके ऐप्लिकेशन के लिए पहले से अनुमति दी जाती है, तो यह तरीका गतिविधि के इंटेंट को लौटाता है. इस इंटेंट का इस्तेमाल, सिस्टम की ऐसी गतिविधि शुरू करने के लिए किया जाता है जिसमें अनुमति मांगी जाती है. कॉन्टेंट बनाने सिस्टम एक ऐसा डायलॉग दिखाता है जो अनुमति वाले अन्य डायलॉग बॉक्स से मिलता-जुलता है. जैसे कैमरा या संपर्कों का ऐक्सेस. अगर आपका ऐप्लिकेशन पहले से तैयार है, तो यह तरीका वापस आ जाता है null.

मौजूदा वीपीएन सेवा सिर्फ़ एक ऐप्लिकेशन का इस्तेमाल किया जा सकता है. हमेशा कॉल करें VpnService.prepare(), क्योंकि हो सकता है कि किसी व्यक्ति ने को वीपीएन सेवा के तौर पर इस्तेमाल किया जाएगा. इस बारे में ज़्यादा जानने के लिए, यह देखें सेवा का लाइफ़साइकल सेक्शन.

सेवा कनेक्ट करें

सेवा चालू होने के बाद, आप ऐसा नया लोकल इंटरफ़ेस बना सकते हैं जो किसी वीपीएन गेटवे से कनेक्ट किया जाता है. अनुमति का अनुरोध करने और अपनी सेवा से कनेक्ट करने के लिए, तो आपको इस क्रम में दिए गए चरणों को पूरा करना होगा:

  1. अनुमति मांगने के लिए VpnService.prepare() को कॉल करें (जब आवश्यक है).
  2. अपने ऐप्लिकेशन के टनल सॉकेट को चालू रखने के लिए, VpnService.protect() को कॉल करें को चालू रखें. साथ ही, सर्कुलर कनेक्शन से बचें.
  3. अपने ऐप्लिकेशन के टनल को कनेक्ट करने के लिए, DatagramSocket.connect() पर कॉल करें वीपीएन गेटवे के लिए सॉकेट.
  4. नई लोकल प्रॉपर्टी को कॉन्फ़िगर करने के लिए, VpnService.Builder तरीकों को कॉल करें TUN इंटरफ़ेस पर वीपीएन ट्रैफ़िक के लिए डिवाइस.
  5. VpnService.Builder.establish() पर कॉल करें, ताकि सिस्टम लोकल TUN इंटरफ़ेस सेट करता है और इंटरफ़ेस पर कॉपी करने की सुविधा मिलती है.

वीपीएन गेटवे आम तौर पर लोकल TUN इंटरफ़ेस के लिए सेटिंग का सुझाव देता है हैंडशेक करना. आपका ऐप्लिकेशन VpnService.Builder तरीकों को कॉन्फ़िगर करता है सेवा नीचे दिए गए नमूने में दिखाई गई है:

Kotlin

// Configure a new interface from our VpnService instance. This must be done
// from inside a VpnService.
val builder = Builder()

// Create a local TUN interface using predetermined addresses. In your app,
// you typically use values returned from the VPN gateway during handshaking.
val localTunnel = builder
        .addAddress("192.168.2.2", 24)
        .addRoute("0.0.0.0", 0)
        .addDnsServer("192.168.1.1")
        .establish()

Java

// Configure a new interface from our VpnService instance. This must be done
// from inside a VpnService.
VpnService.Builder builder = new VpnService.Builder();

// Create a local TUN interface using predetermined addresses. In your app,
// you typically use values returned from the VPN gateway during handshaking.
ParcelFileDescriptor localTunnel = builder
    .addAddress("192.168.2.2", 24)
    .addRoute("0.0.0.0", 0)
    .addDnsServer("192.168.1.1")
    .establish();

हर ऐप्लिकेशन के लिए वीपीएन सेक्शन में दिया गया उदाहरण एक IPv6 कॉन्फ़िगरेशन दिखाता है, जिसमें अन्य विकल्प. आपको VpnService.Builder ये वैल्यू जोड़नी होंगी इससे पहले कि आप नया इंटरफ़ेस बनाएं:

addAddress()
कम से कम एक आईपीवी4 या आईपीवी6 पता और सिस्टम पर इस्तेमाल होने वाला सबनेट मास्क जोड़ें स्थानीय TUN इंटरफ़ेस पते के रूप में असाइन करता है. आम तौर पर, आपके ऐप्लिकेशन को आईपी पता मिलता है हैंडहैकिंग के दौरान, वीपीएन गेटवे से लिए गए पते और सबनेट मास्क.
addRoute()
अगर आप चाहते हैं कि सिस्टम वीपीएन के ज़रिए ट्रैफ़िक भेजे, तो कम से कम एक रास्ता जोड़ें इंटरफ़ेस पर कॉपी करने की सुविधा मिलती है. रास्ते, डेस्टिनेशन के पतों के हिसाब से फ़िल्टर होते हैं. पूरा ट्रैफ़िक स्वीकार करने के लिए, खुला रास्ता जैसे कि 0.0.0.0/0 या ::/0.

establish() तरीका इस्तेमाल करने पर ParcelFileDescriptor इंस्टेंस का इस्तेमाल, आपका ऐप्लिकेशन पढ़ने और लिखने के लिए करता है इंटरफ़ेस के बफ़र में आने और जाने से जुड़े पैकेट. establish() अगर आपका ऐप्लिकेशन तैयार नहीं है या कोई व्यक्तिnull अनुमति.

सेवा का लाइफ़साइकल

आपके ऐप्लिकेशन को यह ट्रैक करना चाहिए कि सिस्टम के लिए चुने गए वीपीएन का स्टेटस क्या है और वह काम कर रहा है या नहीं. कनेक्शन. अपने ऐप्लिकेशन का यूज़र इंटरफ़ेस (यूआई) अपडेट करें, ताकि कोई व्यक्ति डिवाइस को किसी भी बदलाव की जानकारी है.

सेवा शुरू करना

वीपीएन सेवा इन तरीकों से चालू की जा सकती है:

  • आपका ऐप्लिकेशन, सेवा को शुरू कर देता है. आम तौर पर, ऐसा तब होता है, जब किसी व्यक्ति ने 'कनेक्ट करें' बटन पर टैप किया हो.
  • सिस्टम, सेवा शुरू कर देता है, क्योंकि हमेशा चालू रहने वाला वीपीएन चालू होता है.

आपका ऐप्लिकेशन, वीपीएन सेवा शुरू करने के लिए startService(). अधिक जानकारी के लिए, एक उपयोगकर्ता को शुरू करने के लिए सेवा.

सिस्टम, कॉल करके बैकग्राउंड में आपकी सेवा शुरू करता है onStartCommand(). हालांकि, Android 8.0 (एपीआई लेवल 26) या इसके बाद के वर्शन वाले बैकग्राउंड ऐप्लिकेशन. अगर आपको इन तरीकों से एपीआई लेवल, आपको कॉल करके अपनी सेवा को फ़ोरग्राउंड में बदलना होगा Service.startForeground(). अधिक जानकारी के लिए, Google टैग का उपयोग करके सेवा को फ़ोरग्राउंड में चालू करें.

सेवा को रोकना

डिवाइस का इस्तेमाल करने वाला व्यक्ति आपके ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करके आपकी सेवा को बंद कर सकता है. रुको करने के बजाय हमारी सेवा का इस्तेमाल करें. सिस्टम एक चालू गतिविधि को भी रोक देता है कनेक्शन जब डिवाइस का इस्तेमाल करने वाला व्यक्ति, वीपीएन स्क्रीन पर ये काम करता हो सेटिंग ऐप्लिकेशन में जाकर:

  • वीपीएन ऐप्लिकेशन को डिसकनेक्ट कर देता है या भूल जाता है
  • किसी चालू कनेक्शन के लिए, हमेशा चालू रहने वाले वीपीएन को बंद कर देता है

सिस्टम आपकी सेवा के onRevoke() तरीके का इस्तेमाल करता है, लेकिन यह कॉल ऐसा हो सकता है कि यह मुख्य थ्रेड में न हो. जब सिस्टम इस तरीके को कॉल करता है, तो कोई अन्य नेटवर्क इंटरफ़ेस, पहले से ही ट्रैफ़िक को रूट कर रहा है. सुरक्षित तरीके से नष्ट किया जा सकता है को पूरा करने में मदद मिलती है.

  • वीपीएन गेटवे के लिए सुरक्षित टनल सॉकेट को बंद करने के लिए, कॉल करें DatagramSocket.close().
  • पार्सल फ़ाइल डिस्क्रिप्टर को बंद करें (आपको उसे खाली करने की ज़रूरत नहीं है) ParcelFileDescriptor.close().

वीपीएन हमेशा चालू रखें

डिवाइस बूट होने पर Android, वीपीएन सेवा शुरू कर सकता है. साथ ही, वीपीएन सेवा चालू रहने के दौरान भी डिवाइस चालू रह सकता है डिवाइस चालू है. इस सुविधा को हमेशा चालू रहने वाला वीपीएन कहते हैं और यह इन देशों में उपलब्ध है Android 7.0 (एपीआई लेवल 24) या उसके बाद का वर्शन. जब तक Android सेवा का इस्तेमाल करता है लाइफ़साइकल. वीपीएन गेटवे के लिए, वीपीएन सेवा ही ज़िम्मेदार होती है कनेक्शन. हमेशा चालू रहने वाला वीपीएन, उन कनेक्शन को भी ब्लॉक कर सकता है जो वीपीएन का इस्तेमाल नहीं करते.

उपयोगकर्ता अनुभव

Android 8.0 या उसके बाद के वर्शन में, यह काम करने के लिए सिस्टम निम्न डायलॉग दिखाता है वह व्यक्ति जो डिवाइस को हमेशा चालू रहने वाले वीपीएन के बारे में जानकारी रखता है:

  • जब हमेशा चालू रहने वाला वीपीएन कनेक्शन डिसकनेक्ट होता है या कनेक्ट नहीं हो पाता, तो लोगों को खारिज न की जा सकने वाली सूचना. सूचना पर टैप करने पर एक डायलॉग दिखता है ज़्यादा जानकारी देती है. वीपीएन के फिर से कनेक्ट होने पर या किसी के साथ कनेक्ट होने पर यह सूचना नहीं दिखती है हमेशा-चालू VPN विकल्प को बंद कर देती है.
  • हमेशा चालू रहने वाले वीपीएन की मदद से, डिवाइस का इस्तेमाल कर रहा व्यक्ति किसी भी नेटवर्क को ब्लॉक कर सकता है जो वीपीएन का इस्तेमाल नहीं करते. इस विकल्प को चालू करने पर, सेटिंग ऐप्लिकेशन, लोगों को चेतावनी देता है कि वीपीएन इस्तेमाल करने से पहले उनके पास इंटरनेट कनेक्शन नहीं है कनेक्ट करता है. सेटिंग ऐप्लिकेशन, डिवाइस का इस्तेमाल करने वाले व्यक्ति को जारी रखने का निर्देश देता है या रहने दें.

क्योंकि सिस्टम (न कि कोई व्यक्ति नहीं) हमेशा चालू रहने वाले कनेक्शन को चालू और बंद करता है, आपको अपने ऐप्लिकेशन के काम करने के तरीके और यूज़र इंटरफ़ेस के हिसाब से काम करना होगा:

  1. सिस्टम और सेटिंग की वजह से, कनेक्शन को डिसकनेक्ट करने वाले किसी भी यूज़र इंटरफ़ेस (यूआई) को बंद कर दें ऐप्लिकेशन की मदद से कनेक्शन को कंट्रोल किया जा सकता है.
  2. हर ऐप्लिकेशन के शुरू होने के बीच के किसी भी कॉन्फ़िगरेशन को सेव करें और सबसे नई सेटिंग. जब सिस्टम आपके ऐप्लिकेशन को मांग पर चालू करता है, इसलिए उपयोगकर्ता को ज़रूरी नहीं है कि आपके डिवाइस का इस्तेमाल करते समय डिवाइस हमेशा कनेक्शन कॉन्फ़िगर करना चाहे.

मैनेज किए जा रहे कॉन्फ़िगरेशन का इस्तेमाल करके, कनेक्शन. मैनेज किए जा रहे कॉन्फ़िगरेशन से आईटी एडमिन को आपके वीपीएन को कहीं से भी कॉन्फ़िगर करने में मदद मिलती है.

हमेशा चालू रहने वाली सुविधा का पता लगाएं

Android, एपीआई की मदद से यह पुष्टि नहीं करता कि सिस्टम ने आपका वीपीएन चालू किया या नहीं सेवा. हालांकि, जब आपका ऐप्लिकेशन किसी भी सेवा को शुरू किए जाने के इंस्टेंस को फ़्लैग करता है, तो आपको सिस्टम ने हमेशा चालू रहने वाले वीपीएन के लिए, फ़्लैग नहीं की गई सेवाएं शुरू कर दी हैं. यहां एक उदाहरण दिया गया है:

  1. वीपीएन सेवा चालू करने के लिए, Intent इंस्टेंस बनाएं.
  2. इंटेंट में अतिरिक्त वैल्यू डालकर, वीपीएन सेवा को फ़्लैग करें.
  3. सेवा के onStartCommand() तरीके में, फ़्लैग करने के लिए intent तर्क की अतिरिक्त शर्तों को पूरा करें.

ब्लॉक किए गए कनेक्शन

डिवाइस का इस्तेमाल करने वाला कोई व्यक्ति या आईटी एडमिन, सारे ट्रैफ़िक को वीपीएन इस्तेमाल करने के लिए कह सकता है. यह सिस्टम, ऐसे नेटवर्क ट्रैफ़िक को ब्लॉक कर देता है जो वीपीएन का इस्तेमाल नहीं करता. इसका इस्तेमाल करने वाले लोग डिवाइस को वीपीएन के विकल्पों में, बिना वीपीएन वाले कनेक्शन ब्लॉक करें स्विच दिखेगा पैनल खोलें.

हमेशा चालू रहने वाली सुविधा से ऑप्ट आउट करें

अगर आपका ऐप्लिकेशन फ़िलहाल हमेशा चालू रहने वाले वीपीएन के साथ काम नहीं करता, तो आप Android में ऑप्ट आउट कर सकते हैं 8.1 या उसके बाद वाले वर्शन के लिए) SERVICE_META_DATA_SUPPORTS_ALWAYS_ON false के लिए सेवा मेटाडेटा. ऐप्लिकेशन मेनिफ़ेस्ट के इस उदाहरण में, अलग-अलग वर्शन को जोड़ने का तरीका बताया गया है मेटाडेटा एलिमेंट:

<service android:name=".MyVpnService"
         android:permission="android.permission.BIND_VPN_SERVICE">
     <intent-filter>
         <action android:name="android.net.VpnService"/>
     </intent-filter>
     <meta-data android:name="android.net.VpnService.SUPPORTS_ALWAYS_ON"
             android:value=false/>
</service>

जब आपका ऐप्लिकेशन हमेशा चालू रहने वाले वीपीएन से ऑप्ट आउट करता है, तो सिस्टम, यूज़र इंटरफ़ेस (यूआई) के विकल्प को बंद कर देता है नियंत्रण.

हर ऐप्लिकेशन के लिए वीपीएन

वीपीएन ऐप्लिकेशन यह फ़िल्टर कर सकते हैं कि इंस्टॉल किए गए कौनसे ऐप्लिकेशन, वीपीएन कनेक्शन. अनुमति वाली सूची या, बिना अनुमति वाली सूची बनाई जा सकती है. लेकिन दोनों नहीं. अगर अनुमति वाली या अस्वीकार की गई सूचियों को नहीं बनाया जाता, तो सिस्टम वीपीएन के ज़रिए, नेटवर्क के पूरे ट्रैफ़िक के लिए किया जाता है.

वीपीएन से कनेक्ट होने से पहले, आपके वीपीएन ऐप्लिकेशन को ये सूचियां सेट करनी होंगी. अगर आपको सूची में बदलाव करने के लिए, नया वीपीएन कनेक्शन बनाएं. ऐप्लिकेशन इंस् टॉल किया जाएगा.

Kotlin

// The apps that will have access to the VPN.
val appPackages = arrayOf(
        "com.android.chrome",
        "com.google.android.youtube",
        "com.example.a.missing.app")

// Loop through the app packages in the array and confirm that the app is
// installed before adding the app to the allowed list.
val builder = Builder()
for (appPackage in appPackages) {
    try {
        packageManager.getPackageInfo(appPackage, 0)
        builder.addAllowedApplication(appPackage)
    } catch (e: PackageManager.NameNotFoundException) {
        // The app isn't installed.
    }
}

// Complete the VPN interface config.
val localTunnel = builder
        .addAddress("2001:db8::1", 64)
        .addRoute("::", 0)
        .establish()

Java

// The apps that will have access to the VPN.
String[] appPackages = {
    "com.android.chrome",
    "com.google.android.youtube",
    "com.example.a.missing.app"};

// Loop through the app packages in the array and confirm that the app is
// installed before adding the app to the allowed list.
VpnService.Builder builder = new VpnService.Builder();
PackageManager packageManager = getPackageManager();
for (String appPackage: appPackages) {
  try {
    packageManager.getPackageInfo(appPackage, 0);
    builder.addAllowedApplication(appPackage);
  } catch (PackageManager.NameNotFoundException e) {
    // The app isn't installed.
  }
}

// Complete the VPN interface config.
ParcelFileDescriptor localTunnel = builder
    .addAddress("2001:db8::1", 64)
    .addRoute("::", 0)
    .establish();

इन ऐप्लिकेशन को इस्तेमाल करने की अनुमति है

किसी ऐप्लिकेशन को अनुमति वाली सूची में जोड़ने के लिए, कॉल करें VpnService.Builder.addAllowedApplication(). अगर आपने सूची में एक या उससे ज़्यादा ऐप्लिकेशन शामिल होते हैं. इसके बाद, सूची में मौजूद ऐप्लिकेशन ही वीपीएन का इस्तेमाल करते हैं. अन्य सभी ऐप्लिकेशन (जो सूची में नहीं हैं) वीपीएन की तरह, सिस्टम नेटवर्क का इस्तेमाल करते हैं नहीं चल रहा है. अनुमति वाली सूची खाली होने पर, सभी ऐप्लिकेशन वीपीएन का इस्तेमाल करते हैं.

अस्वीकार किए गए ऐप्लिकेशन

किसी ऐप को अनुमति नहीं दी गई सूची में जोड़ने के लिए, कॉल करें VpnService.Builder.addDisallowedApplication(). अनुमति न मिलने वाले ऐप्लिकेशन, सिस्टम नेटवर्किंग का इस्तेमाल इस तरह करते हैं जैसे कि वीपीएन काम न कर रहा हो. बाकी सभी ऐप्लिकेशन ऐप्लिकेशन वीपीएन का इस्तेमाल करते हैं.

बायपास वीपीएन

आपका वीपीएन, ऐप्लिकेशन को वीपीएन को बायपास करने और अपना नेटवर्क चुनने की अनुमति दे सकता है. यहां की यात्रा पर हूं वीपीएन को बायपास करें, तो VpnService.Builder.allowBypass() पर तब कॉल करें, जब वीपीएन इंटरफ़ेस सेट अप करना. अपनी वीपीएन सेवा. अगर कोई ऐप्लिकेशन किसी खास प्रोसेस या सॉकेट को किसी खास प्रोसेस से बाइंड नहीं करता है नेटवर्क, वीपीएन के ज़रिए ऐप्लिकेशन का नेटवर्क ट्रैफ़िक जारी रहता है.

अगर कोई ऐप्लिकेशन किसी खास नेटवर्क से जुड़ा होता है, तो डिवाइस में इंटरनेट कनेक्शन नहीं होता वीपीएन से न जाने वाले ट्रैफ़िक को ब्लॉक करती है. किसी खास वेबसाइट या ऐप्लिकेशन के ज़रिए ट्रैफ़िक भेजने के लिए नेटवर्क, ऐप्लिकेशन कॉल करने के तरीके, जैसे ConnectivityManager.bindProcessToNetwork() या सॉकेट कनेक्ट करने से पहले Network.bindSocket().

नमूना कोड

Android ओपन सोर्स प्रोजेक्ट में ToyVPN नाम का एक सैंपल ऐप्लिकेशन शामिल होता है. इस ऐप्लिकेशन में, वीपीएन सेवा को सेट अप करने और उससे कनेक्ट करने का तरीका बताया गया है.