একটি ড্যাশবোর্ড সংযোগ কতক্ষণ চালু আছে তার একটি সংখ্যা চায়, আর OpenVPN তা দেয় না। ক্লায়েন্ট জানে তার টানেল কখন উঠেছিল, কিন্তু কেবল যদি সেশন অবস্থা হারানোর আগে কেউ সেই মুহূর্তটি লিখে রাখে। সমর্থিত জায়গা হলো up হুক, আর যে মানটি রাখার যোগ্য তা ফরম্যাট করা স্ট্রিং নয়, একটি কাঁচা epoch সেকেন্ড। এর পরে সবই পাটিগণিত, সঙ্গে কিছু ক্রম-নিয়ম যা ঠিক করে সংখ্যাটি সৎ থাকে কি না।

হুকগুলো সত্যিই চলে কি না নিশ্চিত করুন

এর উপর কিছু তৈরি করার আগে প্রমাণ করুন যে হুকটি চলে। একটি ন্যূনতম ক্লায়েন্ট কনফিগারেশনে দরকার script-security 2 এবং স্পষ্ট up ও down পাথ; নিরাপত্তা লাইন ছাড়া OpenVPN স্ক্রিপ্ট চালাতে অস্বীকার করে এবং তা স্পষ্টভাবে বলে। একই সময়ে up-restart ও down-pre যোগ করুন যাতে রিস্টার্ট ও টিয়ারডাউন পাথ অনুমানযোগ্যভাবে আচরণ করে।

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

হুকটি কোন ব্যবহারকারী হিসেবে চলে তা যাচাই করুন। user ও group সেট থাকলে OpenVPN স্ক্রিপ্ট চালানোর আগে বিশেষাধিকার ছেড়ে দেয়, তাই root যে ডিরেক্টরিতে লিখতে পারে তা হুকের জন্য বন্ধ থাকতে পারে। পথটি আপনার শেলের দৃষ্টিভঙ্গি নয়, পরিষেবার দৃষ্টিভঙ্গি থেকে বাছুন।

একটি epoch মান লিখুন এবং সচেতনভাবে তা মুছুন

up হুকের এক লাইন দরকার, date +%s > /run/openvpn-client.started, প্রতি ইনস্ট্যান্সে পথটি সমন্বয় করে। epoch মান পরবর্তীতে ভাষা, সময় অঞ্চল ও ফরম্যাটের প্রশ্ন এড়ায়, আর এটি সেই একই সংখ্যা যা একটি মনিটরিং এজেন্ট তার নিজের ঘড়ির সঙ্গে তুলনা করতে পারে।

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

সঠিক আয়ুষ্কালের একটি জায়গা বাছুন। /run এর নিচের ফাইল রিবুটে মুছে যায়, যা বাস্তবতার সঙ্গে মেলে, অন্যদিকে /tmp এর নিচের ফাইল অপ্রত্যাশিতভাবে পরিষ্কার হতে পারে আর কনফিগারেশন ডিরেক্টরির ফাইল বিভ্রান্তিকরভাবে টিকে থাকে। অনুমতি এমনভাবে সেট করুন যাতে কেবল পরিষেবা ব্যবহারকারী ও মনিটরিং পাঠক তা পড়তে পারে।

লগ লাইনে ভরসা না করে আপটাইম গণনা করুন

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

লগের টাইমস্ট্যাম্প পার্স করা লোভনীয় শর্টকাট, আর তা তিনভাবে ব্যর্থ হয়: ফরম্যাট নির্ভর করে কোন অপশন সেট আছে তার উপর, রোটেশন ইতিহাস মুছে দেয়, আর পুনঃসংযোগগুলো একটি অবিচ্ছিন্ন টানেলের বদলে আলাদা সেশন হিসেবে দেখায়। হুক ঘটনাটি একবারই লেখে, যেই মুহূর্তে তা ঘটে।

চেক যখন অন্য হোস্টে চলে, তখন সময়কাল নয় টাইমস্ট্যাম্প পাঠান যাতে পাঠক তার নিজের ঘড়ি প্রয়োগ করে। তখন ছোট ঋণাত্মক ফলাফল ভাঙা হুকের বদলে ঘড়ির ব্যবধান হিসেবে পড়া যায়।

পুনঃসংযোগ, রিস্টার্ট ও একাধিক ইনস্ট্যান্স কভার করুন

এক হোস্টে দুই টানেলের জন্য দুই ফাইল দরকার, চাবি হবে পরিষেবা যে ইনস্ট্যান্স নাম ব্যবহার করে তা। ভাগ করা পথ মানে সর্বশেষ সংযোগ প্রতিটি প্রোফাইলের শুরুর সময় লেখার উপর লিখে দেয়, আর উপসর্গ হলো এমন সংখ্যা যা দ্বিতীয় টানেল শুরু হলে পিছনে লাফ দেয়।

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

সার্ভারের দিকে স্ট্যাটাস ফাইল প্রতিটি ক্লায়েন্টের জন্য connected-since মান বহন করে, যা ভিন্ন এক প্রশ্নের উত্তর দেয়: সার্ভার সেই পিয়ারকে শেষ কবে দেখেছে। এটি প্রতিস্থাপন নয়, ক্রস-চেকের জন্য ব্যবহার করুন, কারণ যা সেশন বর্ণনা করে তার সঙ্গে এটিও মুছে যায়। কোনও পরিমাপই টানেলের পিছনের অ্যাপ্লিকেশনের স্বাস্থ্য নিয়ে কিছু বলে না।

ক্রম-সংক্রান্ত বাগ ধরার তিনটি চেক চালান

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

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

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