OpenVPN DHCP নবায়নের পর ড্রপ করে: এন্ডপয়েন্ট রুট ধরে রাখুন
একটি DHCP নবায়ন টানেলের এন্ডপয়েন্টকে পুরোনো গেটওয়েতে রেখে দিতে পারে, ফলে হাফ-ডিফল্ট রুটগুলো টানেলকে গ্রাস করে। মেট্রিক নয়, ওই রুটের মালিকানা ঠিক করুন।
টানেল সংযুক্ত হয়, তারপর অ্যাক্সেস লিংকে একটি লিজ নবায়ন সেটিকে মেরে ফেলে, আর লগ রুট নয়, টাইমআউটকে দোষ দেয়। VPN কনফিগারেশনে কিছুই বদলায়নি, আর সেটাই সূত্র: এর বাইরের কিছু বদলেছে। একটি DHCP ঘটনা ঠিকানা বা গেটওয়ে নতুন করে লিখেছে, আর টানেলের এন্ডপয়েন্টকে পৌঁছনোর যোগ্য রাখা হোস্ট রুটটি এখন এমন এক পরবর্তী হপের দিকে দেখাচ্ছে যা আর নেই। এটি রাউটিং সমস্যা হওয়ার আগেই একটি মালিকানার সমস্যা।
হাফ-ডিফল্ট রুটের সঙ্গে উপসর্গটি মিলিয়ে দেখুন
redirect-gateway def1 সহ OpenVPN ডিফল্ট রুট প্রতিস্থাপনের বদলে 0.0.0.0/1 এবং 128.0.0.0/1 ইনস্টল করে। দুটো মিলে পুরো ঠিকানার জগৎ ঢেকে দেয়, এবং শুধু প্রিফিক্স দৈর্ঘ্যেই তারা 0.0.0.0/0-কে হারিয়ে দেয়। তাই আরও নির্দিষ্ট মিল ছাড়া যেকোনো গন্তব্য টানেলে ঢুকে পড়ে।
এন্ডপয়েন্টের একটি ব্যতিক্রম দরকার। হাফ-ডিফল্টগুলো বসার আগে OpenVPN মূল অ্যাক্সেস গেটওয়ে দিয়ে সার্ভারের ঠিকানার জন্য একটি হোস্ট রুট যোগ করে, যাতে এনক্যাপসুলেটেড প্যাকেট বেরোতে পারে। যখন সেই ব্যতিক্রমটি হারিয়ে যায়, বা এমন পরবর্তী হপ ধরে রাখে যা আর নেই, তখন টানেলের নিজের বাইরের প্যাকেটগুলো একটি হাফ-ডিফল্টের সঙ্গে মিলে যায় এবং টানেলে ফেরত পাঠানো হয়। ফল হলো এমন একটি সংযোগ যা পরের কিপঅ্যালাইভ বা হ্যান্ডশেকে মরে যায়, আর লগে রাউটিং ত্রুটির মতো কিছুই থাকে না।
অন্য কিছু ছোঁয়ার আগে টেবিলের আকৃতি নিশ্চিত করুন। ip route show-এ দুই অর্ধেক এবং সার্ভার ঠিকানার জন্য একটি হোস্ট রুট থাকা উচিত; হোস্ট রুট অনুপস্থিত থাকলে তদন্তের বাকিটির একটি স্পষ্ট সূচনা বিন্দু আছে।
মেট্রিক না বদলেও হাফ-ডিফল্টগুলো কেন জেতে
কম মেট্রিক দীর্ঘতর প্রিফিক্সকে হারাতে পারে না। /1 রুটগুলো জেতে, কারণ কার্নেল প্রথমে সবচেয়ে নির্দিষ্ট রুট মেলায়, তাই ডিফল্ট রুটে মেট্রিক বাড়ালে টানেলমুখী ট্রাফিক কোথায় যাবে তা নিয়ে কিছুই বদলায় না। মেট্রিকের পিছনে ছোটা এই রোগনির্ণয়ে সবচেয়ে সাধারণ ভুল মোড়।
ip route get 203.0.113.10 দিয়ে নির্বাচন পরীক্ষা করুন, আসল সার্ভার ঠিকানা বসিয়ে। উত্তরটি জানায় কোন ইন্টারফেস ও পরবর্তী হপ কার্নেল সত্যিই ব্যবহার করত, আর এটি টেবিল পড়ে তার ওপর যুক্তি করার চেয়ে বেশি তথ্য দেয়।
কমান্ডটি টানেল শুরুর আগে, চালু থাকার সময় এবং লিজ ঘটনার পরে চালান। একটি কমান্ড থেকে তিনটি উত্তর, আর বিচ্যুতির বিন্দুটি দৃশ্যমান হয়ে ওঠে।
একটি নয়, তিনটি স্ন্যাপশট নিন
অ্যাক্সেস ঠিকানা, অ্যাক্সেস গেটওয়ে, এন্ডপয়েন্ট গন্তব্য, নির্বাচিত রুট এবং যেকোনো পলিসি নিয়ম তিনটি মুহূর্তে সংগ্রহ করুন: অ্যাক্সেস লিংক কনফিগার হওয়ার পরে, VPN সংযুক্ত হওয়ার পরে, এবং লিজ বা ক্যারিয়ার ঘটনার পরে। প্রতিটি স্ন্যাপশট কয়েকটি কমান্ড, আর তারা একসঙ্গে না থাকলে কোনো অর্থই দেয় না। ব্যর্থতার পরে একটি স্ন্যাপশট পরিবর্তনটি নয়, অবস্থাটি লিপিবদ্ধ করে। কমান্ডগুলো একটি ছোট স্ক্রিপ্টে লিখুন, যাতে প্রতিটি স্ন্যাপশট একইভাবে নেওয়া হয়।
স্ন্যাপশটগুলো সময়চিহ্নসহ একটি ফাইলে রাখুন, কারণ পরে আকর্ষণীয় প্রশ্নটি হলো ক্রম। DHCP ঘটনাটি OpenVPN তার রুট নবায়নের আগে না পরে এসেছিল? উত্তরটিই ঠিক করে কে এটা সারাতে হবে। ভুল ঘড়ির সময়চিহ্ন না থাকার চেয়েও খারাপ, তাই এটি রুট টেবিলের মালিক হোস্ট থেকে নিন।
এন্ডপয়েন্ট যখন ঠিকানার বদলে নাম হিসেবে কনফিগার করা, তখন প্রতিটি স্ন্যাপশটে সেটিও রিজলভ করুন। অ্যাক্সেস লিংকে একটি DNS পরিবর্তন কোনো রুট স্পর্শ না করেই এন্ডপয়েন্টকে সরিয়ে দিতে পারে।
কোন উপাদান ব্যতিক্রমটি নবায়ন করে তা ঠিক করুন
dhcpcd সিস্টেমে হুকগুলো হুক ডিরেক্টরি এবং এক্সিট হুক থেকে চলে, আর ম্যানেজার মোড পরিধিতে প্রতি-ইন্টারফেস মোড থেকে আলাদা। হুক যা-ই করুক, তা আইডেম্পোটেন্ট হতে হবে, কারণ নবায়নগুলো দলে দলে আসতে পারে।
নির্ভরযোগ্য মালিক হলো সেই ইন্টিগ্রেশন যা আগেই দুই দিক জানে: একটি নেটওয়ার্ক ম্যানেজার যা VPN সংযোগ পরিচালনা করে, অথবা অ্যাক্সেস লিংক ওঠার পরে সাজানো একটি ইউনিট। হুক যোগ করা একটি স্ট্যাটিক রুট পরের গেটওয়ে পরিবর্তন পর্যন্ত কাজ করে, তারপর ঠিক একইভাবে ব্যর্থ হয়। আপনি যদি সত্যিই হুক ব্যবহার করেন, তবে আজ যে গেটওয়ে দেখেছেন তা হার্ডকোড না করে রানটাইমে বর্তমান গেটওয়ে পড়তে দিন।
মালিককে কনফিগারেশনের ভেতরে লিখে রাখুন। পুনঃসংযোগ ডিবাগ করা পরের ব্যক্তিকে জানতে হবে যে ব্যতিক্রম রুটের দায়িত্ব VPN নয়, একটি হুকের।
শুধু পুনঃসংযোগ নয়, লাইফসাইকল পরীক্ষা করুন
dhcpcd -n eth0 দিয়ে বা লিজ ছেড়ে দিয়ে আবার নিয়ে নবায়নে বাধ্য করুন, তারপর এন্ডপয়েন্টের জন্য আবার ip route get দেখুন। এটি দুবার করুন, কারণ দ্বিতীয় দফা সেসব হুক ধরে যা ডুপ্লিকেট রুট যোগ করে। তারপর রিবুট করুন, কারণ স্থায়িত্ব সঠিকতার চেয়ে আলাদা একটি গুণ।
যে টানেল একটি নবায়ন ও রিবুট টিকে যায়, তার একটি মালিক ও কাজ করা ব্যতিক্রম আছে। যেটি শুধু হাতে রিস্টার্ট টিকে যায়, তার কোনোটিই নেই, আর আপনি যা সময় নির্ধারণ করতে পারবেন না সেই পরের ঘটনাতেই সেটি ব্যর্থ হবে।