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

সিস্টেম ফাইল সম্পাদনা করে শুরু করবেন না। প্রতিটি ধাপ হয় ড্রপটি ব্যাখ্যা করে, নয়তো একটি প্রার্থী সরিয়ে দেয়, আর সস্তা ধাপগুলো আগে আসে।

সেশন ড্রপকে আন্ডারলে ড্রপ থেকে আলাদা করুন

বিচ্ছিন্ন হওয়ার সঙ্গে সঙ্গে আবার সংযোগ করুন। কয়েক সেকেন্ডের মধ্যে, একই নেটওয়ার্কে, নতুন ক্রেডেনশিয়াল ছাড়া ফিরে আসা টানেল মৃত আপলিংক, Wi-Fi রোমিং বা কনসেনট্রেটরে একটি নিষ্ক্রিয় টাইমআউট নয়, বরং বন্ধ হয়ে যাওয়া সেশনের মতো কোনো স্থানীয় ট্রিগারের দিকে ইঙ্গিত করে। যে টানেল Connecting-এ আটকে থাকে, বা নেটওয়ার্ক না বদলানো পর্যন্ত ব্যর্থ হয়, সেটি অন্য একটি নিবন্ধ।

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

সংযোগের সময় ক্লায়েন্ট কী লিখেছে তা যাচাই করুন

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

কিছু বদলানোর আগে ক্লায়েন্ট কী দেখতে পেত তা তালিকাভুক্ত করুন:

who
w
last -n 10
sudo ls -l /run/utmp

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

utmp থেকে কেবল নিজের এন্ট্রি সরান

প্রকাশিত সমাধানটি ক্লায়েন্ট শুরুর আগে আপনি যে সেশন ব্যবহার করতে যাচ্ছেন সেটিকে utmp-এ অদৃশ্য করে দেয়। একটি ছোট C প্রোগ্রাম getutent() ধরে হাঁটে, যে রেকর্ডের ut_line স্ট্যান্ডার্ড ইনপুটের TTY-এর সমান সেটি মেলায়, তারপর সেই রেকর্ডটি পুনর্লিখন করে। ক্রমটি ইচ্ছাকৃত: setutent(), এন্ট্রি পড়ুন, এর ut_id কপি করুন, ut_type কে DEAD_PROCESS সেট করুন, ব্যবহারকারী ও লাইন ফিল্ড মুছুন, pututline() দিয়ে তা ফেরত লিখুন, তারপর endutent()।

এটি কম্পাইল করুন, তারপর যে শেল ক্লায়েন্ট শুরু করবে সেখান থেকে root হিসেবে চালান:

sudo ./utmpremove && /opt/cisco/anyconnect/bin/vpn -s connect vpn.example.edu

অধিকাংশ রিপোর্টে টুলটি কিছুই করে না বলে যে অভিযোগ আসে, তার পেছনে দুটি ব্যর্থতার ধরন। এটি স্ট্যান্ডার্ড ইনপুটে যুক্ত TTY-এর উপর কাজ করে, তাই কোনো টার্মিনাল ছাড়া স্ক্রিপ্ট বা cron জব থেকে চালালে মেলানোর কিছুই থাকে না। আর /run/utmp সাধারণ ব্যবহারকারীদের লেখার যোগ্য নয়, তাই root ছাড়া চালালে প্রস্থান অবস্থা না দেখলে তা নীরবে ব্যর্থ হয়।

বন্ধ করার পরও টানেল টিকে আছে কি না যাচাই করুন

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

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

যখন utmp পুনর্লিখনই ভুল উত্তর

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

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

টিকিট বন্ধ করার আগে লিখে রাখুন টানেল ওঠার সময় ক্লায়েন্ট কোন সেশনটি নজরে রাখছিল। ঠিক সেই একটি লাইনই রহস্যময় বিচ্ছিন্নতাকে মেশিনে পরের ব্যক্তির জন্য পুনরুৎপাদনযোগ্য অবস্থায় বদলে দেয়।

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