OpenVPN iroute बनाम कर्नेल रूट: कौन-सा गायब है?
सर्वर के पास रूट है और ट्रैफ़िक फिर भी रुकता है। पथ का एक निर्णय कर्नेल का है और दूसरा पीयर का; जानें कि कौन-सा गायब है और क्या जाँचना है।
10.77.20.0/24 के लिए एक पैकेट OpenVPN सर्वर पर दो अलग निर्णय लेता है: ऑपरेटिंग सिस्टम को इसे VPN इंटरफ़ेस तक पहुँचाना होता है, और OpenVPN को जानना होता है कि कौन-सा जुड़ा क्लाइंट उस प्रीफ़िक्स का मालिक है। कर्नेल रूट न होने पर पैकेट टनल से पहले गिर जाता है, और पीयर रूट न होने पर टनल के बाद गिर जाता है। दूरस्थ LAN से दोनों विफलताएँ एक जैसी दिखती हैं, और यह पता लगाने के लिए कि आपके पास कौन-सी है, हर ओर एक कमांड चाहिए।
क्लासिक यूज़रस्पेस डेटा पथ में कर्नेल रूट पैकेट को टनल प्रक्रिया तक पहुँचाता है और iroute उस प्रक्रिया को बताता है कि इसे कौन-सा पीयर प्राप्त करेगा। कोई भी दूसरे का विकल्प नहीं है, और केवल एक ही रखने वाला कॉन्फ़िगरेशन पहले ping तक उचित दिखेगा।
दो निर्णय, एक रूट नहीं
एक साइट-टू-साइट लिंक की कल्पना करें जहाँ 10.77.20.0/24 एक ही क्लाइंट के पीछे है। सर्वर का कर्नेल रूट, उदाहरण के लिए ip route add 10.77.20.0/24 dev tun0, मेल खाते पैकेट टनल डिवाइस को भेजता है। इसके बाद OpenVPN क्लाइंट कॉन्फ़िगरेशन निर्देशिका की iroute प्रविष्टियों से बनी अपनी आंतरिक तालिका देखता है, ताकि तय कर सके कि कौन-सा पीयर कनेक्शन उन्हें प्राप्त करेगा। कर्नेल रूट के बिना पैकेट प्रक्रिया तक कभी नहीं पहुँचता, और पीयर रूट के बिना वह प्रक्रिया तक पहुँचता है और कहीं नहीं जाता।
उस विभाजन को भूलना आसान है, क्योंकि क्लाइंट प्रोफ़ाइल में एक रूट पंक्ति दोनों काम करती दिख सकती है। वह नहीं करती: रूट पुश करना क्लाइंट को बताता है कि टनल से क्या भेजना है, जबकि iroute सर्वर को बताता है कि क्लाइंट के पीछे की पता-श्रेणी किसकी है। ये अलग फ़ाइलों में रहते हैं, अलग पक्ष इन्हें पढ़ते हैं, और विपरीत दिशाओं में विफल होते हैं।
iroute कहाँ रहता है और क्या कहता है
प्रविष्टि क्लाइंट के common_name के नाम पर बनी प्रति-क्लाइंट फ़ाइल में, client-config-dir के अंतर्गत, iroute 10.77.20.0/24 के रूप में जाती है। फ़ाइल नाम का मेल सजावटी नहीं है: OpenVPN प्रमाणित पहचान खोजता है और ठीक उसी नाम की फ़ाइल पढ़ता है, इसलिए site-a नाम की फ़ाइल केवल उसी क्लाइंट पर लागू होती है जिसका सामान्य नाम site-a है। यदि ऐसी फ़ाइल के बिना वाले क्लाइंट को पूरी तरह अस्वीकार करना है तो ccd-exclusive जोड़ें, जो तब सही सेटिंग है जब हर क्लाइंट एक साइट गेटवे हो। हर गेटवे के लिए एक फ़ाइल रखें और उसे उसी प्रमाणपत्र विषय के नाम पर रखें जो आप वास्तव में जारी करते हैं।
दूरस्थ LAN को दोष देने से पहले सर्वर से प्रविष्टि जाँचें। स्थिति फ़ाइल जुड़े क्लाइंट को उनके सामान्य नामों के साथ सूचीबद्ध करती है, और --verb 4 पर चलने वाला सर्वर पीयर जुड़ते समय iroute स्थापित होने का लॉग रखता है। यदि जुड़ने के समय कुछ न दिखे, तो फ़ाइल गलत निर्देशिका में है या गलत पहचान का नाम दे रही है।
जाल: फ़ाइल मौजूद है, पहचान गलत
गलत पीयर से जुड़ा सही दिखने वाला iroute गायब फ़ाइल से अधिक समय बर्बाद करता है, क्योंकि डिस्क पर सब कुछ सही दिखता है। प्रमाणपत्रों का नाम बदलना, दोहरे सामान्य नाम, और प्रभावी पहचान बदलने वाला username-as-common-name, ये सब इसे बनाते हैं। जाँचें कि सर्वर ने कौन-सी पहचान प्रमाणित की, न कि आपने किसकी अपेक्षा की थी: स्थिति आउटपुट ही अधिकारिक है, जबकि फ़ाइल नाम केवल एक लुकअप कुंजी है।
रूट अपने मालिक से अधिक समय तक जीवित रह सकता है। स्थिर रूट और iroute प्रविष्टियाँ उपलब्धता की गारंटी नहीं, प्रीफ़िक्स बताती हैं, इसलिए ट्रैफ़िक ऐसे पीयर की ओर रूट होता रह सकता है जो इस समय डिस्कनेक्ट है।
पीयर के आगे का पथ पूरा करें
पीयर का स्वामित्व पथ के मध्य में है, अंत में नहीं। क्लाइंट को टनल से पैकेट अपने LAN में फ़ॉरवर्ड करने होते हैं, यानी उस होस्ट पर IP फ़ॉरवर्डिंग सक्षम हो और फ़ायरवॉल नियम पारगमन की अनुमति दे। दूरस्थ LAN के होस्ट को टनल पते के लिए वापसी पथ चाहिए: या तो गेटवे की ओर लौटता रूट, या क्लाइंट पक्ष पर जानबूझकर बनाया गया NAT डिज़ाइन। वितरण के डिफ़ॉल्ट को मान लेने के बजाय sysctl net.ipv4.ip_forward से क्लाइंट पर फ़ॉरवर्ड सेटिंग की पुष्टि करें।
यदि अन्य VPN क्लाइंट को उस सबनेट तक पहुँचना है, तो व्यवस्था फिर बढ़ती है: सर्वर को client-to-client चाहिए, और उन क्लाइंट को प्रीफ़िक्स टनल से रूट करना होगा। इनमें से कुछ भी सर्वर की अपनी रूट तालिका से नहीं आता।
सर्वर से नहीं, किसी वास्तविक स्रोत से एक गंतव्य सत्यापित करें। किसी असंबंधित LAN होस्ट से क्लाइंट के पीछे के होस्ट तक ping एक ही चाल में वापसी पथ, फ़ॉरवर्डिंग नियम और पीयर स्वामित्व की परीक्षा करता है, जबकि सफल handshake केवल पहचान सिद्ध करता है। फिर स्वामी पीयर को डिस्कनेक्ट करें और दर्ज करें कि रूट क्या करता है, क्योंकि वही उत्तर आपका विफलता-प्रकार है।