अतिरिक्त Mac VPN रूट को मालिक चाहिए, लॉगिन स्क्रिप्ट नहीं
लॉगिन के समय एक बार जोड़ा गया रूट फिर से जुड़ने की नीति नहीं है। दूर के प्रीफ़िक्स को मालिक दें और तय करें कि वे उस कनेक्शन के साथ कैसे प्रकट होते, बदलते और गायब होते हैं।
किसी VPN के ज़रिए निजी प्रीफ़िक्स तक पहुँचना एक ऐसी आवश्यकता है जिसकी अवधि होती है: यह तब तक लागू रहती है जब तक वह कनेक्शन उपयोगी है, और कनेक्शन खत्म होने पर खत्म हो जाती है। लॉगिन स्क्रिप्ट इसे व्यक्त नहीं कर सकती, क्योंकि लॉगिन और टनल का ऊपर आना अलग-अलग क्षण हैं, और लॉगिन के समय मौजूद टनल एक मिनट बाद ट्रैफ़िक ले जाने वाली टनल न भी हो। पहला फ़ैसला यह नहीं है कि कौन-सी कमांड चलाई जाए। फ़ैसला यह है कि प्रीफ़िक्स का मालिक कौन-सा घटक है।
प्रीफ़िक्स को मालिक चाहिए, पल नहीं
आवश्यकता को कर्ता वाला वाक्य लिखकर शुरू करें: पहुँचें 10.77.0.0/24 ऑफ़िस VPN के ज़रिए, जब तक वह कनेक्शन चालू है। वह वाक्य प्रीफ़िक्स, कनेक्शन और शर्त का नाम लेता है, और तुरंत दो लोकप्रिय विकल्पों को बाहर कर देता है: लॉगिन हुक और इंटरफ़ेस का नाम जैसे ppp0 या utun2.
इंटरफ़ेस के नाम रनटाइम पर दिए जाते हैं और फिर से जुड़ने के बीच स्थिर नहीं रहते। पिछले हफ़्ते देखे गए नाम से मेल खाने वाला हुक या तो चलेगा ही नहीं या किसी और के इंटरफ़ेस पर चलेगा। दोनों नतीजे राउटिंग बग की तरह दिखते हैं, न कि उस पुरानी धारणा की तरह जो वे हैं। यही आपत्ति हर ऐसी स्क्रिप्ट पर लागू होती है जो ऐसे नाम पर टिकी हो जो केवल तब तक मौजूद रहता है जब तक कोई एक विशेष टनल चालू हो।
रूट इरादे का समर्थित स्रोत इस्तेमाल करें
गेटवे, प्रबंधित प्रोफ़ाइल या मालिक क्लाइंट का प्रलेखित रूट तंत्र इसका सही ठिकाना है, जब भी वह तंत्र आवश्यकता व्यक्त कर सके। कौन-सा लागू होता है यह प्रोटोकॉल और प्रदाता पर निर्भर है, और कुंजियाँ उनके बीच यात्रा नहीं करतीं, इसलिए प्रोफ़ाइल कॉन्फ़िगर करने वाला मान OpenVPN मूल L2TP या IKEv2 क्लाइंट के बारे में कुछ नहीं बताता।
| Mechanism | Can carry extra prefixes | Who owns the lifetime |
|---|---|---|
| Gateway-pushed routes | Often, if the gateway is configured for it | The connection |
| Managed profile settings | Depends on the client and profile format | The profile |
| Provider tunnel settings | Yes, as included and excluded routes | The provider process |
| Manual command | Yes, once | Nobody |
पैकेट-टनल डेवलपर के लिए, Apple की IPv4 टनल सेटिंग्स शामिल और बहिष्कृत रूट स्पष्ट रूप से दिखाती हैं, और IPv6 का भी अपना समकक्ष है। ये वे API हैं जो प्रदाता इस्तेमाल करता है, यह प्रमाण नहीं कि हर मूल VPN पैनल व्यवस्थापक को मनमानी रूट सूची देता है। अगर मौजूदा संयोजन ज़रूरी प्रीफ़िक्स व्यक्त नहीं कर सकता, तो अगला कदम ऑपरेटर की ओर से समर्थित कॉन्फ़िगरेशन मार्ग है, कोई दूसरा ऐप नहीं जो बेहतर बर्ताव करेगा इस उम्मीद में इंस्टॉल किया जाए।
जीवनकाल में सफ़ाई शामिल है
कभी-कभी बाहरी सहायक सचमुच ज़रूरी होता है, और तब «रूट जोड़ें» उसके काम का सबसे छोटा हिस्सा है। उसे जानना होता है कि वह किस कनेक्शन की सेवा करता है और वह कनेक्शन कौन-सा इंटरफ़ेस इस्तेमाल कर रहा है, प्रासंगिक नेटवर्क स्थिति के स्थिर होने तक इंतज़ार करना होता है, लगातार दो बार चलने पर इडेम्पोटेंट रहना होता है, और ऐसा कुछ साफ़ नहीं करना होता जो उसने खुद इंस्टॉल न किया हो।
आखिरी शर्त ही दर्द देती है। ऑफ़िस प्रीफ़िक्स से मेल खाता हर रूट हटाने वाला सहायक देर-सबेर ऐसा रूट भी हटा देगा जो उसने नहीं जोड़ा था। नतीजा VPN क्लाइंट पर मढ़ा जाता है, क्योंकि क्लाइंट वही हिस्सा है जो उपयोगकर्ता देखता है। लिखने से पहले तय करना कि सहायक का मालिकाना क्या है, बाद में यह समझाने से सस्ता है कि स्थानीय सबनेट ने जवाब देना क्यों बंद कर दिया।
फिर से जुड़ने की दौड़
तेज़ फिर से जुड़ने की सोचें। सत्र A गिरता है, सत्र B ऊपर आकर अपना रूट इंस्टॉल करता है, और फिर A की देर से चलने वाली सफ़ाई आखिरकार चलती है। अगर वह सफ़ाई प्रीफ़िक्स से रूट हटाती है, तो वह B की वैध स्थिति भी ले जाती है, और एक सेकंड पहले चल रहा कनेक्शन अब कहीं नहीं रूट करता।
यह मालिकाना दौड़ है, और स्क्रिप्ट में नींद जोड़ने से सिर्फ़ यह बदलता है कि कौन-सा पक्ष जीतता है। हल यह है कि सफ़ाई को पहचान पर सशर्त बनाया जाए: सहायक ने जो इंटरफ़ेस और सत्र इंस्टॉल किए, उनकी तुलना अब भी मौजूद लोगों से करें, और सिर्फ़ मेल खाने पर हटाएँ।
क्या जाँचें, और रूट क्या नहीं कर सकता
स्वीकृति में चार संक्रमण शामिल होने चाहिए: पहला कनेक्शन, अलग इंटरफ़ेस पर फिर से जुड़ना, असफल कनेक्शन प्रयास, और अंतिम डिस्कनेक्ट। हर एक के बाद, दूर की ओर के किसी पते के लिए सिस्टम ने वास्तव में जो रूट चुना, उसे पढ़ें, उसे नहीं जिसकी आपको उम्मीद थी।
route -n get 10.77.0.5
netstat -rn -f inet
मुश्किल मामले भी उसी दौर में रखें: जहाँ ज़रूरी हो वहाँ IPv6, दूर के प्रीफ़िक्स से टकराता स्थानीय प्रीफ़िक्स, और खुद सार्वजनिक VPN एंडपॉइंट तक का रूट, जो टनल चालू रहने तक काम करता रहना चाहिए। फिर लिखें कि रूट क्या नहीं है। यह पैकेट चुनता है; यह दूर की ओर अनुमति नहीं देता और वापसी मार्ग नहीं बनाता, और वे अलग-अलग मालिकों वाली अलग-अलग आवश्यकताएँ ही रहती हैं।
आप जो नतीजा चाहते हैं वह ऐसा प्रीफ़िक्स है जो हर संक्रमण में अपने समर्थित कनेक्शन-मालिक का पीछा करे, न कि ऐसी कमांड जो जिस मशीन पर लिखी गई थी वहाँ एक बार संयोग से सफल रही।