Android ऐप VPN पर चलने से मना करता है: कौन सी परत फ़ैसला करती है
कोई ऐप स्थानीय ट्रांसपोर्ट जाँच, सर्वर-पक्ष के पते का नियम या अपनी नीति के कारण VPN ठुकरा सकता है। आउटलेट बदलने से पहले इन तीनों को अलग पहचानें।
जब कोई Android ऐप टनल ऊपर आते ही काम करना बंद कर देता है, तो तीन अलग चीज़ें ज़िम्मेदार हो सकती हैं, और वे सभी एक जैसी दिखने वाली विफलताएँ पैदा करती हैं। ऐप फ़ोन की अपनी नेटवर्क स्थिति पढ़कर स्थानीय रूप से मना कर सकता है। सर्वर उस पते को वर्गीकृत करके अस्वीकार कर सकता है जहाँ से आप आते हैं। या इनकार का VPN से कोई लेना-देना ही न हो। नीचे का क्रम कुछ भी बदलने से पहले सबूत इकट्ठा करता है, क्योंकि आउटलेट बदलना सबसे महँगा कदम है और अगर जाँच स्थानीय है तो सबसे कम मदद करने वाला भी।
चरण 1: पता करें कि ऐप कब मना करता है
समय पहला भेदक है। लॉग बफ़र साफ़ करें, विफलता दोहराएँ और देखें कि ऐप ने शिकायत से पहले क्या किया:
adb logcat -c
# reproduce the failure in the app
adb logcat -d | grep -iE 'vpn|network|connect|http' | tail -60
अगर ऐप किसी भी बाहर जाने वाली माँग का प्रयास होने से पहले मना करता है, तो आप स्थानीय निर्णय देख रहे हैं। अगर वह जुड़ता है, कुछ भेजता है और फिर त्रुटि दिखाता है, तो अस्वीकृति दूसरी तरफ़ से आई है। अगर टनल बंद होने पर भी ऐप उसी तरह विफल होता है, तो VPN कभी चर ही नहीं था।
उस समय को सबूत मानें, पुष्टि नहीं। ऐप कैश किया हुआ उत्तर दोबारा चला सकता है, और पृष्ठभूमि की माँगें आपके देखने से पहले सफल या विफल हो सकती हैं। पिछली सफल माँग और त्रुटि के समय-चिह्न लिखें, केवल वह क्षण नहीं जब संदेश दिखा।
चरण 2: फ़ोन का अपना नेटवर्क-दृष्टिकोण पढ़ें
Android VPN स्थिति को नेटवर्क क्षमता के रूप में उजागर करता है, इसलिए टनल सक्रिय होने का पता लगाने के लिए ऐप को वाणिज्यिक प्रदाताओं की सूची की ज़रूरत नहीं। वह कनेक्टिविटी सेवा से पूछता है कि मौजूदा नेटवर्क कौन सा है, और उत्तर में VPN ट्रांसपोर्ट बिट शामिल होता है:
val cm = context.getSystemService(ConnectivityManager::class.java)
val caps = cm.getNetworkCapabilities(cm.activeNetwork)
val onVpn = caps?.hasTransport(NetworkCapabilities.TRANSPORT_VPN) == true
यह जाँच स्थानीय और सस्ती है, और यह बिना किसी दूरस्थ वर्गीकरण के “यह ऐप VPN पर नहीं चलता” जैसी पूरी श्रेणी की रिपोर्ट समझाती है। ऐप जो देख सकता है वह अब भी अपने नेटवर्क संदर्भ पर निर्भर है, इसलिए यह न मानें कि हर ऐप डिवाइस की हर प्रोफ़ाइल जाँचता है।
वर्कस्टेशन से आप परीक्षण डिवाइस पर adb shell dumpsys connectivity का उपयोग करके और VPN नेटवर्क प्रविष्टि खोजकर वही स्थिति देख सकते हैं। टनल चालू वाली एक रन की तुलना टनल बंद वाली रन से करें, और दोनों आउटपुट रखें।
चरण 3: पढ़ें कि सर्वर वास्तव में क्या देखता है
दूसरा पर्यवेक्षक सेवा है। वह आने वाला स्रोत पता देखती है, और वह पते, उसके पीछे के होस्टिंग नेटवर्क, क्षेत्र, ऑपरेटर या खाते और डिवाइस से जुड़े संकेतों पर कार्य कर सकती है। इनमें से कोई भी विशिष्ट पहचान नहीं है, और साझा पता-निर्धारण पार्श्व अवरोधों को सामान्य बनाता है: एक प्रतिबंधित पता उसी अनुवाद के पीछे के असंबंधित उपयोगकर्ताओं को भी बाहर कर सकता है।
पता उसी रास्ते से लें जो ऐप उपयोग करता है, लैपटॉप के ब्राउज़र से नहीं। फ़ोन पर पता-प्रतिध्वनि सेवा को सादी माँग दिखाती है कि दूरस्थ पक्ष को क्या मिलता है, और उसकी तुलना सेलुलर नेटवर्क से की गई माँग से करने पर पता चलता है कि पता बदला भी या नहीं।
अगर ऐप सेलुलर पर चलता है और उसी खाते के साथ टनल पर विफल होता है, तो अस्वीकृति दूरस्थ सिरे पर या ऐप की अपनी नीति में है। अगर दोनों में विफल होता है, तो VPN भेदक नहीं है और आपको एंडपॉइंट जाँचना बंद कर देना चाहिए।
चरण 4: सबूत को तीन फ़ैसलों में से एक से मिलाएँ
तीन संयोजन लगभग हर रिपोर्ट को कवर करते हैं। टनल सक्रिय होने पर बिना किसी बाहरी प्रयास के इनकार स्थानीय ट्रांसपोर्ट जाँच की ओर इशारा करता है। बाहर जाकर त्रुटि, किसी विशेष होस्ट पर समय-समाप्ति या क्षेत्र-संदेश के साथ लौटने वाली माँग दूरस्थ पक्ष की ओर इशारा करती है। टनल के बिना सेलुलर पर दोहराने वाली विफलता खाते, ऐप संस्करण या सेवा की अपनी नीति की ओर इशारा करती है, और कोई VPN बदलाव उसे नहीं हिलाएगा।
फ़ैसला उस सबूत के साथ लिखें जिसने उसे पैदा किया। इस चरण का मूल्य यह है कि यह उस चक्र को रोकता है जिसमें कोई हैंडसेट पर ही चलने वाली जाँच ठीक करने के लिए चार बार आउटलेट नोड बदलता है।
यह दावों को ईमानदार भी रखता है। स्वयं होस्ट करना एंडपॉइंट और उसका इंटरनेट आउटलेट बदलता है; यह Android को यह भुलाता नहीं कि VPN नेटवर्क सक्रिय है, और पतों को वर्गीकृत करने वाली सेवा की स्वीकृति की गारंटी भी नहीं देता। स्थानीय फ़िल्टर आपके अपने VPN नेटवर्क पर भी वाणिज्यिक की तरह आसानी से सक्रिय हो सकता है।
चरण 5: समर्थित रास्ता लें और उसे सत्यापित करें
उत्पाद की प्रलेखित नीति और उसके सहायता-स्वामी से शुरू करें। क्लाइंट संस्करण, सटीक संदेश और विफलता की संकरी अवधि भेजें; केवल यह साबित करने के लिए कि त्रुटि मौजूद है, पूर्ण ट्रैफ़िक कैप्चर या क्रेडेंशियल न भेजें।
अगर सेवा सीधे पहुँच की अनुमति देती है और डिवाइस नीति भी देती है, तो प्रति-ऐप बहिष्करण ही समर्थित तंत्र है, और यह टनल छिपाने के बजाय उस ऐप को जानबूझकर टनल से हटाता है। तब ऐप का ट्रैफ़िक अपने रास्ते से निकलता है, जो एक नीति-निर्णय है जिसे किसी को अपनाना होगा। VPN के बिना अवरोध करने वाले विन्यास में बहिष्कृत ऐप कनेक्टिविटी खो सकता है, इसलिए काम करने का वादा करने से पहले वह संयोजन जाँचें।
किसी भी बदलाव के बाद चरण-एक का समय परीक्षण दोहराएँ, ऐप के काम करने की पुष्टि करें और यह भी पुष्टि करें कि हर दूसरा ऐप अब भी टनल का उपयोग करता है। फिर पिछला विन्यास बहाल करें और देखें कि विफलता लौटती है या नहीं, क्योंकि जिस सुधार को आप दोहरा नहीं सकते वह ऐसा संयोग है जो आपको फिर मिलेगा।