नाम पतों में हल होते हैं, और वे पते फ़ायरवॉल सेट में पहुँच सकते हैं जो बाद में रूटिंग को प्रभावित करता है, जिससे प्रॉक्सी के बिना नाम-आधारित स्टीयरिंग संभव हो जाती है। पेच यह है कि चार घटकों को ठीक से हैंडऑफ़ करना होता है: रिज़ॉल्वर, सेट, नए फ़्लो को चिह्नित करने वाला वर्गीकरणकर्ता, और उसे ले जाने वाला पीयर। हर हैंडऑफ़ अलग तरह से विफल होता है और हर एक अपना समय रखता है।

डिज़ाइन को कॉन्फ़िगरेशन नहीं, बल्कि श्रृंखला मानें। हर चरण पर सवाल यह है कि कौन-सा घटक निर्णय का स्वामी है और जब उसका इनपुट न हो तो क्या होता है।

DNS उत्तर क्या कर सकता है और क्या नहीं

dnsmasq उत्तरों से पते nftables सेट में कॉपी कर सकता है, जो फ़ीड है, रूटिंग निर्णय नहीं। वह विकल्प, जो dnsmasq मैनुअल में प्रलेखित है, परिवार, तालिका और सेट का नाम बताता है, और उसका शुरुआती 4# केवल A रिकॉर्ड चुनता है, इसलिए v6 गंतव्यों को अपनी अलग व्यवस्था चाहिए। सेट पहले से मौजूद होना चाहिए, क्योंकि रिज़ॉल्वर उस चीज़ में तत्व जोड़ता है जो फ़ायरवॉल के मालिक ने बनाई। उस चरण में कुछ भी इंटरफ़ेस, तालिका या पीयर नहीं चुनता।

क्लाइंट को भी नाम के लिए वही रिज़ॉल्वर इस्तेमाल करना होता है। अपना एन्क्रिप्टेड DNS रखने वाला ऐप्लिकेशन, या नीति से पहले का कैश किया उत्तर, सेट में कोई प्रविष्टि बनाए बिना जुड़ जाता है।

सेट इनपुट है, रूट नहीं

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

nft add set inet vpn_select office_v4 { type ipv4_addr\; }
ip rule add fwmark 0x40 table 200
ip route add default dev wg0 table 200
wg show wg0 allowed-ips

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

मार्क, तालिकाएँ और पीयर कवरेज

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

टनल के अपने बाहरी पैकेट को वर्गीकरणकर्ता से बचना होता है। WireGuard औज़ार ठीक इसी उद्देश्य के लिए सॉकेट मार्क देते हैं, और उसका उपयोग एन्कैप्सुलेशन को उस इंटरफ़ेस में वापस रूट होने से रोकता है जिसे वह बना रहा है।

हर आयु को अलग जाँचें

तीन भंडार तीन समय-सारिणयों पर पुराने होते हैं: रिज़ॉल्वर कैश, सेट के तत्व और ट्रैक किया गया कनेक्शन। उन्हें उसी क्रम में जाँचें और देखें कि हर एक तब हिलता है जब चाहिए। नीचे के कमांड बिना कुछ बदले रिज़ॉल्वर, सेट, कनेक्शन तालिका और नीति नियम पढ़ते हैं।

dig +short office.example
nft list set inet vpn_select office_v4
conntrack -L -d 10.60.8.15
ip rule show

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

जहाँ आवश्यकता यह है कि कोई खास नाम हमेशा एक ही पथ इस्तेमाल करे, वहाँ DNS से भरा सेट यह साबित नहीं कर सकता, क्योंकि साझा पते दूसरे नाम भी ढोते हैं। प्रॉक्सी या एप्लिकेशन-स्तर का तंत्र उस गारंटी का औज़ार है।

संबंधित लेख