iPhone पर WireGuard DNS: डोमेन सिर्फ़ एक सर्च सफ़िक्स है
DNS लाइन में डोमेन जोड़ना स्प्लिट DNS जैसा दिखता है। Apple क्लाइंट पर यह सिर्फ़ छोटे नाम पूरे करता है, और हर क्वेरी फिर भी टनल रिज़ॉल्वर पर जाती है।
आप रिज़ॉल्वर पता और कंपनी डोमेन के साथ एक लाइन लिखते हैं, यह उम्मीद करते हुए कि सिर्फ़ उस डोमेन के नाम टनल रिज़ॉल्वर इस्तेमाल करेंगे। Apple क्लाइंट पर अब सभी नाम वहाँ जाते हैं, और डोमेन के छोटे नाम भी हल होते हैं। यह लाइन दो अलग काम करती है, और उनमें से सिर्फ़ एक इस बारे में है कि टनल कौन-सी क्वेरी संभालता है। दूसरा टाइपिंग की सुविधा है, जिसे इच्छापूर्ण पढ़ाई ने नीति तक पहुँचा दिया है।
DNS लाइन किसमें पार्स होती है
क्लाइंट एंट्री को सूची के रूप में पढ़ता है और हर आइटम को उसके आकार के अनुसार वर्गीकृत करता है। पते जैसा दिखने वाला कुछ भी DNS सर्वर बन जाता है; डोमेन जैसा दिखने वाला कुछ भी सर्च सफ़िक्स बन जाता है। दोनों टनल सेटिंग्स में पहुँचते हैं, पर अलग फ़ील्ड में। निजी रिज़ॉल्वर और एक आंतरिक डोमेन ले जाने वाली टनल के लिए एक उदाहरण लाइन ऐसी दिखती है।
DNS = 10.24.8.53, lab.internal.exampleपता रिज़ॉल्वर देता है। डोमेन एक सफ़िक्स देता है जो क्लाइंट को छोटा नाम टाइप करने देता है और सिस्टम को पूछने से पहले बाकी जोड़ने देता है। दोनों में से कोई भी रिज़ॉल्वर को उस डोमेन तक सीमित करने के बारे में कुछ नहीं कहता, और लोग ठीक यही हिस्सा चाहते हैं और पाते नहीं। प्लेटफ़ॉर्म पर सिर्फ़ एक फ़ील्ड यह प्रतिबंध व्यक्त कर सकता है, और वह यह फ़ील्ड नहीं है।
Apple के दो फ़ील्ड, दो अलग काम
Apple अपने DNS सेटिंग्स ऑब्जेक्ट में यह अंतर दिखाता है। सर्च-डोमेन सूची को एक-लेबल होस्टनेम को योग्य बनाने के लिए इस्तेमाल होने वाली सूची के रूप में दर्ज किया गया है: एक खाली होस्टनेम टाइप करें और सिस्टम बारी-बारी से हर सफ़िक्स जोड़ सकता है। यह पूर्णता का नियम है, रूटिंग का नियम नहीं। उस सूची में कुछ भी तय नहीं करता कि कौन-सा सर्वर पूछा जाएगा।
मैच-डोमेन सूची एक अलग गुण है। यह तय करती है कि कौन-से नेमस्पेस यह DNS सेटिंग्स इस्तेमाल करते हैं, और खाली एंट्री का मतलब डिफ़ॉल्ट डोमेन है, कोई ख़ास सफ़िक्स नहीं। पैकेट-टनल सेटिंग्स जनरेटर Apple क्लाइंट में उस मॉडल का पालन करता है। यह पार्स किए गए सर्च सफ़िक्स को सर्च सूची में डालता है, और सर्वर मौजूद होने पर मैच सूची को खाली स्ट्रिंग पर सेट करता है। नतीजा एक टनल रिज़ॉल्वर है जो सिस्टम जो भी उसे भेजता है उस सबका जवाब देता है, साथ में एक सफ़िक्स जो छोटे नामों में मदद करता है।
इसलिए उस लाइन पर डोमेन नेमस्पेस चयनक नहीं है। दूसरा जोड़ने से यह संकीर्ण नहीं होता कि टनल कौन-सी क्वेरी इस्तेमाल करता है, और हटाने से यह चौड़ा भी नहीं होता। सिर्फ़ एक चीज़ बदलती है: कितने छोटे नाम पूरे होते हैं।
क्यों हर नाम फिर भी टनल रिज़ॉल्वर तक पहुँचता है
खाली मैच एंट्री के साथ, टनल सामान्य नामों के लिए उम्मीदवार रिज़ॉल्वर है, सिर्फ़ कंपनी डोमेन के लिए नहीं। पूर्ण-टनल कॉन्फ़िगरेशन में यह आमतौर पर कम मायने रखता है, क्योंकि सारा ट्रैफ़िक वैसे भी टनल में है। स्प्लिट टनल में यह बहुत मायने रखता है। सार्वजनिक नाम अब ऐसे रिज़ॉल्वर से हल हो सकते हैं जो सिर्फ़ एक निजी ज़ोन रखता है, और विफलता टूटे VPN जैसी दिखती है जबकि वह वास्तव में ऐसा रिज़ॉल्वर है जो नेमस्पेस का सिर्फ़ एक हिस्सा जवाब देता है। टनल ठीक है, क्वेरी बाहर जाती हैं, और जवाब खाली लौटते हैं।
दो सुधार उपलब्ध हैं और वे अलग निर्णय हैं। टनल रिज़ॉल्वर को पूर्ण रिज़ॉल्वर बनाएँ जो सार्वजनिक नामों को स्वीकृत रास्ते से आगे भेजे, या डोमेन सूची की जगह क्लाइंट कॉन्फ़िगरेशन बदलकर सार्वजनिक नाम वहाँ भेजना बंद करें। पहला हर क्वेरी को टनल पर रखता है और अपस्ट्रीम पर भरोसा करता है। दूसरा कुछ क्वेरी स्थानीय रखता है और स्वीकार करता है कि टनल बंद होने पर निजी नाम हल होना बंद हो सकता है।
स्प्लिट DNS को असल में क्या चाहिए होगा
नेमस्पेस-सीमित रिज़ॉल्वर नीति के लिए ऐसा क्लाइंट चाहिए जो आपको उसे व्यक्त करने दे: Apple प्लेटफ़ॉर्म पर डोमेन मैच करें, या आप जो उत्पाद इस्तेमाल करते हैं उसमें समतुल्य सेटिंग। सिर्फ़ सर्वर और सफ़िक्स स्वीकार करने वाला कॉन्फ़िगरेशन फ़ील्ड इसे व्यक्त नहीं कर सकता, चाहे इसे कैसे भी विराम-चिह्नित किया जाए। प्रोफ़ाइल यह नीति ले जा सकती है क्योंकि वह कनेक्ट-समय के संकेत के बजाय प्रबंधित कॉन्फ़िगरेशन बताती है। वह डोमेन, सर्वर और यह बता सकती है कि जब वह डोमेन पहुँच से बाहर हो तो क्या होना चाहिए। सेटिंग और अनुबंध के बीच यही अंतर है।
प्रबंधित Apple डिवाइस पर यह आमतौर पर ऐसी कॉन्फ़िगरेशन प्रोफ़ाइल से दिया जाता है जो डोमेन-विशिष्ट DNS सेटिंग्स ले जाती है। यह WireGuard कॉन्फ़िगरेशन फ़ाइल से अलग तंत्र है, और दोनों साथ तभी रह सकते हैं जब क्लाइंट प्रोफ़ाइल का सम्मान करे। यह मानने से पहले कि दोनों उत्पाद एक जैसा व्यवहार करते हैं, देखें कि आपका क्लाइंट उस फ़ील्ड को असल में क्या कहता है। Mac पर एक wg-quick स्क्रिप्ट और iPhone पर WireGuard ऐप एक जैसी लाइनें पढ़ते हैं और उन्हें अलग परतों से इंस्टॉल करते हैं।
इंस्टॉल की गई सेटिंग्स पढ़ें, कॉन्फ़िग नहीं
Mac पर आप देख सकते हैं कि सिस्टम आख़िर में कहाँ पहुँचा, जो आपकी लिखी फ़ाइल दोबारा पढ़ने से ज़्यादा जानकारी देता है। रिज़ॉल्वर सूची दिखाती है कि कौन-से सर्वर किन डोमेन के लिए कॉन्फ़िगर हैं, और स्कोप्ड क्वेरी दिखाती हैं कि कौन जीता। लाइन को बिगाड़ने वाला क्लाइंट इसे आपकी लिखी फ़ाइल में नहीं, यहाँ दिखाता है। iOS पर समतुल्य कमांड लाइन नहीं है, इसलिए वहाँ सबूत एक नतीजा है: एक निजी नाम जो टनल से हल होता है, और एक सार्वजनिक नाम जिसका जवाब बताता है कि किस रिज़ॉल्वर ने जवाब दिया।
scutil --dns | grep -A3 resolver
networksetup -getdnsservers Wi-Fiये दो कमांड मौजूदा रिज़ॉल्वर कॉन्फ़िगरेशन और सक्रिय सेवा के DNS सर्वर छापते हैं। अगर टनल रिज़ॉल्वर बिना डोमेन प्रतिबंध के डिफ़ॉल्ट रिज़ॉल्वर के रूप में दिखता है, तो कॉन्फ़िगरेशन ठीक वही कर रहा है जो क्लाइंट ने माँगा था। इसे तंत्र बदलकर ठीक करें, दूसरा सफ़िक्स जोड़कर और व्यवहार बदलने की उम्मीद करके नहीं।