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

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

একটি নেটওয়ার্ক আপনার ওপর দুটি উপায়ে প্রভাব ফেলতে পারে

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

পথের ওপর থাকা সরঞ্জামের দ্বিতীয় ক্ষেত্রে প্রভাব ফেলতে আপনার কী-এর দরকার নেই। তার দরকার শুধু এই যে আপনার এন্ডপয়েন্ট একটি রুট, একটি রিজলভার বা এমন একটি নীতি-নিয়ম গ্রহণ করবে যা একটি রুট তৈরি করে।

expected:  app -> tunnel device -> encapsulation -> internet
observed:  app -> wlan0        -> plaintext     -> internet

টানেল তৈরি হওয়ার আগেই একটি রুট কোথা থেকে আসতে পারে

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

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

IPv6 আলাদা করে দেখা দরকার, কারণ রাউটার বিজ্ঞাপনগুলো ডিফল্ট রুট বহন করে DHCPv4 অপশনের চেয়ে ভিন্ন কোডের মধ্য দিয়ে। যে পরীক্ষা কেবল v4 টেবিল দেখে, সেটি এটি ঢাকতে পারে না।

কার্নেল আসলে যে পথ বেছে নেয় তা যাচাই করুন

রুট লুকআপের উত্তর পাওয়া যায়, তাই স্ট্যাটাস লাইট থেকে অনুমান না করে সেগুলোকেই জিজ্ঞাসা করুন। নিচের কমান্ডগুলো একটি গন্তব্যের জন্য বেছে নেওয়া রুট ও সোর্স দেখায়, সঙ্গে সেই নিয়মগুলোও যা মূল টেবিলকে অতিক্রম করতে পারে। সংযুক্ত থাকার সময় চালান এবং আবার পুনঃসংযোগের পরেও চালান, কারণ লিজ নবায়ন উত্তরটি বদলে দিতে পারে।

ip route get 203.0.113.10
ip route show table all | grep -E '^(default|203\.0\.113)'
ip rule show
resolvectl query example.com

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

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

প্রয়োগ কোথায় থাকা উচিত তা ঠিক করুন

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

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

প্রতিটি ক্লায়েন্ট আপগ্রেড ও প্রতিটি নেটওয়ার্ক পরিবর্তনের পরে লুকআপ কমান্ডগুলো আবার চালান, এবং সর্বশেষ রেকর্ড করা আউটপুটের সঙ্গে তুলনা করুন। রুট টেবিলই প্রয়োগের সীমানা, তাই এটিকেই সীমানা হিসেবে গণ্য করুন।

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