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

কেন লগইন এটি কাজ করায়

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

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

টানেল কে চালু করবে তা ঠিক করুন

দুটি সমর্থিত প্যাটার্ন আছে, এবং সেগুলি মেশানোই এটি ব্যর্থ হওয়ার অন্য উপায়। NetworkManager একটি সিস্টেম-স্কোপড সংযোগ সক্রিয় করতে পারে, যা উপযুক্ত যখন মেশিন ইতিমধ্যে সেখানে তার নেটওয়ার্কিং কেন্দ্রীভূত করেছে। বিকল্পভাবে, একটি নিবেদিত systemd unit সরাসরি VPN চালায় এবং নিজেই ইন্টারফেসের মালিক।

systemctl list-unit-files 'openvpn*'
systemctl list-unit-files 'wg-quick*'
nmcli connection show --active
systemctl enable --now wg-quick@wg0

একই কনফিগারেশনের বিরুদ্ধে দুই মালিককে চালাবেন না। যদি NetworkManager ইন্টারফেস পরিচালনা করে এবং একটি unit-ও এটি তুলে আনে, তারা রুট ও DNS নিয়ে লড়াই করবে, এবং ফলাফল পরিস্থিতি নির্ভর করে কে শেষে শেষ করেছে তার উপর।

গোপন তথ্য সেখানে রাখুন যেখানে সার্ভিস পড়তে পারে

ব্যাকগ্রাউন্ড সার্ভিস কোনো প্রম্পটের উত্তর দিতে পারে না। সার্টিফিকেট পাসফ্রেজ, অ্যাকাউন্ট পাসওয়ার্ড এবং রেফারেন্স করা প্রমাণীকরণ ফাইল—সবগুলোরই এমন স্টোরেজ ব্যবস্থা দরকার যা unit মানুষ ছাড়া পৌঁছাতে পারে, যে অ্যাকাউন্ট সার্ভিস চালায় তার মালিকানাধীন এবং অন্য সবার কাছে অপাঠ্য।

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

আসলে যে ঘটনাটি ঘটে সেটি পরীক্ষা করুন

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

systemctl is-enabled wg-quick@wg0
journalctl -u wg-quick@wg0 -b --no-pager
systemctl status systemd-networkd-wait-online --no-pager

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

শুধু ইন্টারফেস নয়, রুট ও DNS যাচাই করুন

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

ip -4 route show
resolvectl status
ping -c 3 10.61.0.1
curl -sS --max-time 5 https://internal.example/ -o /dev/null -w '%{http_code}\n'

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

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