OpenVPN Windows-এ লগইনে চালু হয় কিন্তু বুটে নয়?
স্টার্টআপ শর্টকাট একটি ডেস্কটপ অ্যাপ চালু করে, স্বয়ংক্রিয় সার্ভিস নয়। ফাইল সরানোর আগে দেখুন সার্ভিসটি কোন প্রোফাইল উৎস পড়ে।
কেউ সাইন ইন করার পরেই যে টানেল দেখা যায়, সেগুলো সাধারণত ওই ব্যক্তির সেশন থেকেই চালু হয়, স্বয়ংক্রিয় সার্ভিস থেকে নয়। সাধারণত দায়ী হলো স্টার্টআপ শর্টকাট, যা openvpn-gui.exe চালু করে, আর এটি ভাঙা ইনস্টলেশন নয়। শর্টকাটটি ব্যবহারকারী সেশনের ভিতরে একটি ডেস্কটপ অ্যাপ্লিকেশন চালু করে, সেই ব্যবহারকারীর প্রোফাইল, তার সার্টিফিকেট স্টোর এবং প্রম্পটের উত্তর দেওয়ার ক্ষমতা নিয়ে। এর কোনোকিছুই সংযোগটিকে সাইন-ইন করা মানুষের থেকে স্বাধীন করে না, আর প্রি-লগইন টানেলের ঠিক এটাই দরকার।
লক্ষণটির সাধারণত তিনটি কারণ থাকে
তিনটি ধরন বাইরে থেকে একই রকম দেখায় এবং এদের সমাধান আলাদা। প্রথমটি হলো সম্পাদনের মালিক ব্যবহারকারী সেশন, সার্ভিস নয়, যা স্টার্টআপ শর্টকাটের ঘটনা। দ্বিতীয়টি হলো এমন প্রোফাইল যা সার্ভিস যেখানে দেখে না সেখানে থাকে, তাই সার্ভিস চালু হয়, কিছু পায় না এবং পরিষ্কারভাবে বন্ধ হয়। তৃতীয়টি হলো এমন প্রোফাইল যা সার্ভিস খুঁজে পায় ও চালু করে, কিন্তু যার ক্রেডেনশিয়ালের জন্য এমন ইন্টারঅ্যাকশন দরকার যা কোনো সার্ভিস দিতে পারে না।
কোনটি প্রযোজ্য তা শনাক্ত করতে দুটি পাঠ লাগে: সার্ভিসটি কী চালানোর জন্য কনফিগার করা আছে, এবং কোন ফাইলগুলো সে দেখতে পায়। দুটোই এক-একটি কমান্ড, আর কোনোটিই চলমান সংযোগে ব্যাঘাত ঘটায় না।
স্বয়ংক্রিয় সার্ভিস আসলে কী পড়ে
Community স্বয়ংক্রিয় সার্ভিস হলো একটি র্যাপার, যা তার কনফিগার করা অটো-স্টার্ট ডিরেক্টরি, সাধারণত ইনস্টলেশনের অধীনে config-auto, স্ক্যান করে এবং পাওয়া প্রতিটি মিলযুক্ত প্রোফাইলের জন্য একটি OpenVPN প্রসেস চালু করে। ব্যবহারকারীর GUI মেনুতে দেখা যায় এমন প্রোফাইল বরং সেই ব্যবহারকারীর রোমিং প্রোফাইলের অধীনে থাকে, এমন ডিরেক্টরিতে যা সার্ভিস অ্যাকাউন্ট পড়ে না। Windows সার্ভিস গাইড সেই আবিষ্কার ব্যাখ্যা করে, আর কিছু কপি করার আগে এটি পড়া উচিত, কারণ লক্ষ্য ডিরেক্টরি ইনস্টলেশনের একটি বৈশিষ্ট্য, নির্দিষ্ট রীতি নয়। তাই GUI-এর ফোল্ডারে ফাইল কপি করলে সার্ভিসের জন্য কিছুই বদলায় না, আর config নামের প্রতিটি ফোল্ডারে কপি করলে সমাধানের বদলে নকল তৈরি হয়।
Get-Service OpenVPNService | Select-Object Status, StartType
Get-CimInstance Win32_Service | Where-Object Name -eq 'OpenVPNService' | Select-Object PathName, StartName
gci 'C:\Program Files\OpenVPN\config-auto'
শেষ কমান্ডটি দেখায় র্যাপারটি আসলে কী দেখবে, আর প্রোফাইল ভুল জায়গায় আছে তা নিশ্চিত করার দ্রুততম উপায় এটি। দ্বিতীয় লাইনটি সার্ভিস কোন অ্যাকাউন্টে চলে তাও দেখায়, আর সেই অ্যাকাউন্টই ঠিক করে কোন ফাইল পাথ ও সার্টিফিকেট স্টোর আদৌ পৌঁছানো যায়।
কেন ডেস্কটপ লগইন কাজ করে আর বুট স্টার্ট করে না
ডেস্কটপের সাফল্য দীর্ঘসময় ইনপুট-নির্ভরতা লুকিয়ে রাখতে পারে। GUI একটি কী পাসফ্রেজ, অ্যাকাউন্ট পাসওয়ার্ড বা দ্বিতীয় ফ্যাক্টর ডায়ালগে নিতে পারে, কারণ এটি দৃশ্যমান ডেস্কটপসহ ইন্টারঅ্যাকটিভ সেশনে চলে। সার্ভিস চলে ডেস্কটপহীন সেশনে, তাই ইনপুটের অনুরোধ দেখানোর জায়গা নেই, আর সংযোগটি টাইমআউটের পরে ব্যর্থ হয় যা ক্রেডেনশিয়াল সমস্যার মতো দেখায়ই না।
ফাইল অ্যাক্সেস একই নিয়ম মানে। ব্যবহারকারীর প্রোফাইলে রাখা প্রাইভেট কী, বা ব্যবহারকারীর ব্যক্তিগত স্টোরে থাকা সার্টিফিকেট, মেশিন হিসেবে চলা সার্ভিসের জন্য পাওয়া যায় না। একই প্রোফাইল ফাইল মানেই একই পরিবেশ—এমন ধরে না নিয়ে পরম পাথ, অনুমতি এবং প্রতিটি পক্ষের সার্টিফিকেট নির্বাচন তুলনা করুন।
ব্যবহারকারী লগইন করেছেন কি না তা নির্বিশেষে চলার জন্য সেট করা একটি নির্ধারিত টাস্কও একই ধরনের সীমাবদ্ধতা উত্তরাধিকারসূত্রে পায়। এটি GUI-এর এক্সিকিউটেবল সফলভাবে চালু করতে পারে এবং তবুও এমন প্রসেস তৈরি করতে পারে যা কখনো ক্রেডেনশিয়াল পায় না, তাই টাস্ক ম্যানেজারে প্রসেস থাকা কর্মরত টানেলের প্রমাণ নয়।
একজন মালিক বেছে নিন এবং প্রকৃত জীবনচক্র পরীক্ষা করুন
যে সংযোগ সাইন-ইন করা ব্যক্তির, তার জন্য GUI-এর সমর্থিত অটোস্টার্ট আচরণ ব্যবহার করুন এবং সার্ভিসকে এর বাইরে রাখুন। যে টানেল কারও সাইন ইন করার আগেই থাকতে হবে, তার জন্য সার্ভিসটি কনফিগার করুন, প্রোফাইলটি সেখানে রাখুন যেখানে র্যাপার তা পড়ে, এবং সমর্থিত আনঅ্যাটেন্ডেড ক্রেডেনশিয়াল ব্যবস্থা ব্যবহার করুন, যেমন ইন্টারঅ্যাকটিভ পাসফ্রেজবিহীন কী বা নথিভুক্ত ক্রেডেনশিয়াল ফাইল।
Get-Content 'C:\Program Files\OpenVPN\log\openvpn.log' -Tail 40
Get-WinEvent -LogName Application -MaxEvents 20 | Where-Object ProviderName -like '*OpenVPN*'
যে জীবনচক্রটি গুরুত্বপূর্ণ তা পরীক্ষা করুন: কেউ সাইন ইন না করেই রিবুট, তারপর নেটওয়ার্ক পরিবর্তনের পরে পুনঃসংযোগ। সংযোগের জন্য একজন মালিক রাখুন, কারণ দুটি প্রতিদ্বন্দ্বী স্টার্টআপ ব্যবস্থা সাধারণত একই রুট ও একই সার্ভার সেশনের জন্য লড়াই করা দুটি ইনস্ট্যান্স তৈরি করে, যা একক কোনো ব্যবস্থার চেয়ে নির্ণয় করা কঠিন।