VPN क्लाइंट के रूप में Pi: एक प्रबंधक या अपनी स्क्रिप्ट?
Raspberry Pi पर NetworkManager प्रोफ़ाइल की तुलना हाथ से लिखी क्लाइंट स्क्रिप्ट से, जिसमें पूरा टनल, DNS, IPv6 और टनल गिरने पर व्यवहार शामिल है।
जिस Raspberry Pi को केवल अपना आउटबाउंड ट्रैफ़िक सुरक्षित करना है, उसके सामने दो वास्तविक डिज़ाइन हैं: नेटवर्क प्रबंधक को टनल का मालिक बनने दें, या ऐसी स्क्रिप्ट रखें जो उसकी मालिक हो। दोनों ट्रैफ़िक ले जा सकते हैं। वे अलग-अलग जगहों पर विफल होते हैं, और रात दो बजे दूर से जिस विफलता का निदान आप कर सकते हैं, वही चुनने योग्य है। मालिकी पर, IPv6 और DNS शामिल होने पर पूरे टनल का क्या अर्थ है पर, और टनल गिरने के क्षण में क्या होता है पर उनकी तुलना करें।
एक टनल के दो मालिक
डिज़ाइन A सिस्टम के नेटवर्क प्रबंधक के भीतर एक प्रोफ़ाइल है: आयातित OpenVPN प्रोफ़ाइल या मूल WireGuard कनेक्शन, जो बूट पर उसी सेवा द्वारा सक्रिय होता है जो Ethernet और Wi-Fi ऊपर लाती है। डिज़ाइन B आपकी अपनी यूनिट है जो क्लाइंट को सीधे चलाती है, रिज़ॉल्वर कॉन्फ़िगरेशन संपादित करती है और अपने रूट तथा फ़ायरवॉल नियम स्थापित करती है। दोनों वैध डिज़ाइन हैं; अंतर यह है कि राउटिंग तालिका बदलने की अनुमति किसे है।
विफलताएँ अलग हैं क्योंकि मालिक अलग हैं। A में, सक्रिय न होने वाली प्रोफ़ाइल इंटरफ़ेस ऊपर और टनल नीचे छोड़ देती है, और प्रबंधक के लॉग कारण बताते हैं। B में, आधी सफल होने वाली स्क्रिप्ट ऐसे रूट छोड़ जाती है जो उन्हें बनाने वाली प्रक्रिया के बाद भी बचे रहते हैं। दोनों चलाना सबसे बुरा परिणाम है: दो प्रक्रियाएँ डिफ़ॉल्ट रूट लिख रही हैं, बूट पर दो रिज़ॉल्वर संपादन होड़ कर रहे हैं, और घुमाने के लिए दो सीक्रेट सेट।
प्रत्येक टनल के लिए एक मालिक चुनें और कुछ भी परखने से पहले दूसरे को निष्क्रिय करें। दो मालिक का अर्थ यह भी है कि जब टनल ऊपर हो और कुछ भी हल न हो, तो देखने के दो स्थान हों। यही एक नियम Pi VPN चर्चाओं में वर्णित अधिकांश उलझी स्थितियों को रोकता है।
आयात क्या बनाता है, और क्या नहीं
Raspberry Pi OS Bookworm और उसके बाद डिफ़ॉल्ट नेटवर्क कॉन्फ़िगरेशन उपकरण NetworkManager है, इसलिए प्रोफ़ाइल क्लाइंट टनल का स्वाभाविक घर है। आयात के लिए मिलता-जुलता प्लगइन स्थापित होना चाहिए; उसके बिना आयात असमर्थित कनेक्शन प्रकार के संदेश के साथ विफल होता है, जो रुककर प्लगइन स्थापित करने का ईमानदार संकेत है।
nmcli connection import type openvpn file ./provider.ovpn
nmcli connection show
nmcli --ask connection up id provider-name
आयात एक प्रोफ़ाइल संग्रहीत करता है। यह सिद्ध नहीं करता कि दूसरा पक्ष पहुँच में है, और यह गारंटी नहीं देता कि फ़ाइल का हर निर्देश रूपांतरण के बाद बचा है। परिणामी कनेक्शन को फिर से पढ़ें और पहचान तथा भरोसा रखने वाले भागों को जाँचें: प्रमाणपत्र, दूरस्थ होस्ट और पोर्ट, और क्या पासवर्ड माँगा जाता है या संग्रहीत होता है।
--ask के साथ सक्रियण साझा मशीन पर शेल इतिहास से बाहर पासफ़्रेज़ रखता है। बिना देखरेख वाले Pi के लिए आप अंततः चाहेंगे कि प्रोफ़ाइल बूट पर ऊपर आए, जो हाथ से एक बार ऊपर लाने से अलग निर्णय है।
पूरा टनल, दोनों डिज़ाइनों की तुलना में
पूरा टनल रूट के बारे में दावा है, इरादे के बारे में नहीं, और दोनों डिज़ाइन इसे अलग तरह से व्यक्त करते हैं। प्रोफ़ाइल दृष्टिकोण प्रबंधक से डिफ़ॉल्ट रूट और उसकी रिज़ॉल्वर सेटिंग्स स्थापित करने को कहता है; स्क्रिप्ट दृष्टिकोण वही करता है जो स्क्रिप्ट कहती है, कुछ न करना भी शामिल। कोई भी डिज़ाइन IPv6 को कवर नहीं करता जब तक उसे न कहा जाए, और अछूता IPv6 डिफ़ॉल्ट रूट IPv4 के सही दिखने के दौरान ख़ुशी से टनल के बाहर ट्रैफ़िक ले जाएगा।
ip -4 route get 198.51.100.23
ip -6 route show default
resolvectl query example.org
रूट खोज के लिए प्रलेखन पता उपयोग करें और उसे ऐसे होस्ट से बदलें जिसे जाँचने की अनुमति आपको है। पहला आदेश दिखाता है कि Pi सामान्य गंतव्य के लिए कौन-सा इंटरफ़ेस उपयोग करता; दूसरा दिखाता है कि IPv6 डिफ़ॉल्ट रूट अभी भी है या नहीं; तीसरा सिद्ध करता है कि किस रिज़ॉल्वर ने उत्तर दिया। पूरे टनल के किसी भी दावे पर विश्वास करने से पहले तीनों पढ़ें।
यदि प्रदाता के निर्देश पूरे टनल का वादा करते हैं पर IPv6 डिफ़ॉल्ट रूट बचा रहता है, तो Pi लीक कर रहा है। अपलिंक पर IPv6 निष्क्रिय करें या प्रोफ़ाइल से उसका दावा करने को कहें, और बाद में पता लगाने के बजाय सचेत रूप से निर्णय लें।
खुली विफलता बनाम बंद विफलता
जब टनल गिरती है, तो अपना डिफ़ॉल्ट रूट खोने वाली राउटिंग तालिका सीधे भौतिक अपलिंक पर लौट जाती है, और ट्रैफ़िक खुले में चलता रहता है। यह खुली विफलता है, और जब तक कोई चीज़ न रोके, यह दोनों डिज़ाइनों का डिफ़ॉल्ट व्यवहार है। अधिकांश लोग इसे हफ़्तों बाद फ़ायरवॉल लॉग पढ़कर पता लगाते हैं।
बंद विफलता टनल नीचे होने पर आपको दूरस्थ पहुँच का खर्च देती है, इसलिए प्रबंधन पथ के लिए सचेत अपवाद चाहिए। एक तरीका ऐसा नियम है जो टनल के बाहर केवल VPN पीयर का पता अनुमत करता है:
sudo nft add table inet vpnkill
sudo nft 'add chain inet vpnkill out { type filter hook output priority 0; policy accept; }'
sudo nft add rule inet vpnkill out oifname != "tun0" ip daddr != 203.0.113.24 reject
परिचालन लागत की ईमानदार तुलना करें। प्रोफ़ाइल सामान्यतः यह नियम व्यक्त नहीं कर सकती, इसलिए बंद विफलता आपको स्क्रिप्ट डिज़ाइन की ओर या टनल से स्वतंत्र रूप से नियम स्थापित करने वाली छोटी यूनिट की ओर धकेलती है। किसी भी हाल में, एक हफ़्ते तक अस्वीकृतियाँ लॉग करें: मौन अस्वीकृति टूटी सेवा जैसी ही दिखती है, और जब कोई उपयोगकर्ता बताए कि एक साइट लोड होना बंद हो गया, तब आपको काउंटर चाहिए होगा।
बिना स्क्रीन वाले Pi के लिए चयन
यदि इमेज पहले से NetworkManager चलाती है, टनल को कुछ विचित्र नहीं चाहिए, और आप चाहते हैं कि वह अपलिंक का स्वतः अनुसरण करे, तो प्रोफ़ाइल लें। यदि आपको नीति राउटिंग, प्रत्येक गंतव्य के लिए चुने गए कई टनल, या ऐसा बंद-विफलता नियम चाहिए जो टनल ऊपर आने से पहले मौजूद होना चाहिए, तो स्क्रिप्ट लें और बूट क्रम तथा सफ़ाई सहित उसके हर भाग की मालिकी रखें। दोनों डिज़ाइन मिलाना किसी एक अकेले से अधिक महंगा है।
उनके बीच स्थानांतरण मुख्यतः क्रम का मामला है: पुराने मालिक को निष्क्रिय करें, पुष्टि करें कि कोई पुराना रूट या रिज़ॉल्वर प्रविष्टि नहीं बची, फिर नए को सक्रिय करें और दो बार पुनः आरंभ करें। एक पुनः आरंभ ऐसी दौड़ छिपा सकता है जिसे दूसरा उजागर करता है। टनल की नहीं, Pi की परख करके समाप्त करें: एक नाम हल करें, IPv4 से कुछ लाएँ, रखा हो तो IPv6 से लाएँ, फिर टनल गिराएँ और पुष्टि करें कि आपने जो व्यवहार चुना वह वास्तव में होता है। ip link में इंटरफ़ेस परीक्षण की शुरुआत है, अंत नहीं।