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

ধাপ 1: কোন ক্লায়েন্ট ইগ্রেসের মালিক তা খুঁজুন

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

ip route get 1.1.1.1
ip route show default
route print

কিছু ক্লায়েন্ট ডিফল্ট রুট একেবারেই বদলায় না; তারা দুটি অর্ধ যোগ করে, একটি ঠিকানা-স্থানের নিচের অর্ধের জন্য আর একটি উপরের অর্ধের জন্য, যা একসাথে সবকিছু ঢেকে দেয়। এতে মূল ডিফল্ট রুটটি দৃশ্যমান থাকে আর হাতে মেরামত সঠিক দেখায়, অথচ ট্রাফিক তখনও টানেল দিয়েই বেরোয়। শুধু ডিফল্ট এন্ট্রির উপস্থিতি নয়, মেট্রিক ও প্রিফিক্সের দৈর্ঘ্য পড়ুন।

থামুন, যদি দুই ক্লায়েন্ট একই মেট্রিক দিয়ে একই প্রিফিক্স দাবি করে। কার্নেল একটি বেছে নেবে, আর অন্যটি কিছুই বহন না করেও সংযুক্ত দেখাবে।

ধাপ 2: রিজলভার ও ওভারল্যাপিং প্রিফিক্স পরীক্ষা করুন

DNS হলো দ্বিতীয় সংঘর্ষ, আর এটি একটি আলাদা উপসর্গ তৈরি করে: নাম ব্যর্থ হয় অথচ ঠিকানা কাজ করে। প্রতিটি ক্লায়েন্ট নিজের রিজলভার চাপিয়ে দেয়, আর পরের কোয়েরিগুলোর জন্য শেষ লিখনকারীই জেতে। ক্লায়েন্টের সেটিংস পৃষ্ঠা পড়ার বদলে রিজলভার সার্ভিসকে জিজ্ঞাসা করুন প্রতিটি লিংকে এটি কী ব্যবহার করে।

resolvectl status
Get-DnsClientServerAddress
dig +short intranet.corp.example

তারপর দুই নেটওয়ার্কের ব্যবহৃত প্রাইভেট প্রিফিক্স মেলান। যদি দুই পক্ষই একই রেঞ্জ থেকে বরাদ্দ করে, কোনো ক্লায়েন্ট-পক্ষ ব্যবস্থা এটি ঠিক করবে না, কারণ মেশিন বলতে পারে না কোন 10.0.0.0/8 গন্তব্য কোন টানেলের। এক পক্ষকে পুনঃসংখ্যায়িত বা অনূদিত করতে হবে, আর এটি নেটওয়ার্ক মালিকদের সঙ্গে আলোচনা, কনফিগারেশন বদল নয়। ওভারল্যাপই সেই একমাত্র সংঘর্ষ যেখানে সৎ উত্তর হলো ডিজাইনই বদলাতে হবে।

প্রিফিক্সগুলো ওভারল্যাপ করলে এখানেই থামুন। এই তালিকার পরের সবকিছু ধরে নেয় সেগুলো ওভারল্যাপ করে না।

ধাপ 3: টিকিয়ে রাখা যায় এমন বিচ্ছিন্নকরণ প্যাটার্ন বেছে নিন

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

sudo ip netns add vpn2
sudo ip netns exec vpn2 ip link show
sudo ip netns exec vpn2 curl -sI https://intranet.corp.example/

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

একটি প্যাটার্ন বেছে নিন আর কেন তা লিখে রাখুন। একটি অ্যাপ্লিকেশনের জন্য নেমস্পেস আর বাকিগুলোর জন্য স্প্লিট টানেল মেশানো মূল সংঘর্ষটিকে আরও কঠিন ডিবাগযোগ্য রূপে ফিরিয়ে আনে।

ধাপ 4: একই সেশনে দুই নেটওয়ার্ক যাচাই করুন

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

curl -sI https://intranet.corp.example/
curl -sI https://files.personal.example/
ip route get 10.20.30.40

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

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

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