OpenWrt पॉलिसी राउटिंग: वह चेन जो स्थानीय DNS पकड़ती है
क्लाइंट की लुकअप और राउटर की अपनी लुकअप अलग-अलग हुक से प्रवेश करती हैं। prerouting पर लक्षित पॉलिसी हर LAN क्वेरी ढोती है और राउटर को ISP अपलिंक पर छोड़ देती है।
LAN के क्लाइंट टनल से हल करते हैं और राउटर की अपनी लुकअप चुपचाप ऐसा नहीं करती। पैकेज अपडेट, टाइम सिंक और डायनामिक DNS सब सामान्य अपलिंक से निकलते हैं, जबकि हर फ़ॉरवर्ड की गई क्वेरी VPN लेती है, और इंटरफ़ेस में कुछ भी यह नहीं बताता कि दो अलग रास्ते मौजूद हैं। व्याख्या पॉलिसी में बग नहीं है बल्कि यह सवाल है कि कौन-सा हुक पैकेट देखता है। दो फ़्लो, एक रिज़ॉल्वर पता, और उनमें से सिर्फ़ एक राउटर पार करता है। उन्हें अलग करना ही पूरा उपाय है।
दो फ़्लो, एक रिज़ॉल्वर पता
पहला फ़्लो वही है जो लोग कल्पना करते हैं। क्लाइंट राउटर के रिज़ॉल्वर से पूछता है, रिज़ॉल्वर ऊपर की ओर फ़ॉरवर्ड करता है, और वह फ़ॉरवर्ड किया गया पैकेट बाहर जाते समय राउटर से गुज़रता है। वह पैकेट फ़ॉरवर्ड किए गए ट्रैफ़िक को देखने वाली हर चीज़ के लिए दिखाई देता है।
दूसरा फ़्लो कभी कहीं से नहीं आता। राउटर इसे बनाता है, इसलिए कोई आने वाला पैकेट नहीं है और मिलान के लिए कोई फ़ॉरवर्डिंग चरण नहीं है।
दोनों एक ही रिज़ॉल्वर पते को लक्ष्य कर सकते हैं, और इसीलिए अंतर चूक जाना आसान है। वही गंतव्य, अलग उद्गम, अलग चेन। जैसे ही उद्गम दिखे, बाकी निदान पीछे चलता है।
फ़ॉरवर्ड किए गए और स्थानीय रूप से बने पैकेट अलग तरह से प्रवेश करते हैं
फ़ॉरवर्ड किए गए ट्रैफ़िक का मूल्यांकन तब होता है जब वह दूसरे इंटरफ़ेस से आता है। पॉलिसी राउटिंग पैकेज इसे prerouting चेन के रूप में दिखाते हैं, और वहाँ रखा नियम राउटर पार करने वाले हर पैकेट को देखता है। इसीलिए क्लाइंट की लुकअप ठीक वैसे ही व्यवहार करती है जैसे पॉलिसी बताती है, और इसीलिए राउटर उसे अनदेखा करता है। नियम गलत नहीं है, वह बस ऐसे हुक से जुड़ा है जहाँ राउटर कभी पहुँचता ही नहीं। उसे हटाइए, और वही मिलान काम करने लगता है।
स्थानीय रूप से बना ट्रैफ़िक राउटर पर किसी प्रक्रिया द्वारा बनता है और इसकी जगह आउटपुट पथ में प्रवेश करता है। इसे राउटर के अपने निर्णय से राउट किया जाता है और यह पॉलिसी से तभी मिलता है जब पॉलिसी उस चेन को कवर करती है। मिलान के लिए कोई आने वाला इंटरफ़ेस नहीं है और देखने के लिए कोई फ़ॉरवर्डिंग निर्णय नहीं है।
यह इस बात का गुण है कि पैकेट कहाँ जन्म लेते हैं, किसी खास पैकेज का नहीं। एक चेन के लिए लिखे नियम की दूसरे के बारे में बस कोई राय नहीं होती। कोई भी नियम ट्यूनिंग इसे नहीं बदलती।
आउटपुट चेन चुनिए, फिर मिलान को सँकरा कीजिए
उपाय यह है कि वही इरादा आउटपुट चेन से भी जोड़ा जाए, या जब राउटर की अपनी क्वेरी आपके लिए मायने रखती हों तो नियम को वहाँ ले जाया जाए। पॉलिसी राउटिंग पैकेज पर बने OpenWrt सेटअप में इसका मतलब है नियम की चेन सेटिंग में prerouting के बजाय output चुनना। अगर दोनों आबादी को कवरेज चाहिए तो दोनों नियम रखिए।
फिर सँकरा कीजिए कि नियम किससे मिलता है। रिज़ॉल्वर जिस पोर्ट का असल में उपयोग करता है उस पर गंतव्य रिज़ॉल्वर पते, राउटर जो कुछ बनाता है उसे टनल में भेजने से कहीं ज़्यादा छोटा निर्णय हैं।
दो चेनों को कवर करने वाला एक नियम लिखने की कोशिश के बजाय दोनों नियम स्पष्ट रखिए। अलग नियम पढ़ने में आसान हैं, और डिबग करते समय क्लाइंट ट्रैफ़िक को छेड़े बिना राउटर का पथ बंद करने देते हैं। वे काउंटरों को भी एक-एक करके अर्थपूर्ण बनाते हैं।
टनल का अपना ट्रांसपोर्ट नियम से बाहर रखिए
टनल का बाहरी कनेक्शन भी राउटर बनाता है। जो नियम सारा स्थानीय रूप से बना ट्रैफ़िक टनल में भेजता है वह टनल को उसके अपने ही ज़रिए राउट करेगा, और वह बिल्कुल भी नहीं उठेगा।
प्रबंधन पहुँच दूसरा शिकार है। राउटर से शुरू होने वाले प्रशासनिक सत्र, या उनके जवाब, बहुत चौड़े स्थानीय नियम से टनल में खिंच सकते हैं और LAN से अगम्य हो सकते हैं।
टनल के अंतिम बिंदु को मिलान से बाहर रखिए, और नियम को रिज़ॉल्वर पतों तक सीमित रखिए। यह DNS आवश्यकता के लिए काफ़ी है और इस पर सोचने के लिए काफ़ी छोटा है।
दोनों आबादी की जाँच कीजिए, एक की नहीं
राउटर को अपनी क्वेरी करते देखिए और नोट कीजिए कि कौन-से इंटरफ़ेस ने उसे ढोया। LAN होस्ट से लुकअप दोहराइए और नोट कीजिए कि उसने कौन-सा रास्ता लिया। पॉलिसी नियमों के काउंटर अनुमान के बिना दोनों जवाब दिखा देते हैं।
परिणामों को दो अलग खोजों की तरह लीजिए। टनल से हल करने वाला क्लाइंट राउटर के बारे में कुछ नहीं कहता, और सही हल करने वाला राउटर किसी दूसरे लिसनर पर बैठे क्लाइंट के बारे में कुछ नहीं कहता। उन्हें बदलाव रिकॉर्ड में अलग पंक्तियों के रूप में लिखिए।
पोर्ट भी जाँचिए: गंतव्य पोर्ट 53 से मिलान करने वाला नियम 853 पर DNS over TLS या HTTPS एंडपॉइंट से पहुँचने वाले रिज़ॉल्वर को चूक जाता है। जिस ट्रांसपोर्ट का कॉन्फ़िगर किया गया अपस्ट्रीम असल में उपयोग करता है उससे मिलान कीजिए, और लीक सही कारण से बंद होता है।