VPN के ऊपर आने के बाद जो स्क्रिप्ट चलनी चाहिए, उसे कनेक्शन का मालिक कंपोनेंट से एक घटना चाहिए। पुरानी नेटवर्क हुक निर्देशिका में रखी गई फ़ाइल हर उस VPN के लिए कॉलबैक नहीं है जो NetworkManager, pppd या कोई स्वतंत्र OpenVPN प्रक्रिया बना सकती है। इनमें से हर मालिक अलग परिवेश के साथ अलग घटना बताता है, इसलिए हुक चुनने से पहले मालिक की पहचान करनी होगी। वरना स्क्रिप्ट सही है और बस कभी चलती ही नहीं।

NetworkManager द्वारा प्रबंधित VPN के लिए डिस्पैचर सही जगह है, और vpn-up सही क्रिया है।

इंटरफ़ेस घटना नहीं, vpn-up इस्तेमाल करें

डिस्पैचर up को vpn-up से अलग पहचानता है। पहला सक्रिय इंटरफ़ेस बताता है; दूसरा सक्रिय VPN कनेक्शन बताता है। Wi-Fi का ऊपर आना सिर्फ़ यह बताता है कि नीचे की कड़ी मौजूद है; सुरंग अभी बातचीत कर रही हो सकती है, या कभी प्रमाणित ही न हो।

स्क्रिप्ट इंटरफ़ेस और क्रिया पाती है, जबकि कनेक्शन का ब्यौरा परिवेश से आता है, जिसमें प्रोफ़ाइल UUID और VPN का IP इंटरफ़ेस शामिल है। डिवाइस नामों से पहचान अनुमान लगाने के बजाय वे चर पढ़ें।

मिलान को एक ही कनेक्शन तक सीमित रखें

कनेक्शन UUID या डिस्पैचर द्वारा दी गई किसी दूसरी पहचान पर मिलान करें, tun उपसर्ग या ppp0 पर नहीं। इंटरफ़ेस नाम स्थिर नहीं हैं, एक ही समय पर एक से ज़्यादा सुरंगें हो सकती हैं, और दो प्रोफ़ाइल एक ही प्रदर्शित नाम रख सकते हैं। tun उपसर्ग पर मिलान का मतलब है कि स्क्रिप्ट आख़िर में ऐसे कनेक्शन के लिए चलेगी जिसे किसी ने छूने की सोची भी नहीं थी। जब दोबारा जुड़ना डिवाइस को फिर से बनाता है तो यह एक प्रोफ़ाइल के लिए दो बार भी चल सकती है।

कार्य को इडेम्पोटेंट बनाएँ। हर बार बुलाए जाने पर रूट जोड़ने वाला कॉलबैक आख़िर में तालिका को दोहराव से भर देता है, और दूसरी प्रति ही रूटिंग तोड़ती है।

जानें कि सक्रियण क्या सिद्ध नहीं करता

vpn-pre-up NetworkManager के VPN को पूरी तरह सक्रिय बताने से पहले चलता है, और प्रबंधक उन स्क्रिप्टों की प्रतीक्षा करता है। अवरोधक चरण तभी इस्तेमाल करें जब कार्य वाकई वहीं का हो, क्योंकि धीमी जाँच उस सक्रियण को देर से करती है जिसे बाक़ी हर कंपोनेंट देखने का इंतज़ार कर रहा है।

रूट होने से यह सिद्ध नहीं होता कि कोई एप्लिकेशन सुन रहा है, कोई निजी नाम हल हो रहा है, या कोई उपयोगकर्ता सत्र मौजूद है। इन्हें सीमित समय-सीमा के साथ अलग जाँचें, और पूरी शृंखला दोबारा आज़माने के बजाय बताएँ कि कौन-सी परत असफल रही।

जिस संदर्भ में स्क्रिप्ट चलती है उसका सम्मान करें

डिस्पैचर की स्क्रिप्टें root के रूप में, किसी भी उपयोगकर्ता सत्र के बाहर चलती हैं। यह न मानें कि लॉग-इन उपयोगकर्ता का परिवेश, ग्राफ़िकल सत्र या खुला कीरिंग उपलब्ध है। किसी को भी डेस्कटॉप संदर्भ न होने पर हर क्रेडेंशियल को हर प्रक्रिया के लिए पठनीय बनाकर जवाब नहीं देना चाहिए। उपयोगकर्ता सत्र का काम किसी उपयोगकर्ता सेवा या सत्र सहायक में रखें, जिसे कॉलबैक उपयोगकर्ता का रूप धरे बिना संकेत दे सके।

स्क्रिप्ट पर स्वामित्व और अनुमतियाँ भी मायने रखती हैं। root के रूप में चलने वाली ऐसी फ़ाइल जिसे कोई भी उपयोगकर्ता बदल सकता है, विशेषाधिकार बढ़ाने का रास्ता है, और यह इस बात से स्वतंत्र निष्कर्ष है कि VPN का तर्क सही है या नहीं।

उस डिस्कनेक्ट की योजना बनाएँ जो कभी नहीं होता

NetworkManager दर्ज करता है कि अचानक समाप्ति या कनेक्टिविटी खोने जैसे ज़बरदस्ती डिस्कनेक्ट के लिए vpn-pre-down जारी नहीं होता। इसलिए सिर्फ़ सौम्य pre-down के आसपास बनी सफ़ाई बनावट से ही अधूरी है। स्क्रिप्ट जो भी साझा स्थिति बदलती है, उसे किसी दूसरे मालिक की ज़रूरत है जो क्रैश के बाद उसे बहाल कर सके, और उस पुनर्प्राप्ति पथ को मानने के बजाय परखना होगा।

सामान्य कनेक्शन, दोबारा जुड़ने, जानबूझकर डिस्कनेक्ट और खींची गई केबल के साथ हुक परखें। गोपनीय जानकारी दर्ज किए बिना UUID, क्रिया और जो इंटरफ़ेस चला उसे दर्ज करें। वही अभिलेख एकमात्र भरोसेमंद सबूत है कि हुक आपके इरादे के कनेक्शन के लिए चला, और वही अगला बदलाव सुरक्षित बनाता है।

संबंधित लेख