AllowedIPs एक राउटिंग सूची है, फ़ायरवॉल नियम नहीं
यह बाहर जाते ट्रैफ़िक के लिए पीयर चुनता है और अंदर आते स्रोतों को सत्यापित करता है। यह एक्सेस सूची नहीं है, और रूट प्रबंधन बंद करने से स्प्लिट टनल ठीक नहीं होता।
अधिकांश लोग AllowedIPs को अनुमति सूची की तरह पढ़ते हैं, यानी उन पतों का समूह जो किसी पीयर से जुड़ सकते हैं, लगभग टनल के लिए लिखे फ़ायरवॉल नियम जैसा। ऐसा नहीं है। यह फ़ील्ड दोनों दिशाओं में काम करने वाली राउटिंग तालिका है: यह बाहर जाते पैकेट के लिए पीयर चुनती है और अंदर आते पैकेट के स्रोत को सत्यापित करती है। इसे एक्सेस सूची की तरह पढ़ने से ऐसी कॉन्फ़िगरेशन बनती हैं जो ऐसा ट्रैफ़िक रूट करती हैं जिसे किसी ने नहीं माँगा।
एक फ़ील्ड, दो पाठक: बाहर जाने का चयन और स्रोत जाँच
क्लाइंट पर, प्रीफ़िक्स तय करते हैं कि कौन-से गंतव्य उस पीयर तक जाते हैं और कौन-से सामान्य नेटवर्क पर रहते हैं। इसलिए 0.0.0.0/0 के लिए प्रविष्टि हर IPv4 गंतव्य को पकड़ लेती है, और इसीलिए पूर्ण टनल प्रोफ़ाइल आयात करने पर सामान्य ब्राउज़िंग दूर की मशीन से होकर जाती है। सँकरी प्रविष्टियाँ उल्टा करती हैं: वे केवल उन नेटवर्क को रूट करती हैं जो आपने सूचीबद्ध किए और बाकी सब कुछ जहाँ था वहीं छोड़ देती हैं। WireGuard दस्तावेज़ का क्रिप्टोकी राउटिंग अनुभाग दोनों काम एक ही जगह बताता है: बाहर जाते पीयर का चयन और अंदर आते स्रोत का सत्यापन।
सर्वर पर, वही फ़ील्ड बताता है कि हर पीयर किन स्रोत पतों का उपयोग कर सकता है। यह पैकेट फ़िल्टर नहीं बल्कि क्रिप्टोग्राफ़िक जाँच है: जिस पैकेट का भीतरी स्रोत पीयर की सूची से मेल नहीं खाता, वह होस्ट के किसी भी फ़ायरवॉल के देखने से पहले WireGuard के भीतर ही गिरा दिया जाता है। दोनों काम एक ही सूची साझा करते हैं, और इसीलिए कहीं और से कॉपी की गई सूची उस जगह पर गलत व्यवहार करती है जिस पर आपने विचार नहीं किया।
क्लाइंट ब्लॉक वह जगह है जहाँ से यह अधिकांश भ्रम शुरू होता है। स्प्लिट टनल दूर के नेटवर्क के नाम देता है, और पूर्ण टनल वही फ़ील्ड है जिसमें डिफ़ॉल्ट प्रीफ़िक्स होता है:
[Peer]
# split tunnel: only these networks
AllowedIPs = 10.77.0.0/24, 192.168.30.0/24
[Peer]
# full tunnel: everything, both families
AllowedIPs = 0.0.0.0/0, ::/0
दोनों रूप अपने आप में पूरे हैं, और वे चरण नहीं बल्कि विकल्प हैं। पहला केवल वे दो नेटवर्क टनल से भेजता है; दूसरा हर गंतव्य भेजता है, और ::/0 प्रविष्टि IPv4 डिफ़ॉल्ट में IPv6 जोड़ती है। आप जो भी चुनें, wg-quick के रूट स्थापित करना शुरू करते ही वे प्रीफ़िक्स उस पीयर के लिए पूरा राउटिंग निर्णय हैं।
हब को अलग सूची चाहिए
हब हर क्लाइंट के टनल पते को होस्ट प्रीफ़िक्स के रूप में सूचीबद्ध करता है, साथ ही वह हर नेटवर्क जो वास्तव में उस क्लाइंट के पीछे है। किसी क्लाइंट की चौड़ी सूची को हर हब पीयर पर कॉपी करना हब को बताता है कि कई पीयर एक ही पतों को स्रोत के रूप में दे सकते हैं, और यह पता योजना नहीं है। Endpoint फ़ील्ड पूरी तरह दूसरी परत का है: यह पीयर का बाहरी पता और पोर्ट बताता है, कभी टनल के भीतर का गंतव्य नहीं।
[Peer]
# laptop: tunnel address 10.77.0.2, office LAN behind it
AllowedIPs = 10.77.0.2/32, 192.168.30.0/24
होस्ट प्रीफ़िक्स टनल पता ले जाता है और नेटवर्क प्रीफ़िक्स वह ले जाता है जो क्लाइंट के पीछे है, और दोनों ज़रूरी हैं। होस्ट प्रीफ़िक्स के बिना हब क्लाइंट का अपना ट्रैफ़िक वापस नहीं भेज सकता, और नेटवर्क प्रीफ़िक्स के बिना उसके पीछे का LAN अगम्य रहता है; जिस पीयर के पीछे कुछ नहीं है उसे केवल होस्ट प्रीफ़िक्स मिलता है।
रूट स्थापना छोड़ने से अंतराल रह जाता है
wg-quick, वह सहायक जो कॉन्फ़िगरेशन फ़ाइल से इंटरफ़ेस उठाता है, उस काम के हिस्से के रूप में इंटरफ़ेस पते और रूट स्थापित करता है। Table = off सेट करना सहायक से कहता है कि रूट का काम छोड़ दे, जो कोई विकल्प स्थापित नहीं करता और निजी नेटवर्क को सुलभ नहीं बनाता। जब स्वचालित रूट काम कर रहे हों, तो ज़रूरी प्रीफ़िक्स के नाम बताना ज़्यादा स्पष्ट कॉन्फ़िगरेशन है। रूट प्रबंधन बंद करके विकल्प अलिखित छोड़ना डिज़ाइन नहीं, एक चूक है।
मूल wg उपकरण अलग व्यवहार करता है: यह इंटरफ़ेस कॉन्फ़िगर करता है और रूट को कभी नहीं छूता, इसलिए सीधे उस पर बना सेटअप अपने रूट कमांड चाहता है। एक उपकरण के लिए लिखे निर्देश दूसरे के साथ चलाने पर गलत लग सकते हैं। सफल ping भी कमज़ोर प्रमाण है, क्योंकि यह एक ही पथ जाँचता है, हर उस एप्लिकेशन पथ को नहीं जिसकी आपको ज़रूरत है।
DNS और IPv6 अलग-अलग तय होते हैं
टनल जिस DNS सर्वर पते की घोषणा करता है उसे जाँचें, और पुष्टि करें कि आपके चुने प्रीफ़िक्स के ज़रिए उस पते तक रूट मौजूद है। रिज़ॉल्वर सेटिंग रिज़ॉल्वर को सुलभ नहीं बनाती, और टनल को सँकरा करने से वह रूट चुपचाप हट सकता है जो वहाँ जाता था। IPv6 को भी अलग से देखें, क्योंकि सही IPv4 विभाजन उस IPv6 डिफ़ॉल्ट रूट के बारे में कुछ नहीं कहता जो अब भी भौतिक लिंक की ओर इशारा करता है। एक पीयर ब्लॉक संपादित करते समय तीन अलग निर्णय एक साथ बदल सकते हैं।
फिर किसी ज्ञात आरंभिक कॉन्फ़िगरेशन से एक निजी संसाधन और एक सामान्य वेबसाइट खोलें। यदि संसाधन उत्तर देता है और ब्राउज़िंग अब भी स्थानीय कनेक्शन से बाहर जाती है, तो स्प्लिट वही कर रहा है जो आपने माँगा। यदि उसी क्षण ब्राउज़िंग टूट जाती है, तो टनल ने डिफ़ॉल्ट रूट ले लिया है और प्रीफ़िक्स सूची वह जगह है जहाँ देखना चाहिए।