লগে P_CONTROL_HARD_RESET_CLIENT_V2: এটি কি ত্রুটি?
হার্ড-রিসেট অপকোড একটি সেশন খোলে, এটি কোনো ত্রুটি নয়। সত্যিই আপনাকে থামিয়ে দেওয়া সার্টিফিকেট, ক্রেডেনশিয়াল বা রাউটিং ব্যর্থতা খুঁজে পেতে পড়তে থাকুন।
লাইনটি প্রতি কয়েক সেকেন্ডে পুনরাবৃত্তি হয় এবং সবকিছুর কারণ বলে মনে হয়: control hard reset নামের একটি প্যাকেট, যা এমন একটি ক্লায়েন্ট থেকে আসে যে কোথাও পৌঁছায় না। এটি ত্রুটি নয়। এটি একটি নতুন সেশনের প্রথম বার্তা, আর পুনরাবৃত্তি হলো আরও সামনে অন্য কিছু ব্যর্থ হওয়ার উপসর্গ। লেবেল যা বলে এবং সংযোগ এর পরে যা করেছে তা আলাদা করাই সম্পূর্ণ রোগনির্ণয়।
অপকোড প্রোটোকলে একটি অবস্থান নির্দেশ করে
OpenVPN একটি সকেটের উপর কয়েক ধরনের প্যাকেট মাল্টিপ্লেক্স করে, আর অপকোড গ্রাহককে বলে সে কোন ধরন ধরে আছে। হার্ড-রিসেট প্যাকেট সেশন খোলে, কন্ট্রোল প্যাকেট হ্যান্ডশেক উপাদান বহন করে, স্বীকৃতি প্রাপ্তি নিশ্চিত করে এবং ডেটা প্যাকেট টানেলের পেলোড বহন করে। প্রথম বাইট পড়লে বোঝা যায় ওই বিনিময়ে প্যাকেটটি কোথায় পড়ে, আর আপস্ট্রিম প্যাকেট সংজ্ঞা প্রতিটি পরিবারকে স্পষ্টভাবে নাম দেয়।
এটুকুই এটি বলে। প্রাথমিক ক্লায়েন্ট রিসেট হিসেবে চিহ্নিত প্যাকেট প্রমাণ করে প্যাকেটটি আপনার পর্যবেক্ষণ বিন্দুতে পৌঁছেছে এবং প্রতিপক্ষ একটি সেশন শুরু করতে চায়। এটি প্রমাণ করে না যে ক্লায়েন্ট আপনার সার্টিফিকেটে বিশ্বাস করেছে, তার ক্রেডেনশিয়াল গৃহীত হয়েছে, বা কোনো ডেটা চ্যানেল কখনও ব্যবহারযোগ্য হয়েছে।
V2 প্রত্যয়টি ওই প্যাকেট পরিবারের জন্য একটি প্রোটোকল প্রজন্মের চিহ্ন, কোনো পণ্যের সংস্করণ নয় এবং আপনি যে সেটিং ইনস্টল করেন তা-ও নয়। নামে কিছুই টানেল রিসেট করা, সেবা পুনরায় চালু করা বা ক্যাশে পরিষ্কার করার কথা বোঝায় না।
ওই মুহূর্তে ক্লায়েন্ট আসলে যা করছে
ক্লায়েন্ট একটি সেশন শনাক্তকারী খোলে, যার সাথে উভয় প্রান্ত পরবর্তী কন্ট্রোল ট্রাফিক যুক্ত করবে। কন্ট্রোল-চ্যানেল সুরক্ষা কনফিগার করা থাকলে সেই প্রথম প্যাকেটেই HMAC থাকে, যা গ্রাহককে বাকি বিনিময়ে পরিশ্রম করবে কি না তা ঠিক করতে দেয়। যে গ্রাহক এটি যাচাই করতে পারে না সে প্যাকেটটি নীরবে ফেলে দেয়, তাই ভুল শেয়ার্ড কী এমন দেখায় যেন ক্লায়েন্ট শূন্যতায় কথা বলছে।
ব্যবহারকারীর কাছে দৃশ্যমান কিছুই এখনও ঘটেনি। কোনো সার্টিফিকেট যাচাই হয়নি, কোনো ব্যবহারকারীর নাম দেওয়া হয়নি এবং কোনো টানেল ঠিকানা বরাদ্দ হয়নি। রিসেট হলো হ্যান্ডশেকের ভূমিকা, তাই এই মুহূর্তে সংযোগ সম্পর্কে যেকোনো বিচার অকাল।
নিষ্ক্রিয় পুনঃসংযোগ লুপে আকর্ষণীয় বিবরণ হলো বিরতি। যে ক্লায়েন্ট নির্দিষ্ট চক্রে অগ্রগতি ছাড়াই আবার চেষ্টা করে, তাকে সাধারণত এগোনোর আগেই প্রত্যাখ্যান করা হয়, আর কারণ প্যাকেটের নামে নয়, প্রতিপক্ষের লগে থাকে।
রিসেটের পরে আসল ব্যর্থতা কোথায় লুকিয়ে থাকে
দুটি লগ পাশাপাশি পড়ুন এবং রিসেট নয় এমন প্রথম ঘটনাটি খুঁজুন। ক্লায়েন্টে সার্টিফিকেট যাচাইয়ের ব্যর্থতা নির্দিষ্ট কারণসহ জানানো হয়: মেয়াদোত্তীর্ণ সার্টিফিকেট, নামের অমিল বা অজানা ইস্যুকারী। সার্ভারে ক্রেডেনশিয়াল প্রত্যাখ্যান নিজস্ব কারণসহ প্রমাণীকরণ ব্যর্থতা হিসেবে জানানো হয়। দুটোই সার্ভারের নতুন প্রচেষ্টার পুনরাবৃত্ত দৃষ্টিভঙ্গির চেয়ে অনেক বেশি নির্দিষ্ট।
প্রতিটি লগ আলাদা করে না পড়ে একটি প্রচেষ্টাকে টাইমস্ট্যাম্প দিয়ে মিলিয়ে দেখুন, কারণ একই ব্যর্থতা দুই জায়গায় ভিন্ন ভাষায় ও ভিন্ন তীব্রতায় দেখা যায়। যে প্রতিপক্ষ হাল ছেড়ে দেয় সে সাধারণত কারণ বলে দেয়।
যদি কোনো পক্ষ প্রত্যাখ্যান জানায় না এবং বিনিময় তবু থেমে থাকে, তাহলে সীমাটি বিশ্বাস নয়, পৌঁছানোযোগ্যতা। ফায়ারওয়াল ফেরত দিকটি ফেলে দেওয়া, নেটওয়ার্ক ঠিকানা অনুবাদ যন্ত্র ম্যাপিং মেয়াদোত্তীর্ণ করা, বা MTU সমস্যা যা বড় হ্যান্ডশেক প্যাকেট নষ্ট করে — সবই কোনো প্রমাণীকরণ ত্রুটি ছাড়াই আটকে থাকা বিনিময় তৈরি করে।
grep -nE 'VERIFY|AUTH_FAILED|TLS Error|SIGUSR1' /var/log/openvpn*.log
এই অনুসন্ধান নিজে নিজে রোগনির্ণয় নয়, তবে এটি এক ধাপে আপনাকে প্রোটোকলের শব্দভান্ডার থেকে প্রকৃত ব্যর্থতার শ্রেণিতে নিয়ে যায়।
কেন যাচাই সরানো ভুল প্রতিক্রিয়া
রিসেট বারবার দেখা গেলে সবচেয়ে দ্রুত দেখানো সমাধান হলো সার্টিফিকেট যাচাই বন্ধ করা বা কিছু সংযুক্ত হওয়ার জন্য কন্ট্রোল-চ্যানেল সুরক্ষা ছেড়ে দেওয়া। এটি একটি রোগনির্ণয়যোগ্য ব্যর্থতার বদলে অ-রোগনির্ণয়যোগ্য একটি নেয়, এবং স্থাপনাটিকে এমন প্রতিপক্ষ গ্রহণ করতে ছেড়ে দেয় যাদের প্রত্যাখ্যান করার জন্যই এটি তৈরি হয়েছিল।
বরং যে সীমাটি সত্যিই ব্যর্থ হয়েছিল তা বদলান। বিশ্বাসের সমস্যা সার্টিফিকেট কর্তৃপক্ষ ও যে প্রোফাইল এটিকে উল্লেখ করে তার। সময়ের সমস্যা ঘড়ির। ক্রেডেনশিয়াল সমস্যা যে প্রমাণীকরণ ব্যাকএন্ড এটি প্রত্যাখ্যান করেছে তার, আর অগম্য প্রতিপক্ষ দুটি হোস্টের মধ্যবর্তী পথের।
সহায়তা আলাপে অপকোড একটি কাজে দরকারি: এটি বলে দেয় প্রতিপক্ষ চেষ্টা করার মতো যথেষ্ট দূর গেছে। এর পরে কী ঘটেছে তা-ই আপনার জানা দরকার, এবং যেই লগ প্রথম নির্দিষ্ট প্রত্যাখ্যান লিখে রাখে সেখানেই তা লেখা আছে। সেখান থেকে শুরু করুন, তাহলে রিসেট লাইনটি কারণের মতো দেখা বন্ধ করে টাইমস্ট্যাম্পের মতো দেখতে শুরু করে।