উত্তরটি টানেল দিয়ে নয়, LAN দিয়ে বেরোয়: কেন এবং কীভাবে
টানেল দিয়ে আসা অনুরোধের অর্থ এই নয় যে উত্তরও একই পথে ফিরবে। Linux গন্তব্য খোঁজে, আর সাধারণত স্থানীয় সাবনেটই জিতে যায়।
গেটওয়ে দিয়ে প্রকাশিত একটি সার্ভিস ইন্টারনেটের বেশিরভাগ জায়গা থেকে কাজ করে এবং একটি অফিস থেকে ব্যর্থ হয়। কেউ টানেল পরীক্ষা করে, অনুরোধ আসতে দেখে, আর ধরে নেয় উত্তরটি অবশ্যই একই পথে ফিরে যাচ্ছে। Linux এভাবে কাজ করে না, এবং টানেল যতই পরীক্ষা করা হোক উত্তর বদলাবে না। উত্তরটি গন্তব্য অনুযায়ী রাউট হয়, আর ওই একটি ব্যর্থ কলকারী এমন একটি সাবনেটে আছে যা হোস্ট ইতিমধ্যেই সরাসরি পৌঁছায়।
বহির্গামী প্যাকেট আসলে কী ঠিক করে
কার্নেল প্যাকেটের গন্তব্যের জন্য একটি রুট খোঁজে, অগ্রাধিকার ক্রমে নীতি-নিয়ম দেখে এবং তারপর যে নিয়ম মেলে সেই নিয়মের বাছাই করা টেবিল দেখে। প্যাকেট যে ইন্টারফেস দিয়ে এসেছে তা কোনো ভূমিকা রাখে না, যদি না সেটিকে গুরুত্বপূর্ণ করতে কোনো নিয়ম বা মার্ক লেখা হয়। এটি এই হোস্টের রাউটিং-সংক্রান্ত সত্য, টানেলের কোনো ত্রুটি নয়।
তাই টানেলে পাওয়া অনুরোধ এমন উত্তর তৈরি করতে পারে যা ফিজিক্যাল ইন্টারফেস দিয়ে বেরোয়, এবং কোনো ডিভাইস ত্রুটি না জানিয়েই প্রবাহ একমুখী হয়ে যায়। টানেল সম্পর্কে সিদ্ধান্তে পৌঁছানোর আগে দুই দিকই পরীক্ষা করুন। ভুল দিকে বেরোনো উত্তর টানেলের কাউন্টার থেকে হারিয়ে যায়, তাই কিছু পাঠানো হয়েছে কি না নিয়ে দুই প্রান্ত একমত হয় না। কোনো নিয়মে হাত দেওয়ার আগে কোন কাউন্টার বদলেছে তা লক্ষ করুন।
স্থানীয় সাবনেট কেন জেতে
স্থানীয় নেটওয়ার্কে ঠিকানা থাকা হোস্টের প্রধান টেবিলে সেই প্রিফিক্সের জন্য একটি সংযুক্ত রুট থাকে, আর সংযুক্ত রুট হলো সরাসরি মিল। কলকারী যখন একই সাবনেট থেকে আসে, তখন টানেল বিবেচনার আগেই অনুসন্ধান স্থানীয় লিংক খুঁজে পায়।
এই অসমতাই রোগনির্ণয়কে বিভ্রান্তিকর করে তোলে। বৃহত্তর ইন্টারনেটের কলকারীরা কাজ করে কারণ তারা কোনো স্থানীয় রুটের সঙ্গে মেলে না, অথচ অফিস প্রিফিক্স ভাগ করা একমাত্র কলকারীই ব্যর্থ হয়, আর ঠিক সেই কলকারী দিয়েই কেউ পরীক্ষা করে।
পিয়ার কভারেজ আর ইনস্টল করা রুট এক নয়
টানেলের দিকে, একটি পিয়ারের অনুমোদিত রেঞ্জ বলে দেয় টানেলে কী পাঠানো যাবে এবং সেখান থেকে কোন উৎস গ্রহণ করা হবে। স্থানীয় রাউটিং টেবিল প্যাকেট কোথায় পাঠাবে, সে সম্পর্কে তারা কিছুই বলে না।
যদি টানেল টুলটি হোস্টে ডিফল্ট রুট ইনস্টল করে, তবে এটি সম্পর্কহীন ট্রাফিককে পার্শ্বক্ষতি হিসেবে টানেলে টেনে নিতে পারে। যেখানে পরিবর্তে একটি নীতি-নিয়মই সিদ্ধান্তটি নেওয়া উচিত, সেখানে টুলটির রুট-ইনস্টল করার অপশনটি ঠিক এটা ঠেকানোর জন্যই আছে, আর ঠিকানা, কী এবং এন্ডপয়েন্ট সেটিংস আগের মতোই থাকে। সুবিধার জন্য যোগ করা ডিফল্ট রুট হলো হোস্টের নিজের স্থানীয় নেটওয়ার্ক হারানোর একটি সাধারণ উপায়।
উৎস ঠিকানা দিয়ে টেবিল বাছুন
উৎসভিত্তিক নিয়ম সার্ভিস ঠিকানা থেকে আসা উত্তরগুলোকে এমন একটি ব্যক্তিগত টেবিলে পাঠায় যার ডিফল্ট হলো টানেল, বাকি সবকিছু প্রধান টেবিলই ব্যবহার করে। স্থানীয়ভাবে অব্যবহৃত টেবিল ও অগ্রাধিকার নম্বর বাছুন, এবং কিছু ঢোকানোর আগে বিদ্যমান নিয়মগুলো পড়ুন। সংরক্ষিত ফাইল নয়, চলমান নিয়মগুলো পড়ুন, কারণ রিবুটের পরে দুটো আলাদা হতে পারে।
ip -6 route add default dev wg0 table 200
ip -6 rule add priority 32000 from 2001:db8:aa::20/128 lookup 200
ip -6 rule add priority 32001 from 2001:db8:aa::20/128 unreachableশেষ লাইনটি অনুপস্থিত রুটকে স্থানীয় লিংকে ফিরে যাওয়ার বদলে দৃশ্যমানভাবে ব্যর্থ করে। উৎসটি সত্যিই হোস্টে অ্যাসাইন করা থাকতে হবে, আর সাধারণ স্থানীয় ও প্রধান অনুসন্ধানকে তাদের আগের অবস্থানেই থাকতে হবে। নিয়মটি উৎস দিয়ে টেবিল বাছাই করে; এটি টেবিলের মধ্যে প্রিফিক্স দৈর্ঘ্য তুলনা করে না।
আগে পথ, তারপর সার্ভিস নিশ্চিত করুন
ক্যাপচার থেকে অনুমান না করে কার্নেলকেই জিজ্ঞাসা করুন সে কী করত, উৎস নির্বাচক হিসেবে সার্ভিস ঠিকানা ব্যবহার করে। এখানে ভুল উত্তর একটি সম্পূর্ণ প্যাকেট ট্রেস বাঁচায়।
ip -6 route get 2001:db8:bb::30 from 2001:db8:aa::20আউটপুটে টানেলের নাম থাকা উচিত। তারপর যে উৎসে আপনি হাত দেননি তা পরীক্ষা করুন এবং নিশ্চিত করুন সেটি এখনও স্থানীয় লিংকই নেয়, যাতে পরিবর্তনটি একটিমাত্র ঠিকানার মধ্যে সীমিত থাকে। আরও বিস্তৃত নির্বাচক মূল অভিযোগ সম্পর্কে কিছুই প্রমাণ করত না।
এটি যা ঠিক করে না
গেটওয়েতে ফরওয়ার্ডিং, ফায়ারওয়াল নিয়ম এবং ICMPv6 আচরণ আগের মতোই রাখুন, কারণ উৎস-রুট এগুলোর কোনোটিই প্রতিস্থাপন করে না। অনুপস্থিত Packet Too Big বার্তা কোন টেবিল অনুসন্ধান জিতুক না কেন, বড় উত্তরগুলো এখনও ভেঙে দেয়। রাউটিং নিয়ম যোগ করার আগে ওটি ঠিক করুন, নইলে পরিবর্তনের পরেও উপসর্গ টিকে থাকবে।
এর যেকোনোটা প্রয়োগ করার আগে প্রকাশের মডেল নিশ্চিত করুন। যে রিভার্স প্রক্সি নিজের ব্যাকএন্ড সংযোগ খোলে সে নিজের উৎস উপস্থাপন করে এবং কলকারীকে সংরক্ষণ করে না, তাই ওই ডিজাইনে এই ত্রুটি ঘটতে পারে না। সেখানে নিয়ম প্রয়োগ করলে এমন একটি রাউটিং ব্যতিক্রম যোগ হবে যা কিছুই সমাধান করে না এবং আসল কারণ লুকায়।
সবশেষে, নিয়মের নম্বর ও টেবিলটি হোস্টের কনফিগারেশন ম্যানেজমেন্টে লিখুন। হাতে যোগ করা নীতি-নিয়ম পরের পুনর্নির্মাণে হারিয়ে যায়, আর অফিসের কলকারী একই অভিযোগ নিয়ে ফিরে আসে।