VPN ট্রাফিকে পলিসি রাউটিং কী বদলায় আর কী বদলায় না
রুল ঠিক করে কোন টেবিল দেখা হবে, তাই মেইন টেবিলের ডিফল্ট রুট প্রায়ই কিছু ব্যাখ্যা করে না। রুল যোগ করার আগে প্রায়োরিটি, মার্ক আর সোর্স একসাথে পড়ুন।
পলিসি রাউটিং সেই প্রশ্নের চেয়ে আলাদা প্রশ্নের উত্তর দেয় যা বেশিরভাগ ট্রাবলশুটিং নোট করে। মেইন টেবিল বলে গন্তব্য কোথায় যায়; পলিসি রুল বলে আদৌ কোন টেবিল দেখা হবে, আর তারা সেটি সোর্স ঠিকানা, একটি প্যাকেট মার্ক, অথবা প্যাকেট যে ইন্টারফেসে এসেছে তা থেকে ঠিক করতে পারে। যখন একটি টানেল অসামঞ্জস্যপূর্ণ আচরণ করে, তখন রুল সেটই প্রায়ই কারণ হয় এবং রাউটিং টেবিল প্রায়ই নয়।
রুল টেবিল বেছে নেয়, তারপর টেবিল রুট বেছে নেয়
প্রতিটি রুলে একটি প্রায়োরিটি, একটি মিলের শর্ত আর একটি লক্ষ্য টেবিল থাকে। কার্নেল প্রায়োরিটি ক্রমে রুলগুলো হাঁটে এবং প্রথম মিলে থেমে যায়, তারপর সেই টেবিলে সাধারণ দীর্ঘতম-প্রিফিক্স অনুসন্ধান করে। খালি টেবিলের দিকে নির্দেশ করা রুল পরের রুল যা বেছে নেয় তার দিকে নেমে যায়, আর এভাবেই যত্নে লেখা একটি রুল কিছুই করছে না বলে মনে হতে পারে।
এই কারণেই মেইন টেবিল ডাম্প করা একটি কাজ করা VPN ক্লায়েন্ট খুব কমই ব্যাখ্যা করে। ক্লায়েন্টরা সাধারণত কম প্রায়োরিটি নম্বরে রুল ঢোকায়, মেইন টেবিলের ডিফল্ট রুলের অনেক আগে, তাই প্যাকেট আপনার তাকিয়ে থাকা রুটে কখনো পৌঁছায় না। মেইন টেবিলে মেট্রিক কমানো ইতিমধ্যে সরিয়ে নেওয়া ট্রাফিকের জন্য কিছুই বদলায় না।
একটি রুল ইচ্ছাকৃতভাবে একটি প্রিফিক্সকে ব্ল্যাকহোল বা অপ্রাপ্য করতে পারে। কিছু ক্লায়েন্ট কিল সুইচ হিসেবে এমন রুল যোগ করে, আর তখন ড্রপটি কনফিগার করা টানেলের বদলে ভাঙা টানেলের মতো দেখায়।
রুল সেটটি তালিকা নয়, ক্রম হিসেবে পড়ুন
রুলগুলো তাদের প্রায়োরিটি ও তারা যে টেবিলের কথা বলে সেগুলোসহ ছাপুন, তারপর ডিফল্ট বা টানেল রুট বহনকারী প্রতিটি টেবিল ছাপুন। ক্রমটাই আসল অংশ, আর স্ক্রিনশট সাধারণত যে অংশটি বাদ দেয় সেটিই এটি:
ip rule show ip route show table all | sed -n '1,60p' ip route get 198.51.100.20 from 10.8.0.2 ip route get 198.51.100.20 from 10.8.0.2 mark 0x1
শেষ দুটি কমান্ডই তত্ত্বকে পর্যবেক্ষণে বদলায়, কারণ তারা জিজ্ঞেস করে কার্নেল সেই সোর্স ও সেই মার্কের জন্য কী করবে। মার্ক বদলালে উত্তর বদলালে, একটি মার্ক-ভিত্তিক রুল কাজ করছে এবং মার্ক বাদ দেওয়া যেকোনো পরীক্ষা ভিন্ন প্যাকেট পরীক্ষা করছে। বাইরের সংযোগটি নিজের জন্য একটি রুল দাবি করে। যে টানেল সব ট্রাফিক নিজের মধ্য দিয়ে রুট করে, তাকে অবশ্যই যে এন্ডপয়েন্ট ঠিকানায় সংযোগ করে তা বাদ দিতে হবে, নইলে এনক্রিপ্টেড প্যাকেটগুলো যে টানেল থেকে এইমাত্র বেরিয়েছে সেখানে ফিরে পাঠানো হয়। বেশিরভাগ ক্লায়েন্ট এই বাদ দেওয়াটি স্বয়ংক্রিয়ভাবে ঢোকায়, আর হাতে সম্পাদনা করা রুল সেটই সেই জায়গা যেখানে এটি হারিয়ে যায়।
মার্ক আর সকেট: ক্লায়েন্টরা ট্রাফিক ভাগ করার দুই উপায়
কিছু ক্লায়েন্ট ফায়ারওয়ালে প্যাকেট মার্ক করে এবং মার্কের সাথে মেলে এমন রুল যোগ করে। অন্যরা সকেট-স্তরের রাউটিং ব্যবহার করে, সংযোগের আগে সকেটে একটি রুট বসিয়ে। প্রথমটি ip rule-এ দেখা যায়; দ্বিতীয়টি যায় না, এবং সাধারণ অনুসন্ধানে এটি দেখা যাবে না।
যদি একটি পরীক্ষামূলক প্রোগ্রাম যে অ্যাপ্লিকেশনটির প্রতিনিধিত্ব করার কথা তার থেকে ভিন্ন আচরণ করে, তবে দেখুন অ্যাপ্লিকেশনটি মার্ক বসায় কি না বা ডিভাইসে বাঁধে কি না। প্রক্রিয়াটির নাম জানার পর সেই পার্থক্য রহস্য নয়, আর এটি ব্যাখ্যা করে কেন একই মেশিনে শেল থেকে curl আর ব্রাউজার ট্যাব আলাদা পথ নিতে পারে। দুই কৌশলই প্রশস্ত অর্থে পলিসি রাউটিং: তারা গন্তব্য ছাড়া অন্য কিছু দিয়ে পথ বেছে নেয়। কোনোটিই ট্রাফিক অনুমোদন করে না, আর কোনোটিই peer যে ফায়ারওয়াল রুল বা শংসাপত্র প্রত্যাশা করে তার বিকল্প নয়।
আরেকটি রুল যোগ করার আগে মালিকানা খুঁজুন
রুল কোনো কিছু ইনস্টল করে। একটি VPN ক্লায়েন্ট, একটি নেটওয়ার্ক ম্যানেজার আর হাতে লেখা স্ক্রিপ্ট প্রত্যেকে চালুর সময়ে রুল যোগ করতে পারে, আর পুনঃসংযোগের লজিক আগের সেটটি রেখে যেতে পারে। আগের প্রোফাইলের দুটি পুরোনো রুল প্রোফাইল মুছে ফেলার অনেক পরেও ট্রাফিক চালিয়ে যাবে।
প্রায়োরিটি আর আকৃতি দেখে বের করুন কোন প্রসেস রুলটির মালিক, আর দেখুন সেই মালিক প্রতিটি সংযোগে সেটটি আবার লেখে কি না। যদি লেখে, আজ যোগ করা হাতে লেখা রুল কাল অদৃশ্য হয়, আর সমাধানটি শেল হিস্ট্রি ফাইলে নয়, ক্লায়েন্টের কনফিগারেশনে। পরীক্ষার জন্য পুরো রুল সেট মুছে ফেলা একটি প্রলোভনজনক শর্টকাট যার খরচ অনুমেয়: এটি ক্লায়েন্টের নিজের টানেল চালু রাখতে প্রয়োজনীয় রুলগুলোও সরিয়ে দেয়। একবারে একটি রুল মুছুন, অথবা এমন মেশিনে পরীক্ষা করুন যা আপনি রিবুট করতে পারেন।
একটি নয়, দুটি ফ্লো দিয়ে পরিধি প্রমাণ করুন
একটি সংশোধন তখনই যাচাই হয় যখন একটি ফ্লো প্রভাবিত হওয়ার কথা এবং আরেকটি না হওয়ার কথা। এমন একটি গন্তব্য বেছে নিন যা পলিসি টানেলে রুট করে, আরেকটি যা বাইরে থাকতে হবে, তারপর দুটির জন্য অনুসন্ধান ও ক্যাপচার তুলনা করুন:
ip route get 198.51.100.20 from 192.0.2.44 ip route get 198.51.100.21 from 192.0.2.44 tcpdump -ni any host 198.51.100.21 and port 443
দুটি অনুসন্ধান ভিন্ন ইন্টারফেস ফেরালে রুলটি কিছু করছে। একই ইন্টারফেস ফেরালে রুলটি উদ্দেশ্যের চেয়ে বেশি প্রশস্তভাবে মিলছে, আর এটিই সেই ত্রুটি যা চুপচাপ একটি সম্পূর্ণ সাবনেটকে একটি অ্যাপ্লিকেশনের জন্য নির্দিষ্ট টানেল দিয়ে পাঠায়।
টিকিটে রুল প্রায়োরিটি ও মালিক সেবাটি দুটি পরীক্ষার ঠিকানাসহ লিখে রাখুন। তখন পরবর্তী ব্যক্তি উপসর্গের বর্ণনার বদলে একটি পুনরুৎপাদনযোগ্য জোড়া পায়, আর এক মিনিটেই বলতে পারে পলিসি রাউটিং এখনো কাজ করছে কি না।