NEVPNManager iOS پر کیا بنا سکتا ہے (اور کیا نہیں)
iOS کا VPN API تین پروٹوکول کلاسوں سے ایپ کی ملکیت والی ایک ترتیب بناتا ہے۔ L2TP، PPTP اور دستخط شدہ پروفائل اس سطح کا حصہ نہیں ہیں۔
جب آپ iOS ایپ کے اندر VPN اسکرین بناتے ہیں، پہلی حیرت یہ ہے کہ Settings ایپ کی پروٹوکول فہرست API کی فہرست نہیں ہے۔ Network Extension فریم ورک آپ کی ایپ کو اسی ایپ کی ملکیت والی ایک ذاتی VPN ترتیب بنانے دیتا ہے، اور یہ صرف چند پروٹوکول اشیاء قبول کرتا ہے۔ لوگ جو اور کچھ توقع کرتے ہیں، L2TP سے لے کر ڈاؤن لوڈ شدہ پروفائل تک، اس سطح سے باہر ہے یا Apple کے لیے نجی ہے۔ آگے آنے والی ناکامیاں عام طور پر بگ نہیں ہوتیں، یہ API کا ایسے کام سے انکار ہے جو اسے کبھی نہیں دیا گیا۔
افسانہ: API ایک Settings ایڈیٹر ہے
یہ سمجھا جاتا ہے کہ چونکہ iOS IKEv1، IKEv2، L2TP اور IPsec پروفائل ترتیب دے سکتا ہے، کوئی ایپ ان میں سے کوئی بھی پروگرامی طور پر بنا سکتی ہے۔ نہیں بنا سکتی۔ فریم ورک کال کرنے والی ایپ کو بالکل ایک ترتیب کی جگہ دیتا ہے، اور وہ جگہ صرف عوامی پروٹوکول کلاسوں کا ایک چھوٹا مجموعہ قبول کرتی ہے۔ لوگ جو اور کچھ توقع کرتے ہیں، L2TP سے لے کر ڈاؤن لوڈ شدہ پروفائل تک، اس سطح سے باہر ہے یا Apple کے لیے نجی ہے۔
آگے آنے والی ناکامیاں عام طور پر بگ نہیں ہوتیں۔ یہ API کا ایسے کام سے انکار ہے جو اسے کبھی نہیں دیا گیا، اور حل یہ ہے کہ اسکرین کو اسی کے گرد ڈیزائن کیا جائے جو API کے پاس ہے۔
تین پروٹوکول اشیاء اور وہ جو موجود نہیں
آپ کے اختیارات ہیں NEVPNProtocolIPSec کے ذریعے IKEv1، NEVPNProtocolIKEv2 کے ذریعے IKEv2، اور NETunnelProviderProtocol اگر آپ اپنی پیکٹ ٹنل توسیع بھیجتے ہیں۔ NEVPNManager حوالہ قبول شدہ پروٹوکول اشیاء کی فہرست دیتا ہے۔ L2TP اور PPTP اس فہرست میں کبھی نہیں آتے کیونکہ Apple نے ان کے لیے کوئی کلاس شائع نہیں کی۔ ان میں سے کسی کو آزمانا محفوظ کرنے کے وقت غلطی پر ختم ہوتا ہے، یا اس سے بھی بدتر، ایسی ترتیب پر جسے نظام خاموشی سے استعمال کرنے سے انکار کر دیتا ہے۔
ڈیسک ٹاپ کوڈ مختلف اصولوں کی پیروی کرتا ہے۔ macOS پر SCNetworkInterfaceCreateWithInterface IPv4 پر L2TP جیسی انٹرفیس قسم کو تہہ کرتا ہے اور اسے نیٹ ورک سروس سے جوڑتا ہے، اور networksetup -connectpppoeservice نتیجہ شروع کرتا ہے۔ ایڈمنسٹریٹر حقوق اور ایک معاون آلہ درکار ہے، کیونکہ مشترکہ راز اور پاس ورڈ سسٹم کی کی چین میں جاتے ہیں۔ وہ ڈیزائن iOS پر کاپی کریں اور کچھ بھی کمپائل نہیں ہوگا۔
پاس ورڈ نہیں، کی چین حوالہ دیں
کوئی بھی IKE کلاس پاس ورڈ کو متن کے طور پر قبول نہیں کرتی۔ دو خصوصیات passwordReference اور sharedSecretReference مستقل کی چین حوالہ چاہتی ہیں، جو آپ kSecReturnPersistentRef مانگ کر SecItemCopyMatching سے حاصل کرتے ہیں۔ آئٹم کا ڈیٹا بھیجنا، یا فیلڈ میں سٹرنگ ڈالنا، محفوظ کرنے میں ناکامی یا خالی اسناد کے ساتھ کنکشن پیدا کرتا ہے۔ حوالہ اتنا ہی دیرپا ہے جتنا اس کے پیچھے کی چین آئٹم، اسی لیے ترتیب جوڑنے سے پہلے آئٹم کا موجود ہونا ضروری ہے۔ اسے محفوظ کرنے والے اسی لین دین میں بنائیں اور ترتیب کے بگوں کی پوری کلاس ختم کر دیں۔
سرٹیفکیٹ تصدیق الگ راستہ لیتی ہے: PKCS#12 بلاگ کے لیے identityData اور identityDataPassword۔ اس بلاگ کو ایپ بنڈل کے اندر بھیجنا نمونہ کوڈ سے آیا ہوا معمول ہے، اجرا کا فیصلہ نہیں، کیونکہ پاس ورڈ اس کے ساتھ سفر کرتا ہے اور ایپ کی ہر نقل وہی شناخت رکھتی ہے۔
حق اور دستیابی ہر چیز کے دروازے ہیں
منتظم بالکل نہ بھی ہو، اور وجہ پروویژننگ ہے۔ آپ کی ایپ شناخت کنندہ کو Network Extension صلاحیت اور ذاتی VPN حق دونوں درکار ہیں، اور بلڈ پر دستخط کرنے والی پروفائل میں دونوں ہونے چاہئیں۔
اسے چھوڑ دیں تو مشترکہ مثال nil واپس کرتی ہے، یا محفوظ کرنا ایسی غلطی سے ناکام ہوتا ہے جو حق کا کبھی ذکر نہیں کرتی۔ دستیابی دوسرا دروازہ ہے۔ iOS 8 سے پرانی چیز کو ہدف بنائیں تو رن ٹائم پر علامت نہیں ہوتی، اس لیے ناکامی کریش یا nil منتظم ہے، ترتیب کے بغیر منتظم نہیں۔ اپنی اشیاء کے گراف کو ڈیبگ کرنے سے پہلے رن ٹائم اور حق چیک کریں۔
لوڈ کریں، بدلیں، محفوظ کریں، پھر طلب پر ترتیب دیکھیں
زندگی کے چکر کو لوڈ، تبدیلی، محفوظ سمجھیں اور لوڈ کبھی نہ چھوڑیں۔ جب تک loadFromPreferences مکمل نہ ہو، منتظم کچھ نہیں رکھتا اور پروٹوکول شے پڑھی یا بدلی نہیں جا سکتی۔
دوسرا محفوظ کرنا دوسرا شامل کرنے کے بجائے ترتیب بدل دیتا ہے، اس لیے ادھورا محفوظ کرنا کام کرنے والی پروفائل کو نقصان پہنچا سکتا ہے۔ طلب کے قواعد ایک ترتیب شدہ صف بناتے ہیں، اور وہی ترتیب پالیسی ہے۔ کہیں سے بھی جڑنے کا قاعدہ منقطع کرنے کے قاعدے سے پہلے رکھیں اور دستی منقطع کے بعد فوراً دوبارہ جڑنا ہوتا ہے، جو نقص جیسا لگتا ہے مگر دستاویزی تشخیص کی پیروی کرتا ہے۔
جب صارف کی کارروائی کو جیتنا ہو تو منقطع کرنے کا قاعدہ آگے لائیں۔ ایپ کے کنٹرول سے باہر جو رہتا ہے وہ بھی اتنا ہی اہم ہے۔ راستے آپ کی مقرر کردہ ترجیح سے نہیں، ٹنل یا سرور پالیسی سے آتے ہیں، اور پیکٹ ٹنل فراہم کنندہ شروع ہونے پر ان کی رپورٹ دیتا ہے۔ ایپ دوسری ایپس یا ترتیب پروفائلز کی نصب کردہ پروفائلز کی فہرست نہیں بنا سکتی اور نہ ان میں ترمیم کر سکتی ہے، اس لیے ایسی اسکرین کا وعدہ نہ کریں جو ڈیوائس کا ہر VPN دکھائے۔