কেন আপনার iPhone অ্যাপ সিস্টেম VPN চালু বা বন্ধ করতে পারে না
একটি পাবলিক অ্যাপ সিস্টেম VPN টগল করতে, তার অবস্থা পড়তে বা সংযোগ জোর করে চালাতে পারে না। On Demand নিয়ম, তত্ত্বাবধানে থাকা ডিভাইসে Always On প্রোফাইল এবং MDM — এই বিকল্পগুলোই আছে।
একজন প্রোডাক্ট ম্যানেজার এমন একটি বোতাম চান যা কোম্পানির VPN চালু করে, আর অনুরোধটি তুচ্ছ শোনায়। iOS-এ এটি ছোট কোনো ফিচার নয়; এটি পাবলিক চুক্তির বাইরে, আর প্রতিটি বাঁকপথ হয় রিভিউয়ে ব্যর্থ হয়, নয়তো পরের রিলিজে ভেঙে পড়ে। অনুরোধটি প্ল্যাটফর্ম আসলে যা অনুমোদন করে তার ভেতর দিয়ে হাঁটান, আর ডিজাইন বেশিরভাগই নিজেই লেখা হয়ে যাবে। একটি অ্যাপ VPN কনফিগারেশনের মালিক হতে পারে এবং সেটি চালু করতে পারে। একটি অ্যাপ সিস্টেম সুইচে পৌঁছাতে পারে না, যে প্রোফাইল নিজে তৈরি করেনি তার অবস্থা পড়তে পারে না, এবং ব্যবহারকারীর ইচ্ছার বিরুদ্ধে তাকে সংযুক্ত রাখতে পারে না।
ব্যবহারকারী যে তিনটি বিষয় বোঝায় তা দিয়েই শুরু করুন
API-গুলো আলাদা করার আগে অর্থগুলো আলাদা করুন। কখনও ব্যবহারকারী চান আপনার অ্যাপের টানেল সংযুক্ত থাকুক, কখনও চান অন্য কেউ ইনস্টল করা প্রোফাইলের জন্য সেটিংসের সুইচ উল্টে যাক, আর কখনও চান টানেল ছাড়া ফোনে ব্রাউজ করা না যাক। এগুলো তিনটি ভিন্ন ব্যবস্থার সঙ্গে মেলে, আর প্রথমটি কেবল সাধারণ অ্যাপের জন্য খোলা।
দ্বিতীয় অর্থটিই Stack Overflow-এর প্রশ্নগুলো তৈরি করে, আর এর কোনো সমর্থিত উত্তর নেই। সেটিংসের টগল ব্যবহারকারীর, আর ম্যানেজ করা ডিভাইসে প্রোফাইলের। কোনো পাবলিক API VPN কনফিগারেশন তালিকাভুক্ত করে না, সিস্টেম টানেল চালু কি না জানায় না, বা তা উল্টায় না।
একটি অ্যাপ আসলে কী তৈরি করতে পারে
NetworkExtension একটি অ্যাপকে NEVPNManager দিয়ে নিজস্ব কনফিগারেশন দেয়। Personal VPN এনটাইটেলমেন্ট ও ব্যবহারকারীর সম্মতিতে অ্যাপ এমন একটি কনফিগারেশন সংরক্ষণ করে যা সেটিংসে তার নিজের নামে দেখা যায়, এবং সেই একটি সংযোগ চালু বা বন্ধ করতে পারে। এটি একটি বাস্তব, রিভিউযোগ্য সক্ষমতা, আর এটাই গোটা পরিসর: ম্যানেজার কেবল যা তৈরি করেছে তা-ই পড়ে ও লেখে।
এনটাইটেলমেন্ট স্বয়ংক্রিয় নয়। আপনি Apple-এর কাছে এটি চান এবং ব্যাখ্যা করেন অ্যাপের আদৌ টানেল দরকার কেন, আর যে ক্লায়েন্টের একমাত্র লক্ষ্য অন্যের প্রোফাইল চালু করা তার ভালো উত্তর নেই। প্যাকেট টানেল প্রদানকারীরা ভিন্ন ক্লাসে একই নিয়ম মানে: NETunnelProviderManager অ্যাপ নিজে ইনস্টল করা প্রদানকারীভিত্তিক কনফিগারেশনের মালিক। কোনও পথই MDM-এর দেওয়া প্রোফাইলে পৌঁছায় না।
সম্মতি সংরক্ষণের সময়েও প্রযোজ্য। কনফিগারেশন লেখা ব্যবহারকারীকে জিজ্ঞাসা করে, আর এই জিজ্ঞাসা সুবিধার জন্য অ্যাপ চেপে যেতে পারে এমন কিছু নয়।
অবস্থা পড়তে গেলে একই দেয়ালে ধাক্কা
স্ট্যাটাস নিয়ন্ত্রণের চেয়ে বন্ধুত্বপূর্ণ দেখায় এবং সমানভাবেই বন্ধ। NEVPNStatus অ্যাপের নিজস্ব কনফিগারেশনের জন্য invalid, disconnected, connecting, connected, reasserting বা disconnecting জানায়, আর প্রতিটি পরিবর্তনে একটি নোটিফিকেশন আসে। এটি ম্যানেজমেন্ট প্রোফাইল ইনস্টল করা টানেল সম্পর্কে কিছুই বলে না, অথচ হেল্প ডেস্ক আসলে ঠিক সেই অবস্থাটিই দেখতে চায়।
নেটওয়ার্ক পাথ মনিটরিং ও ইন্টারফেস পরিবর্তন ডিজাইন রিভিউয়ে বিকল্প হিসেবে প্রস্তাব করা হয়। এগুলো অ্যাপের ট্রাফিক যে পথে যায় তা বর্ণনা করে, যা VPN অবস্থার সঙ্গে অসম্পর্কিত কারণে বদলায়, আর এগুলোকে VPN রিডআউট হিসেবে ব্যবহার করলে এমন UI আসে যা দুই দিকেই মিথ্যা বলে।
On Demand আর Always On-ই আসল লিভার
সমর্থিত লিভারগুলো অ্যাপে নয়, প্রোফাইলে থাকে। On Demand নিয়ম সিস্টেমকে বলে কখন সংযোগ করতে হবে: ক্রিয়া সহ শর্তের একটি ক্রমবদ্ধ তালিকা, যা আপনার কোড নয়, অপারেটিং সিস্টেম মূল্যায়ন করে। যে নিয়ম যেকোনো ইন্টারফেসে সংযোগ করে তা অ্যাপকে কোনো নিয়ন্ত্রণ না দিয়েই সবসময়-সংযুক্ত অনুভূতি তৈরি করে।
Always On VPN হলো বলবৎ করার ব্যবস্থা, আর তা তত্ত্বাবধানের সঙ্গে বাঁধা। তত্ত্বাবধানে থাকা ডিভাইসে MDM এমন প্রোফাইল ইনস্টল করে যা টানেল চালু রাখে; তত্ত্বাবধানহীন ব্যক্তিগত ফোনে একই কী একই আচরণ দেয় না। এই অসমতা ইচ্ছাকৃত, আর পেলোড কী-এর কোনো সমন্বয় তা দূর করে না। যখন প্রয়োজন সত্যিই VPN চালু থাকা, তখন প্রয়োজন আসলে ডিভাইস ম্যানেজ করা।
দুটির মাঝে বসে দুর্বলতর চাচাতো ভাই: ব্যবহারকারী সংযোগ কাটার পর আবার সংযোগ করে এমন নিয়ম। নিয়মটি পরেরবার মূল্যায়িত হলে সংযোগ হয়, যা তাৎক্ষণিক হওয়ার সমান নয়, আর ইচ্ছাকৃতভাবে সংযোগ কাটা ব্যবহারকারী পার্থক্যটি টের পাবেন। তালা দেওয়ার প্রতিশ্রুতি না দিয়ে সেই ফাঁক ঘিরে ইন্টারফেস ডিজাইন করুন।
সমর্থিত পথই পাঠান
কোনো কোড লেখার আগেই চারটি প্রশ্ন ব্যবস্থাটি ঠিক করে: ডিভাইসের মালিক কে, তা তত্ত্বাবধানে আছে কি না, কোন ক্লায়েন্ট টানেল শেষ করে, আর প্রোফাইল কোথা থেকে আসে। এর কোনওটি অজানা থাকলে ফিচার অনুরোধটি অনুমানের জন্য প্রস্তুত নয়।
সিস্টেম VPN-এ হাত দেওয়া কোনো প্রাইভেট API ডেমোতে পাস করবে আর রিভিউয়ে ফেল করবে, আর অন্য উপায়ে পাঠানো হলে পরের iOS রিলিজে ভেঙে পড়বে। একটি টগলের জন্য সেই বিনিময়ের কোনো সংস্করণই মূল্যবান নয়।
ম্যানেজমেন্ট টেলিমেট্রি আলাদা চ্যানেল: এটি জানায় একটি প্রোফাইল ইনস্টল হয়েছে এবং ডিভাইস সম্মত কি না, যা প্রতিবেদন, প্রতি-অ্যাপ নিয়ন্ত্রণ-তল নয়। প্রতিটি আপডেটের পর প্রকৃত ডিভাইসে প্রবাহটি পরীক্ষা করুন, কারণ সমর্থিত আচরণ OS-এ থাকে আর OS এগোয়।