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
अगर मालिक कोई सक्रिय सेवा है, तो दूसरा डिवाइस बनाने के बजाय उसी सेवा को कॉन्फ़िगर करें। अगर यह वाकई पुराना है, तो इसे उस उपकरण से हटाएँ जिसने इसे बनाया था, और फिर दस्तावेज़ित क्लाइंट या यूनिट के साथ इंटरफ़ेस ऊपर लाएँ ताकि कॉन्फ़िगरेशन और डिवाइस तालमेल में रहें।
निर्माण सफल होने के बाद, अगली विफलता किसी बाद के चरण की है, और डिवाइस मौजूद होने के बाद विफलता की सूचना देने वाली यूनिट कभी न बने डिवाइस से अलग समस्या है। फिर से अनुमतियाँ बदलने से पहले दोनों को अलग करें।