آپ ترتیبات میں 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 ہے، دوسرا وہ پروفائل ہے جو آپ نہیں بنا سکتے۔ اس جملے کو درست کرنا کسی بھی ردوبدل سے سستا ہے۔

متعلقہ مضامین