প্যাকেজ বাদ দেওয়া ব্লক নয়, রাউটিং নির্দেশ, তাই VPN সংযুক্ত হওয়ার পর যে পৃষ্ঠাগুলো লোড হয় সেগুলো প্রত্যাশিত, ব্যর্থতার প্রমাণ নয়। বাদ দেওয়া অ্যাপটিকে ব্লক করার বদলে টানেল থেকে সরায়, আর সাধারণ নেটওয়ার্ক তার ট্র্যাফিক বহন করে। এখানে দুটি আলাদা নীতি মেলে: একটি প্রসেস বেছে নেয়, অন্যটি গন্তব্য বেছে নেয়. এই ক্রমে সেগুলো পড়লে বোঝা যায় কেন সংযুক্ত আইকন আর কাজ করা অ্যাপ পরস্পরবিরোধী নয়।

কেন বাদ দেওয়া নেটওয়ার্ক খোলা রাখে

VpnService.Builder হয় অনুমোদন তালিকা, নয় বর্জন তালিকা নেয়, দুটোই কখনও নয়। অনুমোদন তালিকার প্যাকেজগুলোই কেবল টানেল দিয়ে যায়। বর্জন তালিকা তা উল্টে দেয়: তালিকাভুক্তগুলো ছাড়া প্রতিটি প্যাকেজ টানেল ব্যবহার করে, আর তালিকাভুক্তগুলো ভৌত পথ ধরে রাখে। অনুমোদন তালিকায় না থাকা প্যাকেজও টানেলের বাইরে থাকে, তাই ওই মোডে বেশিরভাগ অ্যাপের জন্য বাদ দেওয়াই স্বাভাবিক অবস্থা।

এতে স্থানীয় বর্জন এন্ট্রি ফায়ারওয়াল নিয়ম নয়, রাউটিং সিদ্ধান্ত হয়ে যায়। যদি অ্যাপকে কোনো হোস্টে পৌঁছাতে বাধা দেওয়াই দরকার হয়, তবে টানেলকে সেটি ঢাকতে হবে এবং সার্ভার বা স্থানীয় নীতিকে ট্র্যাফিক প্রত্যাখ্যান করতে হবে। অ্যাপকে টানেল থেকে সরালে কেবল তার প্যাকেট কোন ইন্টারফেস বহন করবে তা বদলায়।

Play Store-এর ঘটনা হলো সাধারণ ইচ্ছাকৃত উদাহরণ। স্টোর প্যাকেজ বাদ দিলে, VPN প্রস্থান যখন স্থানান্তরে বাধা দেয় তখন ডাউনলোডগুলো অন্তর্নিহিত সংযোগ ব্যবহার করতে পারে, আর এটি দেখায় বাদ দেওয়া মানে ব্লক নয়, পাশ কাটানো।

একটি প্রোফাইল, একটি তালিকা

দুটি কলই ব্যবহার করলে বিল্ডার ব্যতিক্রম ছোড়ে, তাই সামনে থাকা প্রোফাইল হয় অনুমোদন তালিকা, নয় বর্জন তালিকা। এই একক তথ্যই পরের প্রতিটি পর্যবেক্ষণ কীভাবে পড়তে হবে তা ঠিক করে। রাউটিং টেবিলের আগে কোড বা ব্যবস্থাপিত কনফিগারেশন দেখুন, কারণ তালিকাই ঠিক করে বাকি আউটপুটের অর্থ কী। সংকর প্রোফাইল এমন অবস্থা নয় যা আপনি দেখতে পাচ্ছেন।

এই পার্থক্য আরও বলে দেয় নতুন ইনস্টল করা অ্যাপ কী করবে। অনুমোদন তালিকায় কেউ যোগ না করা পর্যন্ত সেটি বাইরে থাকে, আর বর্জন তালিকায় ডিফল্টভাবে টানেলে যোগ দেয়।

ব্যবস্থাপিত কনফিগারেশন একই পছন্দ ভিন্ন কী নামে দেখায়, আর কিছু কনসোল এটিকে তালিকা নয়, বরং প্রতি-অ্যাপ VPN মোড বলে বর্ণনা করে। আচরণ তবুও ওই দুই কলে নেমে আসে, তাই লেবেল বিশ্বাস না করে সেটিংটিকে প্যাকেজ তালিকা পর্যন্ত অনুসরণ করুন। লেবেল আর তালিকা অমিল হলে তালিকাই জেতে।

UID নিয়ম ধরে টানেল টেবিলে যান

Android প্রতিটি অ্যাপকে তার নিজের Linux ব্যবহারকারী আইডি দেয়, আর VPN সেবা UID পরিসরের সঙ্গে মেলে এমন নীতি নিয়ম ইনস্টল করে। মেলা ট্র্যাফিক এমন রাউটিং টেবিলে পাঠানো হয় যার ডিফল্ট রুট tun ডিভাইসের দিকে নির্দেশ করে। টেবিল নম্বর প্রতিটি VPN ইনস্ট্যান্সের জন্য বরাদ্দ হয়, তাই পুনঃসংযোগের পর বা দ্বিতীয় VPN প্রোফাইল তৈরির পর তা বদলে যায়।

নিয়মের আউটপুটই মানচিত্র। প্রতিটি লাইন একটি লুকআপ টেবিলের নাম বলে, আর সেই টেবিলে থাকা ডিফল্ট রুট ঠিক করে মেলা প্যাকেট টানেলে ঢুকবে কি না।

adb shell ip rule show
adb shell ip route show table all
adb shell cmd package list packages -U | grep <package>

UID পেতে প্রথমে তৃতীয় কমান্ডটি চালান, তারপর যে নিয়মের পরিসরে এটি পড়ে সেটি খুঁজুন। সেই নিয়ম একটি টেবিল নম্বরের দিকে নির্দেশ করে, আর ip route show table <n> ওই নম্বর দিয়ে দেখায় tun ডিভাইস হয়ে কোনো ডিফল্ট রুট আছে কি না। টেবিলে ডিফল্ট না থাকলে অ্যাপ নির্বাচিত হয়েছে কিন্তু পথ নেই, যা ভিন্ন ব্যর্থতা।

এই কমান্ডগুলোর জন্য ডিবাগযোগ্য বিল্ড বা এমন ডিভাইস দরকার যেখানে adb shell নেটওয়ার্ক অবস্থা পড়তে পারে। উৎপাদন হ্যান্ডসেটে প্যাকেজ ম্যানেজার তবুও উত্তর দেয়, কিন্তু রাউটিং পরিদর্শন প্রত্যাখ্যাত হতে পারে, তাই যা পারেন লিখে রাখুন আর বাকিটা অযাচাইকৃত ধরুন।

রুট প্রিফিক্স দাবি করে, অ্যাপ নয়

Builder.addRoute টানেলের জন্য গন্তব্য প্রিফিক্স দাবি করে। যে প্রোফাইল কেবল 10.0.0.0/8 যোগ করে তা ওই প্রিফিক্স টানেল দিয়ে পাঠায় আর বাকি প্রতিটি গন্তব্য ভৌত পথে রাখে। এটি সাধারণ বিভক্ত টানেলিং, এবং নিয়মগুলো কোন অ্যাপ বেছেছে তার উপর নির্ভর করে না।

সার্ভার-পাঠানো কনফিগারেশন একই মডেল প্রতিফলিত করে। আলাদা রুট পুশ প্রিফিক্স যোগ করে, আর redirect-gateway নির্দেশ ডিফল্ট রুট বদলে দিয়ে টানেল যে অ্যাপ ঢাকে তাদের জন্য সবকিছু ধরে নেয়। ওই নির্দেশ সরালে ডিভাইসে কোনো পরিবর্তন ছাড়াই কাজ করা টানেল একটি সাবনেটে সঙ্কুচিত হতে পারে।

অস্বাভাবিক গেটওয়ে বা মেট্রিক কোয়ালিফায়ারসহ পাঠানো রুটও ইনস্টল হতে ব্যর্থ হতে পারে। সাধারণ প্রিফিক্স রূপ পছন্দ করুন আর ফরওয়ার্ডিং ও NAT সার্ভারকে সামলাতে দিন।

সেটিং বদলানোর আগে ছেদটা পড়ুন

টানেল ঢাকা প্রসেস ও দাবি করা গন্তব্যের ছেদ বহন করে। ঢাকা অ্যাপ প্রকাশিত প্রিফিক্সের বাইরের ঠিকানা চাইলে ভৌত নেটওয়ার্ক দিয়ে বেরোয়। বর্জিত প্যাকেজ ওই প্রিফিক্সের ভেতরের ঠিকানা চাইলেও বাইরে থাকে। কোনোটিই বাগ নয়; দুটোই দুটি নীতির নিজের কাজ করা।

প্রতি-অ্যাপ VPN সংশ্লিষ্ট অ্যাপকে সংযোগহীনও রেখে দিতে পারে। on-demand বন্ধ থাকলে আর টানেল ডাউন থাকলে অ্যাপটি প্রতি-অ্যাপ VPN-এ বাঁধা থাকে এবং কোনো ফলব্যাক নেই, যা নীতির অবস্থা নয়, বরং নষ্ট অ্যাপের মতো দেখায়। on-demand চালু করলে, বা ব্যবস্থাপনার মাধ্যমে সংযোগটি সরালে, তা বদলে যায়।

LayerWhat it selectsWhere to lookTypical mismatch
Package listProcessesBuilder calls or managed configurationApp excluded but expected to be blocked
UID policy ruleWhich table a UID usesip rule showTunnel icon on, app still on Wi-Fi
Routing tableDestinations for matched trafficip route show table <n>Covered app reaches only one subnet
Server pushPrefixes offered to the clientServer route configurationTunnel shrinks after a server edit

একবারে একটি অক্ষ নির্ণয় করুন। আগে অনুমোদন না বর্জন তা নিশ্চিত করুন, দ্বিতীয়ে ইনস্টল করা UID নিয়ম ও টেবিল পড়ুন, শেষে একই গন্তব্যে দ্বিতীয় অ্যাপ পরীক্ষা করুন। দ্বিতীয় অ্যাপ একটি অনুরোধেই প্রসেস নির্বাচনকে গন্তব্য নির্বাচন থেকে আলাদা করে।

ফলাফলটি অ্যাপ, গন্তব্য ও টেবিল নম্বর হিসেবে লিখে রাখুন। পরের পরিবর্তনকে এই ত্রয়ীই ধরে রাখতে হবে।

সম্পর্কিত নিবন্ধ