কেন আপনার স্প্লিট-টানেল নিয়ম কোনো সেবার সাথে মেলা বন্ধ করল
নিয়মটি একটি প্রিফিক্স পিন করে আর সেবাটি সরে গেছে। অ্যাপটি আসলে যে গন্তব্য ব্যবহার করে তা পড়ুন, তারপর ব্যতিক্রম প্রশস্ত করার বদলে প্রক্রিয়াটি মেরামত করুন।
স্প্লিট টানেলিং সাধারণত দুইভাবে ব্যর্থ হয়। হয় যে ট্রাফিক টানেলের ভেতরে থাকা উচিত তা টানেলকে এড়িয়ে যায়, নয়তো যে ট্রাফিক বাইরে থাকা উচিত তা ভেতরে টেনে নেওয়া হয়। পুরোনো-নিয়মের ব্যর্থতা প্রথম ধরনের, এবং এটি বেশি বিভ্রান্তিকর, কারণ নিয়মটি ঠিক যেমন লেখা তেমনই প্রয়োগ হচ্ছে। যা বদলেছে তা হলো গন্তব্য: সেবাটি এখন এমন ঠিকানায় উত্তর দেয় যা নিয়ম কখনো নাম দেয়নি, আর টানেলে কিছুই ভুল নয়।
নিয়ম কী পিন করে আর DNS কী ফেরত দেয়
একটি স্প্লিট-টানেল নিয়ম গন্তব্য সম্পর্কে একটি স্থির বিবৃতি, সাধারণত প্রিফিক্স, রুট বা ঠিকানার তালিকা হিসেবে প্রকাশ করা হয়। পাঠানোর সময় প্যাকেটের গন্তব্যের বিপরীতে এটি মূল্যায়ন করা হয়। আর হোস্টনাম হলো একটি লুকআপ যা জীবনকাল ও ক্যাশসহ একগুচ্ছ ঠিকানা ফেরত দেয়, এবং উত্তর রিজলভার, কোয়েরি ধরন ও মিনিট অনুযায়ী ভিন্ন হতে পারে।
এই দুটি বস্তু কখনো একে অপরের সঙ্গে দরকষাকষি করে না। নিয়ম যে প্রিফিক্স পেয়েছে তা মেলাতেই থাকে, সেবা যে ঠিকানা দেয় তা বদলাতেই থাকে, আর তাদের মধ্যের ফাঁক নীরবে বাড়তে থাকে। এজন্যই উপসর্গটি কনফিগারেশন পরিবর্তনের পরে নয়, বরং প্রোভাইডার মাইগ্রেশন বা সার্টিফিকেট নবায়নের পরে দেখা যায়। কেউ টানেল সম্পাদনা করেনি, তাই কেউ টানেলের দিকে তাকায় না, আর রোগনির্ণয় নীতির বদলে অ্যাপ্লিকেশনের দিকে সরে যায়।
মিলটি ভাঙার তিনটি উপায়
স্পষ্ট ঘটনা হলো সরে যাওয়া সেবা: অপারেটর এটিকে নতুন ঠিকানা দিয়েছে, DNS অনুসরণ করেছে, আর ব্যতিক্রমটি করেনি। দ্বিতীয়টি হলো এমন ঠিকানা পরিবার যা নিয়ম কখনো ঢাকেনি, যা ঘটে যখন কোনো নাম AAAA রেকর্ড ফেরত দিতে শুরু করে আর কেবল v4-এর ব্যতিক্রম সেগুলো উপেক্ষা করে। তৃতীয়টি রিজলভারের পার্থক্য: একটি অভ্যন্তরীণ দৃশ্য ও একটি সার্বজনীন দৃশ্য একই নামের জন্য ভিন্ন ঠিকানা ফেরত দিতে পারে, তাই আপনার অ্যাপ যে ঠিকানা ব্যবহার করে তা আপনার পরীক্ষায় ব্যবহৃত ঠিকানা নয়।
ক্যাশ করা সংযোগ হলো চতুর্থ ধরন এবং এটি সহজে চোখ এড়ায়। অ্যাপটি এখনো ঘণ্টাখানেক আগে রিজলভ করা কোনো ঠিকানার সঙ্গে কথা বলতে পারে, যার মানে আপনার নতুন লুকআপ আর তার খোলা সকেট সেবাটি কোথায় থাকে তা নিয়ে একমত নয়।
অ্যাপটি আসলে যে গন্তব্য ব্যবহার করে তা পড়ুন
ব্রাউজার ট্যাব নয়, অপারেটিং সিস্টেম ও সকেট টেবিলকে জিজ্ঞাসা করুন। লুকআপ বলে নামটি এই মুহূর্তে কোথায় রিজলভ হয়, আর সকেট টেবিল দেখায় প্রসেসটি কোন ঠিকানার সঙ্গে যুক্ত, যা পুরোনো হতে পারে। তত্ত্ব গড়ার আগে দুটোই চালান, কারণ তাদের মধ্যের পার্থক্যই প্রায় অর্ধেক ক্ষেত্রে উত্তর।
getent ahosts api.example.com
dig +short api.example.com A
dig +short api.example.com AAAA
ss -tnp | grep -F api
ip route get 203.0.113.40তারপর নিয়ম যা ঢাকে তার সঙ্গে তুলনা করুন। যদি বর্তমান ঠিকানা ব্যতিক্রমের বাইরে পড়ে আর অনুরোধটি তবু ব্যর্থ হয়, তাহলে টানেল কনফিগারেশন না ছুঁয়েই আপনি কারণ খুঁজে পেয়েছেন। যদি অ্যাপটি নিয়মের সঙ্গে মেলা কোনো ঠিকানায় যুক্ত থাকে আর অনুরোধটি তবু ব্যর্থ হয়, তাহলে সমস্যা টানেলের ওপারে কোথাও, এবং এটি ভুল তদন্ত।
উপসর্গ নয়, প্রক্রিয়া মেরামত করুন
যদি পণ্যটি রক্ষণাবেক্ষণকৃত ডোমেইন-ভিত্তিক স্টিয়ারিং সমর্থন করে, তবে তা ব্যবহার করুন এবং এর নথিভুক্ত রিফ্রেশ ও পরিধি আচরণ অনুসরণ করুন। এটি স্থির অনুমানের বদলে রক্ষণাবেক্ষণকৃত উত্তর দেয়, তবে এর খরচ হলো বৈশিষ্ট্যটি নথি অনুযায়ী কাজ করার ওপর নির্ভরতা।
যদি নকশাটি স্থির তালিকার ওপর নির্ভর করে, তবে তাকে একটি মালিক ও একটি হালনাগাদ পরিকল্পনা দিন। পরিকল্পনায় বলা উচিত ঠিকানাটি কীভাবে আবিষ্কৃত হয়, কে পরিবর্তন অনুমোদন করে এবং তালিকাটি প্রোভাইডার মাইগ্রেশন অনুসরণ করতে কত দ্রুত প্রত্যাশিত। মালিকহীন তালিকা হলো জানা কারণসহ ভবিষ্যতের বিভ্রাট।
শুধু সংক্ষিপ্ত পরীক্ষায় দেখা প্রতিটি ঠিকানা ধরার জন্য ব্যতিক্রমটিকে বড় প্রতিবেশী নেটওয়ার্ক পর্যন্ত প্রশস্ত করবেন না। এটি সমাধান নয়; এটি নিরাপত্তা সীমার স্থায়ী পরিবর্তন, আর নিয়ম যতদিন থাকবে ততদিন এটি নীরবে অসম্পর্কিত সেবাগুলোকে টানেল এড়াতে দেবে।
উদ্দেশ্যের দুই অর্ধই যাচাই করুন
স্প্লিট-টানেল নকশার দুটি উদ্দেশ্য আছে, আর সমাধানে দুটিই সংরক্ষণ করা উচিত। সুরক্ষিত সেবাটি টানেলের ভেতর দিয়ে যেতে হবে, এবং বাদ দেওয়া শ্রেণিগুলোকে তার চারপাশ দিয়ে যেতে থাকতে হবে। মেরামত করা গন্তব্যে একটি নতুন সংযোগ পরীক্ষা করুন, তারপর এমন একটি জিনিস পরীক্ষা করুন যা বাইরে থাকার কথা।
curl -sv --max-time 5 https://api.example.com/ -o /dev/null 2>&1 | grep -E 'Trying|Connected to'
curl -sS --max-time 5 https://public.example/ -o /dev/null -w '%{http_code}\n'নতুন ঠিকানাটি, আপনি যে প্রক্রিয়া বেছেছেন এবং তারিখটি লিখে রাখুন। এই নোটটিই পরের ব্যক্তিকে এই সিদ্ধান্তে পৌঁছাতে বাধা দেয় যে VPN দৈবক্রমে নিজের কনফিগারেশন উপেক্ষা করেছে।