VPS पर OpenVPN: खोलने के लिए कोई /dev/net/tun डिवाइस नहीं
कॉन्फ़िग आमतौर पर ठीक होता है: गेस्ट tun डिवाइस नहीं देख पाता। किसी VM को साझा कर्नेल वाले कंटेनर से अलग पहचानें, फिर वह परत ठीक करें जिसके पास कर्नेल है।
पहला स्टार्ट /dev/net/tun या ऐसे TUN/TAP डिवाइस के बारे में संदेश के साथ विफल होता है जिसे खोला नहीं जा सकता। प्रमाणपत्र अभी पढ़े नहीं गए हैं, इसलिए प्रोफ़ाइल में कुछ भी संदिग्ध नहीं है। डेमन कर्नेल से ऐसी वस्तु मांग रहा है जो इस गेस्ट के पास नहीं है।
वह वस्तु tun मॉड्यूल द्वारा समर्थित एक कैरेक्टर डिवाइस है। आप इसे बना सकते हैं या नहीं, यह इस पर निर्भर करता है कि कर्नेल का मालिक कौन है।
डेमन कर्नेल से क्या मांगता है
OpenVPN /dev/net/tun खोलता है और ड्राइवर से इंटरफ़ेस मांगता है। ड्राइवर tun मॉड्यूल है, और डिवाइस नोड वह हैंडल है जिसका उपयोग यूज़रस्पेस उस तक पहुंचने के लिए करता है। यदि मॉड्यूल लोड नहीं है, तो नोड गायब हो सकता है या खोलना विफल हो सकता है। दोनों में से कोई भी स्थिति server.conf संपादित करके ठीक नहीं होती।
त्रुटि को पहले प्लेटफ़ॉर्म प्रश्न के रूप में पढ़ें। कॉन्फ़िगरेशन त्रुटि डिवाइस खुलने के बाद दिखती है, पहले नहीं।
VM या साझा कर्नेल वाला गेस्ट
KVM, Xen या किसी अन्य पूर्ण वर्चुअल मशीन पर कर्नेल आप नियंत्रित करते हैं। आप मॉड्यूल लोड कर सकते हैं और नोड बना सकते हैं। OpenVZ, Virtuozzo या LXC शैली के कंटेनर पर गेस्ट होस्ट कर्नेल साझा करता है, इसलिए अंदर का root ऐसा मॉड्यूल लोड नहीं कर सकता जो होस्ट ने लोड न किया हो।
इसलिए एक ही विफलता के दो बहुत अलग मालिक हैं। पहले मामले में आप इसे इंस्टेंस के अंदर से ठीक कर सकते हैं। दूसरे में आप होस्ट या प्रदाता से कुछ उजागर करने के लिए कह रहे हैं।
यह तय करने से पहले कि आप किस मामले में हैं, ls -l /dev/net/tun, lsmod | grep tun और ip -brief link show चलाएं।
VM पर, बूट के समय मॉड्यूल लोड करें
वर्चुअल मशीन पर modprobe tun आमतौर पर डिवाइस नोड बनाता है। जांचें कि वह दिखता है, फिर एक बार टाइप किए गए कमांड पर निर्भर रहने के बजाय डिस्ट्रीब्यूशन के मॉड्यूल कॉन्फ़िगरेशन के जरिए लोड को स्थायी बनाएं। रीबूट के बाद गायब होने वाला नोड अगले महीने वही टिकट बन जाता है।
यह भी जांचें कि आपके द्वारा बूट किए गए कर्नेल में मॉड्यूल है ही या नहीं। कटा-छांटा वेंडर कर्नेल इसे नहीं रख सकता।
यदि नोड मौजूद है पर खोलना अब भी विफल होता है, तो अनुमतियां और डिवाइस के major/minor नंबर अगले संदिग्ध हैं। ये स्थानीय सुधार हैं, प्रदाता के लिए अनुरोध नहीं।
कंटेनर में, डिवाइस का मालिक होस्ट है
कंटेनर में, डिवाइस और क्षमता दो अलग आवश्यकताएं हैं। रनटाइम को /dev/net/tun पास करना होता है, और कंटेनर को इंटरफ़ेस बनाने के लिए नेटवर्क क्षमता चाहिए। जो रूटलेस रनटाइम दोनों नहीं देता, वह प्रोफ़ाइल कैसे भी लिखी हो, वही खोलने की त्रुटि पैदा करता रहेगा। बहुत से OpenVZ होस्ट ग्राहक पैनल में TUN/TAP टॉगल देते हैं, और उसे चालू करना साथ में रीस्टार्ट करना अक्सर पूरा समाधान होता है।
प्रदाता से दो सटीक प्रश्न पूछें: क्या tun मॉड्यूल होस्ट पर लोड है, और क्या डिवाइस इस इंस्टेंस के अंदर उपलब्ध है? अस्पष्ट टिकट को अस्पष्ट उत्तर मिलता है।
मॉड्यूल दोबारा बनाना शायद ही कभी क्यों मदद करता है
गेस्ट के अंदर मॉड्यूल बनाना शायद ही कभी मदद करता है। कंपाइल के लिए ठीक उसी चल रहे कर्नेल का कॉन्फ़िगरेशन चाहिए, और /proc/config.gz वैकल्पिक है और न्यूनतम इमेज पर अक्सर अनुपस्थित रहता है। काम करने वाला मॉड्यूल भी ऐसे कर्नेल में नहीं डाला जा सकता जो कंटेनर का न हो।
डिवाइस दिखने के बाद, सेवा रीस्टार्ट करें और ट्रैफ़िक जांचने से पहले इंटरफ़ेस की पुष्टि करें। tun0 दिखना बताता है कि डेमन ने डिवाइस खोल दिया है। यह फ़ॉरवर्डिंग, firewall नियमों या ग्राहकों को मिलने वाले रूट के बारे में अभी कुछ नहीं कहता।
ये अलग सबूतों वाले अलग प्रश्न हैं। गायब डिवाइस पूर्वापेक्षा विफलता है; ऐसा टनल जो मौजूद है पर कुछ नहीं ढोता, नीति विफलता है।