macOS में टर्मिनल से VPN स्थिति: scutil, रूट या पिंग
सेवा की स्थिति, कर्नेल का रूट और एक असली अनुरोध तीन अलग सवालों के जवाब देते हैं। स्क्रिप्ट को सेवा पहचानकर्ता पर आधारित रखें और रूट भी जाँचें।
किसी डिप्लॉय स्क्रिप्ट में कॉपी शुरू होने से पहले यह जाँच होती है कि टनल चालू है या नहीं। तीन जवाब उपलब्ध हैं, और उनका मतलब एक नहीं है: वह सेवा-स्थिति जिसकी सूचना scutil देता है, कर्नेल द्वारा चुना गया रूट, और यह कि दूसरा सिरा वास्तव में जवाब देता है या नहीं। इनकी तुलना ही उस जाँच और उस जाँच के बीच फ़र्क है जो कॉपी का पूर्वानुमान लगाती है और जो सिर्फ़ लॉग सजाती है।
क्या VPN चालू है, इसके तीन जवाब
सेवा की स्थिति कंट्रोल-प्लेन का तथ्य है। macOS जानता है कि कोई कॉन्फ़िगरेशन कनेक्टेड है, क्योंकि उसकी क्लाइंट प्रक्रिया ने ऐसा कहा। रूट डेटा-प्लेन का तथ्य है: कर्नेल इस गंतव्य को उस इंटरफ़ेस से भेजेगा। पहुँच एक सिरे से दूसरे सिरे तक का तथ्य है, और यह ऐसी वजहों से विफल हो सकती है जो बाकी दोनों में से कोई नहीं देखता।
| Signal | Answers | Blind spot |
|---|---|---|
scutil --nc status | Is the service connected? | Third-party clients, wrong routes |
route -n get | Where would this go? | The peer may be down |
| A request to the far side | Does it work now? | Slow, and it changes state |
एक उपयोगी जाँच पहले दो को जोड़ती है और तीसरे को इस पुष्टि के रूप में लेती है कि पहले दोनों झूठ नहीं बोल रहे थे। अकेले कोई एक भी टाइमस्टैम्प लगा अनुमान है।
पहचानकर्ता पढ़ें, प्रदर्शित नाम नहीं
scutil --nc list
scutil --nc status "Office"
लिस्टिंग हर सेवा के लिए एक पंक्ति छापती है, और हर पंक्ति में कोष्ठक में स्थिति, फिर सेवा पहचानकर्ता, टाइप और प्रदर्शित नाम होता है। स्क्रिप्ट पहचानकर्ता पर लिखें, क्योंकि प्रदर्शित नाम वही है जो किसी ने सिस्टम सेटिंग्स में टाइप किया था और बिना सूचना बदल सकता है। स्टेटस कमांड एक शब्द छापता है और कुछ सेवा प्रकारों के लिए उसके बाद आँकड़े; उसी पहले शब्द का मिलान करें, पूरे आउटपुट में नाम ढूँढ़ने के बजाय, जो कहीं और भी आता है।
सेवा शुरू करने पर प्राधिकरण का संकेत आ सकता है या प्रोफ़ाइल प्रबंधित होने पर सीधे मना कर दिया जा सकता है। यह इनकार टनल की खराबी नहीं है; यह एक नीतिगत बयान है कि इसे कौन चालू कर सकता है।
तृतीय-पक्ष क्लाइंट सूची से छिपा रहता है
खाली सूची का मतलब यह नहीं कि कोई VPN नहीं है। सिस्टम की अपनी नेटवर्क सेटिंग्स में बनाए गए कॉन्फ़िगरेशन यहाँ दिखते हैं; कोई विक्रेता क्लाइंट, प्रबंधन प्रोफ़ाइल या तृतीय-पक्ष ऐप ऐसा सक्रिय टनल रख सकता है जो यह कमांड कभी नहीं देखता। अपनी सेवा के लिए उसका अपना टूल ही अधिकारी है। जिस क्लाइंट ने कभी उसके पास पंजीकरण नहीं किया, उसके बारे में scutil से पूछने पर कुछ नहीं मिलता, और कुछ न मिलना डिस्कनेक्टेड जैसा जवाब नहीं है।
जब सूची खाली हो पर ट्रैफ़िक स्पष्ट रूप से एन्क्रिप्टेड हो, तो इंटरफ़ेस देखें: अपेक्षित रेंज में पता वाला utun या ppp डिवाइस इस बात का सबूत है कि किसी ने टनल स्थापित किया। यह सेवा-स्थिति से कमज़ोर संकेत है, इसलिए इसे रूट जाँच के साथ जोड़ें, इंटरफ़ेस को पहचान का प्रमाण मानने के बजाय। कई क्लाइंट कई ऐसे इंटरफ़ेस बना सकते हैं, और उनमें से सिर्फ़ एक उस टनल का है जिसका आपने मतलब किया था।
स्थिति रूटिंग नहीं है
कनेक्टेड सेवा कहती है कि टनल मौजूद है। यह नहीं कहती कि आपका गंतव्य उसका उपयोग करता है। पते पढ़ें, फिर कर्नेल से सीधे पूछें:
ifconfig | grep -A4 utun
netstat -rn -f inet
route -n get 10.40.0.20
फ़ुल-टनल क्लाइंट टनल के ज़रिए डिफ़ॉल्ट रूट लगाता है; स्प्लिट-टनल क्लाइंट कुछ ख़ास निजी प्रीफ़िक्स लगाता है। दोनों Connected बताते हैं, और सिर्फ़ स्थिति जाँचने वाली स्क्रिप्ट ख़ुशी से ग़लत रास्ते पर चल पड़ेगी। टनल रोकने से ज़रूरी नहीं कि किसी दूसरे क्लाइंट के लगाए रूट हट जाएँ, और यही एक तरीक़ा है जिससे मशीन में एक ही समय कनेक्टेड सेवा और पुराना रूट दोनों होते हैं। उस गंतव्य को देखें जिसकी आपको परवाह है, पूरी रूट तालिका को नहीं।
नामकरण एक अलग समस्या है
दूसरी मशीनें Mac तक नाम से नहीं पहुँच पातीं जबकि उसका पता काम करता है, और यह VPN की खराबी बताया जाता है। स्थानीय होस्ट नाम, होस्ट नाम और DNS रिकॉर्ड तीन अलग चीज़ें हैं। scutil --get LocalHostName बोनजॉर नाम दिखाता है; sudo scutil --set HostName mac-office वह नाम सेट करता है जो सिस्टम बताता है।
इनमें से कोई भी सेटिंग ऑफ़िस ज़ोन में रिकॉर्ड नहीं बनाती। अगर दूसरे होस्ट को नाम DNS से हल करना है, तो ज़ोन का मालिक उसे जोड़े, या स्क्रिप्ट पते का उपयोग करे। स्थिर नाम सेट करने से घोषणाएँ एक जैसी रहती हैं; इससे रिज़ॉल्वर जवाब देने लगता है, ऐसा नहीं होता।
स्क्रिप्ट में सेवा पहचानकर्ता और अपेक्षित रूट का आकार साथ दर्ज करें, और कॉपी से पहले दोनों जाँचें। चालू पर ग़लत दिशा में भेजी गई टनल बिल्कुल उसी तरह विफल होती है जैसे कोई टनल न हो, और Connected कहने वाली लॉग पंक्ति अगले व्यक्ति को ग़लत जगह देखने भेज देगी।