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

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

ক্লায়েন্ট নিয়ম ইনস্টল করে, কার্নেল সিদ্ধান্ত নেয়

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

এই কারণেই একটি স্প্লিট টানেল ইচ্ছামতো দেখাতে পারে। একটি অ্যাপ্লিকেশনের দুটি গন্তব্য আলাদা পথ নিতে পারে শুধু এই কারণে যে একটি প্রিফিক্স অন্যটির চেয়ে সরু।

একই সিদ্ধান্ত প্রতি প্ল্যাটফর্মে বিদ্যমান, যদিও নামগুলো বদলায়। Windows সিদ্ধান্তটি তার ফিল্টার প্ল্যাটফর্মে ঠেলে দেয়, Android তার VPN পরিষেবার মাধ্যমে প্রতি-অ্যাপ অনুমোদনতালিকা প্রকাশ করে, আর macOS টানেলটি এমন একটি ডিভাইসে যুক্ত করে যা এখনও রাউটিং টেবিল মেনে চলে। Microsoft-এর রাউটিং নোট Windows ক্ষেত্রের জন্য পড়ার মতো, আর একটি প্ল্যাটফর্মের জন্য লেখা গাইড খুব কমই অপরিবর্তিতভাবে অন্যটিতে যায়।

প্রতি-অ্যাপ বাইন্ডিং আর গন্তব্য প্রিফিক্স আলাদা হাতিয়ার

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

নামভিত্তিক নীতিতে কোনো পদ্ধতিই সাহায্য ছাড়া টেকে না। বড় সাইটগুলোর ঠিকানা কনটেন্ট নেটওয়ার্ক জুড়ে ঘোরে, তাই একটি হোস্টনামকে কয়েকটি প্রিফিক্সে পিন করা এমন নিয়ম তৈরি করে যা চুপচাপ মেলা বন্ধ করে। যে নীতিকে নাম অনুসরণ করতে হবে তার স্ট্যাটিক রুটের বদলে একটি রেজলভার-সচেতন উপাদান দরকার।

DNS আর কিল সুইচ নিজেদের নিয়ম মেনে চলে

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

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

দুই দিক থেকেই বিভাজন যাচাই করুন

অন্তর্ভুক্ত পথ আর বাদ দেওয়া পথ আলাদাভাবে পরীক্ষা করুন, এবং ফলাফল বিচার করুন ইন্টারফেস নাম দিয়ে, কোনো প্রকাশ্য ঠিকানা দিয়ে নয়। এই কমান্ডগুলো ধরে নেয় টানেল ডিভাইস আগেই চালু থাকা একটি Linux হোস্ট। 203.0.113.10-কে এমন গন্তব্য দিয়ে বদলান যা আপনার নীতি ভেতরে রুট করে, আর 198.51.100.25-কে এমনটি দিয়ে যা বাইরে পাঠায়।

ip route get 203.0.113.10
ip route get 198.51.100.25
resolvectl query intranet.example.com
curl -s --interface tun0 https://example.com -o /dev/null -w '%{http_code}\n'

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

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

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