Ubuntu-তে বুটের সময় OpenVPN: NetworkManager নাকি systemd?
ল্যাপটপ আর স্ক্রিনহীন সার্ভারের বুটের পথ আলাদা। NetworkManager-এর সেকেন্ডারি সংযোগের সঙ্গে openvpn-client@ এবং তার ক্রেডেনশিয়াল ফাইলের তুলনা করুন।
বেশিরভাগ গাইড এই বাছাইকে নিছক সাজসজ্জার বিষয় হিসেবে দেখায়: হয় NetworkManager টানেল তুলুক, নয়তো systemd ইনস্ট্যান্স চালু করে শেষ করুন। দুটি পথ একটি বিষয়ে আলাদা, যেটি স্ক্রিনহীন মেশিনে ফলাফল ঠিক করে, আর সেটির সঙ্গে কোন টুল নতুন তা নিয়ে কোনো সম্পর্ক নেই। NetworkManager সেশন দিয়ে সিক্রেট খোলে; systemd ইনস্ট্যান্সের খোলার মতো কোনো সেশন নেই। যে পথের সিক্রেট ব্যবস্থাপনা আপনার সামনের মেশিনের সঙ্গে মেলে, সেটিই বেছে নিন।
বাকি সব, রুট ইনস্টল থেকে পুনরায় সংযোগের আচরণ পর্যন্ত, সেই প্রথম সিদ্ধান্ত থেকেই আসে।
কি-রিং হলো সেই পার্থক্য যার কথা কেউ বলে না
NetworkManager যখন একটি VPN প্রোফাইলের মালিক, তখন পাসওয়ার্ডটি লগইন কি-রিংয়ে থাকতে পারে, যা ব্যবহারকারী সাইন ইন করলে খোলে। ল্যাপটপে এটি ভালো কাজ করে: ব্যক্তি উপস্থিত, কি-রিং খোলে, টানেল ওঠে। যে সার্ভার তদারকি ছাড়া বুট হয়, সেখানে কিছু খোলার মতো কেউ নেই, তাই প্রোফাইল এমন এক সিক্রেটের জন্য অপেক্ষা করে যা কখনো আসে না। সংযোগটি কনফিগার করা দেখায় এবং কখনো সক্রিয় হয় না।
systemd ইনস্ট্যান্স ডিস্ক থেকে ক্রেডেনশিয়াল ফাইল পড়ে সেই সমস্যা এড়ায়, ফলে ফাইলটিই হয়ে ওঠে আপনার সুরক্ষার বিষয়। chmod 400 এবং root-এর মালিকানা হলো ন্যূনতম, আর ফাইলটি আপনার নিয়ন্ত্রণে নেই এমন ব্যাকআপ ও ইমেজ টেমপ্লেটের বাইরে থাকা উচিত।
VPN-কে সংযোগের সঙ্গে যুক্ত করা বুটের নিশ্চয়তা নয়
nm-connection-editor-এ VPN-এর বদলে তারযুক্ত বা তারবিহীন সংযোগ বেছে নিন, General ট্যাব খুলুন, স্বয়ংক্রিয়ভাবে VPN-এ সংযোগ করার অপশন টিক দিন এবং প্রোফাইলের নাম দিন। এরপর প্রাথমিক সংযোগ সংযুক্ত অবস্থায় পৌঁছালে NetworkManager VPN-টিকে সেকেন্ডারি সংযোগ হিসেবে সক্রিয় করে। এটি একটি নির্ভরতা, ফায়ারওয়াল নিয়ম নয়। টানেল ওঠার আগের সেকেন্ডগুলোতে প্যাকেট বেরোতে পারে, আর সংরক্ষিত সিক্রেট খুলতে ব্যর্থ হলে মেশিনটি এটি ছাড়াই অনলাইনে থাকে।
যদি দাবি হয় টানেল ছাড়া কিছুই বেরোবে না, তাহলে তা বলুন এবং কিল সুইচ বানান, কারণ এই সেটিং একটি দেবে না। সাসপেন্ড ও রিজিউমও পরীক্ষা করুন, কারণ ফিরে আসার পথে সেকেন্ডারি সংযোগটি আবার মূল্যায়িত হয়।
systemd ইনস্ট্যান্সের মিলতে হবে এমন ফাইলনাম দরকার
প্রোফাইলটি প্যাকেজ যে ক্লায়েন্ট ডিরেক্টরি আশা করে সেখানে রাখুন, যেমন /etc/openvpn/client/office.conf, এবং ভেতর থেকে ক্রেডেনশিয়াল ফাইলটি auth-user-pass office.cred দিয়ে উল্লেখ করুন। ইনস্ট্যান্সের নাম হলো প্রত্যয় ছাড়া ফাইলের নাম, তাই openvpn-client@office ফাইলটি office.conf পড়ে। এটি sudo systemctl enable --now openvpn-client@office দিয়ে চালু করুন এবং ব্লগের উদাহরণে ভরসা না করে systemctl cat openvpn-client@office দিয়ে মিলটি নিশ্চিত করুন।
প্রোফাইলের ভেতরের পথগুলো প্রোফাইলের সাপেক্ষে নয়, ইউনিটের কার্যকারী ডিরেক্টরির সাপেক্ষে সমাধান হয়, তাই আপেক্ষিক ca বা auth-user-pass লাইন বুটের সময় ব্যর্থ হতে পারে, অথচ হাতে পরীক্ষা করলে কাজ করে। ইউনিটকে যা খুঁজতে হবে তার জন্য পরম পথ ব্যবহার করুন। এরপর সত্যিকারের বুটের পরে journalctl -u openvpn-client@office -b পড়ুন; যে ইউনিট টানেল ছাড়া সক্রিয় বলে জানায়, সে সাধারণত সেই লগে একটি অনুপস্থিত ফাইলের নাম বলে।
পুরোনো প্যাকেজ ভিন্ন টেমপ্লেট নাম দেয়, তাই systemctl list-unit-files 'openvpn*' ঠিক করে দেয় এই হোস্টে কোনটি আছে।
পুনরায় সংযোগের আচরণ আলাদা সিদ্ধান্ত
ping-restart আছে এমন প্রোফাইল টানেল পড়ে গেলে তা আবার গড়ে, আর রিস্টার্ট নির্দেশনা আছে এমন ইউনিট সেবা স্তরে অনুরূপ কিছু করে। এগুলো আপনার বেছে নেওয়া নীতি, উত্তরাধিকারে পাওয়া ডিফল্ট নয়। সংযোগ যদি কেবল চাহিদামতো উঠতে হয়, তাহলে রিস্টার্ট আচরণ সচেতনভাবে সরান এবং কেন তা লিখে রাখুন। ইউনিট যদি নেটওয়ার্ক ব্যবহারযোগ্য হওয়ার আগে শুরু হয়, তবে তার পুনরায় চেষ্টার নীতি দরকার, কারণ বুটের সময় একটি ব্যর্থ চেষ্টা নিজে থেকে পুনরাবৃত্তি হয় না।
থামানোও সমান আক্ষরিক: sudo systemctl disable --now openvpn-client@office চলমান ইনস্ট্যান্স থামায় এবং বুট লিঙ্ক সরায়। শুধু নিষ্ক্রিয় করলে টানেল পরের রিবুট পর্যন্ত চলতে থাকে, যা যে কেউ নিষ্ক্রিয় করে ইন্টারফেস উঠে থাকতে দেখে পরীক্ষা করে, তাকে অবাক করে।
রিবুট করুন, তারপর চারটি বিষয় ক্রমে যাচাই করুন
সেবা রিস্টার্ট করা সেবাকে পরীক্ষা করে; মেশিন রিবুট করা বুটের পথকে পরীক্ষা করে। রিবুটের পরে নিশ্চিত করুন ইউনিট উঠেছে, তারপর দূরবর্তী সাবনেটের জন্য রুট আছে, তারপর মেশিন ইন্টারনেটকে কোন ঠিকানা দেখায়, এবং শেষে নামগুলো টানেল দিয়ে সমাধান হয়। কিছু ভুল থাকলে ওই চারটি যাচাই ঠিক ওই ক্রমেই ব্যর্থ হয়, ফলে প্রথম ব্যর্থতাটিই কাজে লাগে।
রুট ছাড়া সক্রিয় ইউনিট সাধারণত বোঝায় প্রোফাইল সংযুক্ত হয়েছে কিন্তু সার্ভার কোনো রুট পাঠায়নি, অথবা রুটটি এমন ইন্টারফেসে বসানো হয়েছিল যা পরে অদৃশ্য হয়েছে। যে রুটে নাম খোঁজা কাজ করে না, সেটি টানেলের বদলে DNS কনফিগারেশনের দিকে ইঙ্গিত করে।
টানেল উঠতে না পারলে কী হবে তা আগেই ঠিক করুন। সাধারণ সংযোগে ফিরে যাওয়া একটি নীতি, এবং তা লিখে রাখা উচিত, যে ম্যানেজার আগে শুরু হয়েছে তার উপর ছেড়ে না দেওয়া।