Android-এ অ্যাপভিত্তিক VPN: অ্যাপ বাদ দেওয়া মানে ব্লক করা নয়
স্ক্রিনের অ্যাপ-তালিকা এক টানেল মালিকের, আর একটি অ্যাপ বাদ দিলে তা সেই টানেলের চারপাশ দিয়ে যায়, নেটওয়ার্ক থেকে বের হয় না। সেখান থেকেই শুরু করুন।
দুজন মানুষ একই প্রশ্ন করেন এবং পরস্পরবিরোধী উত্তর পান, কারণ তাঁরা ভিন্ন জায়গায় দাঁড়িয়ে আছেন। একজন সিস্টেমের VPN সেটিংস স্ক্রিন খুলে অ্যাপের তালিকা সম্পাদনা করছেন। অন্যজন এডিটরে VpnService.Builder.addDisallowedApplication() লিখছেন। দুজনেই এটিকে অ্যাপভিত্তিক VPN ফিল্টার বলেন। কেবল একজনই তাঁর বর্ণিত নিয়ন্ত্রণের মালিক, আর কেউই কিছু ব্লক করছেন না।
ব্যবহারকারীর দেখা স্ক্রিন থেকে শুরু করুন
সেটিংস খুলুন, VPN এন্ট্রি খুঁজুন এবং সত্যিই সক্রিয় সংযোগটি দেখুন। ক্লায়েন্ট অ্যাপভিত্তিক তালিকা দিলে সেই তালিকা তার নিজের টানেলের। প্ল্যাটফর্ম এমন সাধারণ API প্রকাশ করে না যার মাধ্যমে অন্য একটি অ্যাপ আরেক VPN-এর অ্যাপ নির্বাচন পড়তে বা সম্পাদনা করতে পারে, তাই দ্বিতীয় অ্যাপ ব্যবহারকারীর জন্য সেই তালিকা ঠিক করতে পারে না।
এটি আলোচনার প্রথম শাখা। ইনস্টল করা VPN-এ এমন সেটিং না থাকলে কোড দিয়ে ঘোরানোর কিছু নেই: টানেলের মালিক পণ্যটিতেই সুবিধাটি নেই। থাকলে সঠিক সমাধান ওই স্ক্রিনেই, যিনি এটি খুলতে পারেন তিনিই করবেন।
প্যাকেটকে টানেল পর্যন্ত অনুসরণ করুন
আপনার অ্যাপ টানেল বানালে TUN ইন্টারফেস তৈরি করে এবং কোন অ্যাপের ট্রাফিক তার ভেতরে ঢোকে তা ঘোষণা করে। সদস্যপদের কলগুলি ইন্টারফেস স্থাপনের আগে ঘটে, আর এরপর সেই সেশনের জন্য নিয়মের সেট স্থির হয়ে যায়:
val builder = VpnService.Builder()
builder.addAddress("10.8.0.2", 32)
builder.addRoute("0.0.0.0", 0)
builder.addDisallowedApplication("com.example.bypass")
val tun = builder.establish() // membership decided here
সেই কলগুলি কেবল আপনার অ্যাপ এইমাত্র তৈরি করা টানেলের জন্য প্রযোজ্য। সেগুলি ডিভাইসজুড়ে নীতি নয়, অন্য ক্লায়েন্টের জন্য থাকে না, আর কারও VPN-এ পৌঁছাতে পারে না। প্যাকেজ সমাধান না হওয়ায় কোনো builder কল ব্যর্থ হলে ইন্টারফেস কখনও স্থাপিত হয় না, যা নীরব নয়, পরিষ্কার ব্যর্থতা।
বাদ দেওয়াটি ব্লক মনে হলো কেন
অনুমতি না পাওয়া অ্যাপ আপনার টানেলের চারপাশ দিয়ে নিচের নেটওয়ার্কে পাঠানো হয়। এটি ব্লক করার বিপরীত: ট্রাফিক তবুও ডিভাইস ছাড়ে, শুধু আপনার নিয়ন্ত্রিত ইন্টারফেসের বাইরে। ফায়ারওয়াল-ধাঁচের অ্যাপ উল্টোটি করে: অ্যাপের ট্রাফিক নিজের টানেলে নেয়, তারপর প্যাকেটগুলি ফেলে দেয় বা পাঠাতে অস্বীকার করে, ফলে ইন্টারফেস একই থাকে আর নীতির দিক উল্টে যায়।
এই উল্টোনোর পেছনের কাজটি কোনো কনফিগারেশন ফ্ল্যাগ নয়। আপনি টানেল ডেসক্রিপ্টর থেকে IP প্যাকেট পড়েন, প্রতি ফ্লোতে সিদ্ধান্ত নেন, এবং সুরক্ষিত সকেটে পাঠান বা ফেলে দেন। যা সামলাতে না পারেন তা কেবল থেমে যায়, তাই অর্ধসম্পূর্ণ টানেল কাজ করা ফিল্টারের বদলে ভাঙা নেটওয়ার্ক মনে হয়। লক্ষ্য ব্লক হলে প্যাকেট হ্যান্ডলিং, ফোরগ্রাউন্ড সার্ভিস এবং শ্রেণিবদ্ধ করতে না পারা ট্রাফিকের লিখিত নীতির জন্য বাজেট রাখুন।
নিজে বানালে কী ভাঙে
Android সাধারণত একসঙ্গে একটি সক্রিয় VPN অনুমোদন করে, তাই পণ্য চেইনিং সমর্থন না করলে আপনার ফিল্টার টানেল ও গোপনীয়তা টানেল একই জায়গার জন্য প্রতিযোগিতা করে। সংযোগ ব্লকসহ সর্বদা-চালু VPN ব্যর্থতার ধরনটি এখানে গুরুত্বপূর্ণভাবে বদলায়: টানেলে ঢুকতে না পারা ট্রাফিক সরাসরি পাঠানোর বদলে ফেলে দেওয়া হয়, যা লিক প্রতিরোধ নকশা চায় আর ডিবাগিং সেশন প্রায়ই আশা করে না।
প্যাকেজ দৃশ্যমানতা দ্বিতীয় ফাঁদ। অ্যাপের প্যাকেজ নাম সমাধানে NameNotFoundException দিয়ে ব্যর্থতা হতে পারে, আর নতুন Android সংস্করণে আপনি যে প্যাকেজ দেখেন তা আপনার ঘোষিত কোয়েরির ওপর নির্ভর করে। প্রতিটি নাম সমাধান হবে ধরে নেওয়ার বদলে ব্যতিক্রম সামলান, এবং অ্যাপ ইনস্টল বা সরানো হলে তালিকাটি আবার পড়ুন, চিরকাল ক্যাশে রাখবেন না।
পরিচালিত ডিভাইস তৃতীয় মালিক যোগ করে। এন্টারপ্রাইজ মোবিলিটি নীতি অ্যাপভিত্তিক VPN বা সর্বদা-চালু প্রোফাইল নির্ধারণ করতে পারে, আর সাধারণ অ্যাপ তা অতিক্রম করতে পারে না। নিজের কোড ডিবাগ করার আগে ডিভাইসটি পরিচালিত কি না দেখুন, কারণ সেখানে যে তালিকা বদলাতে চাইছেন তা ফোন হাতে থাকা কারও পক্ষেও সম্পাদনাযোগ্য নাও হতে পারে।
আপনার নিয়ন্ত্রিত একটি অ্যাপ দিয়ে পরীক্ষা করুন
যে অ্যাপ ফিল্টার করতে চান তা দিয়ে পরীক্ষা করবেন না। এমন দ্বিতীয় অ্যাপ নিন যার নেটওয়ার্ক আচরণ লক্ষ্য করতে পারেন, এবং দেখুন তার ট্রাফিক আপনার টানেল দিয়ে বেরোয় কি না আর লক্ষ্যেরটি বেরোয় না। দুটোই ভেতরে থাকলে নীতি কাজ করছে ও লক্ষ্যটি বাদ পড়েছে; কোনোটিই না বেরোলে টানেল নিজেই ভুল এবং অ্যাপ-তালিকা সমস্যা নয়।
তারপর ঠিক করুন তিনটি জিনিসের কোনটি আপনি সত্যিই বানাচ্ছেন। অ্যাপভিত্তিক টানেল হল builder API, তালিকাটি আপনার প্রোফাইলের অংশ। ডিভাইস ফায়ারওয়াল হল প্যাকেট হ্যান্ডলিং এবং একটি জীবনচক্র যা আপনি রক্ষা করতে পারেন। অন্যের VPN বদলানো মোটেই সমর্থিত পথ নয়, আর সেখানে সৎ উত্তর হল সেটিংটি ওই পণ্যের।