WireGuard তার ইন্টারফেস তৈরি করতে পারছে না: কার্নেল নাকি অনুমতি?
কোনো পিয়ার হ্যান্ডশেকের আগেই ইন্টারফেস তৈরি ব্যর্থ হয়। ত্রুটিটি পড়ে অনুপস্থিত মডিউল, বিশেষাধিকারের সীমা আর বিদ্যমান ইন্টারফেস মালিকের মধ্যে পার্থক্য বুঝুন।
WireGuard তার ইন্টারফেস তৈরি করতে ব্যর্থ হয়, তাই কনফিগার করার মতো কোনো ডিভাইস নেই, বিনিময় করার মতো কোনো কী নেই এবং ডিবাগ করার মতো কোনো হ্যান্ডশেক নেই। ব্যর্থতাটি সম্পূর্ণভাবে স্থানীয় মেশিনেই থাকে, এবং ত্রুটির লেখা বলে দেয় স্থানীয় স্ট্যাকের কোন অংশটি অস্বীকার করেছে। এটি সঠিকভাবে পড়া পিয়ারের কনফিগারেশন পুনরায় ইনস্টল করার চেয়ে দ্রুত। স্তরগুলো আলাদা করা যায়, এবং বার্তাটি যে স্তরটি অস্বীকার করেছে তার নাম বলে।
ত্রুটি ঘটে কোনো পিয়ার কথা বলার আগেই
ইন্টারফেস তৈরি করা মানে কার্নেলের কাছে wireguard ধরনের একটি ডিভাইস চাওয়া একটি netlink অনুরোধ। কার্নেলের হয় সেই ধরন বোঝে এমন ড্রাইভার আছে, নয় নেই, এবং উত্তর সঙ্গে সঙ্গে ফিরে আসে। এই ধাপে মেশিন থেকে কোনো প্যাকেট বের হয় না, তাই এন্ডপয়েন্ট ঠিকানা ও সার্ভার কী এর কারণ হতে পারে না।
এই ক্রমটি রোগনির্ণয়ের জন্য গুরুত্বপূর্ণ। যদি কমান্ডটি কখনো ডিভাইস তৈরি না করে, তবে সমস্যাটি ভুল পাবলিক কী বা ব্লক করা UDP পোর্ট হতে পারে না। আগে স্থানীয় তৈরির পথ ঠিক করুন, তারপরই বাইরের দিকে তাকান।
কোন বাস্তবায়ন ডিভাইসটির মালিক হওয়ার কথা
দুটি বাস্তবায়ন সেই অনুরোধের উত্তর দিতে পারে। কার্নেলের ভেতরের মডিউল wireguard ডিভাইস ধরনটি নিবন্ধন করে, আর wireguard-go-এর মতো ইউজারস্পেস বাস্তবায়ন ভিন্ন পদ্ধতিতে একই ইন্টারফেস দেয়। যদি মডিউল অনুপস্থিত থাকে, কার্নেল অনুরোধটি অসমর্থিত ডিভাইস ত্রুটি দিয়ে প্রত্যাখ্যান করে, এবং সমাধান হলো হয় মডিউলটি লোড করা, নয় টুলগুলোকে ইউজারস্পেস বাস্তবায়নের দিকে নির্দেশ করা।
তাদের মধ্যে বেছে নেওয়ার আগে দেখুন আসলে কী উপস্থিত আছে। প্রথম কমান্ডটি দেখায় মডিউল লোড হয়েছে কি না, আর দ্বিতীয়টি সরাসরি কার্নেলকে জিজ্ঞাসা করে:
lsmod | grep wireguard
ip link add wgtest0 type wireguard
দ্বিতীয় কমান্ডটি সবচেয়ে ছোট সম্ভাব্য পুনরুৎপাদন: এটি একটি ডিভাইস চায় আর কিছু নয়। যদি এটি অসমর্থিত ধরনের বার্তা দিয়ে ব্যর্থ হয়, তবে অনুপস্থিত অংশটি আপনার কনফিগারেশন ফাইল নয়, বাস্তবায়নটিই।
| Error text | What refused | Next step |
|---|---|---|
| Unknown device type or operation not supported | The kernel has no wireguard driver | Load the module or use the userspace implementation |
| Operation not permitted | Missing privilege | Use the service context or grant the capability |
| File exists | The name is already in use | Inspect the owner before touching it |
| No such device in a container | No tunnel device or capability | Add the device and NET_ADMIN to the container |
বিশেষাধিকার ও কন্টেইনারের সীমা
নেটওয়ার্ক ডিভাইস তৈরি ও কনফিগার করতে বিশেষাধিকার লাগে, হয় root হিসেবে, নয় নেটওয়ার্ক প্রশাসনের সক্ষমতা দিয়ে। সাধারণ ব্যবহারকারী সেশন এটি করতে পারে না, এবং এই সীমাবদ্ধতা হলো নকশা, কোনো বাধা নয় যা আপনি পর্যালোচনা করেননি এমন একটি ইনস্টলার চালিয়ে এড়াতে পারেন।
কন্টেইনারের ভেতরে সীমাটি দ্বিগুণ হয়। কন্টেইনারের টানেল ডিভাইসে প্রবেশাধিকার এবং সেটি কনফিগার করার সক্ষমতা দরকার, আর যা তা দেয় সেই ফ্ল্যাগগুলো Linux VPN কন্টেইনার যেগুলো ব্যবহার করে সেগুলোই। সাধারণভাবে ওয়েব ব্রাউজ করতে পারে এমন সীমিত গেস্টও ইন্টারফেস তৈরি করতে পারে না, কারণ ব্রাউজিংয়ের এমন সক্ষমতা লাগে না। সক্ষমতাটি হোস্টের প্রতিটি সেশনে নয়, যে সার্ভিসের তা দরকার তাকেই দিন।
নামের দ্বন্দ্ব সমাধান করুন, তারপর আবার চেষ্টা করুন
আগে থেকেই থাকা ইন্টারফেস স্বয়ংক্রিয়ভাবে পরিত্যক্ত কিছু নয়। অন্য কোনো ম্যানেজার নামটির মালিক হয়ে এটি এখনই ব্যবহার করছে হতে পারে, তাই কিছু মুছে ফেলার আগে এটি পরীক্ষা করুন:
ip link show wg0
sudo wg show wg0
যদি মালিক একটি সক্রিয় সার্ভিস হয়, দ্বিতীয় ডিভাইস তৈরি না করে সেই সার্ভিসটিই কনফিগার করুন। যদি সত্যিই এটি পুরনো হয়, যে টুল এটি তৈরি করেছিল তার মাধ্যমে সরান, তারপর নথিভুক্ত ক্লায়েন্ট বা unit দিয়ে ইন্টারফেসটি চালু করুন যাতে কনফিগারেশন ও ডিভাইস মিলে থাকে।
তৈরি সফল হলে, পরবর্তী ব্যর্থতাটি পরে আসা কোনো ধাপের, আর ডিভাইস থাকার পরেও ব্যর্থতার কথা জানানো unit কখনো তৈরি হয়নি এমন ডিভাইসের চেয়ে ভিন্ন সমস্যা। আবার অনুমতি বদলানোর আগে দুটিকে আলাদা করুন।