पिछले महीने दो लोगों ने मुझसे उलटे नतीजे माँगे: एक चाहता था कि IPv6 VPN के दायरे में आए, दूसरा चाहता था कि दफ़्तर का प्रिंटर चलता रहे। एक ही रूट ::/0 अपने आप दोनों नहीं दे सकता। वह रूट सुरंग के अंदर आता है या नहीं, यह तीन शर्तों पर निर्भर है, और पहली शर्त अधिकांश व्यावसायिक एग्ज़िट के लिए उसे बाहर कर देती है। अगर एग्ज़िट IPv6 नहीं ढोता, तो डिफ़ॉल्ट रूट उसमें भेजने से आपका ट्रैफ़िक ऐसी सुरंग में छिप जाता है जिसके पास उसे भेजने की कोई जगह नहीं है।

तीन शर्तें जवाब तय करती हैं

डिफ़ॉल्ट रूट एक पंक्ति है, ::/0, और यह बिना ज़्यादा विशिष्ट रूट वाले किसी भी IPv6 गंतव्य से मेल खाता है (RFC 4291)। इसे इंस्टॉल करना आसान है। आपको यह करना चाहिए या नहीं, यह तीन शर्तों पर आता है।

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

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

What you seeDecision
Exit answers IPv6 probes, no local IPv6 devices to protectRoute ::/0 into the tunnel
Exit answers IPv6 probes, printer or NAS reachable by a global addressRoute ::/0, then give those prefixes a route of their own
Exit is IPv4-only inside the tunnelDo not route ::/0; block IPv6 on the client
Endpoint is reached over IPv6 and sits inside ::/0Install a host route for the endpoint first

क्या एग्ज़िट वाक़ई IPv6 ढोता है?

IPv6 पते वाला सुरंग इंटरफ़ेस दूसरी तरफ़ के बारे में कुछ साबित नहीं करता। कई व्यावसायिक प्रोफ़ाइल अंदर से केवल IPv4 हैं: सर्वर आपको v4 पता देता है और बाक़ी सब गिरा देता है। इसके ऊपर AllowedIPs से एक डिफ़ॉल्ट रूट लगाइए और कर्नेल ख़ुशी से IPv6 को ऐसे इंटरफ़ेस में भेजेगा जिसका साथी उसे कभी नहीं देखता।

सुरंग चालू रहने के दौरान क्लाइंट से जाँचिए। ping -6 -c 3 2001:4860:4860::8888 और ip -6 route get 2001:4860:4860::8888 अलग-अलग सवालों के जवाब देते हैं: कि जवाब लौटता है या नहीं, और कर्नेल ने कौन-सा डिवाइस चुना। जब दूसरा आपकी सुरंग का नाम ले और पहला कुछ न लौटाए, तो समस्या रूट में नहीं, एग्ज़िट में है।

अगर आप ख़ुद एग्ज़िट चलाते हैं, तो क्लाइंट जाँच पास हो सकती है और रास्ता फिर भी बंद गली में ख़त्म हो सकता है। गेटवे पर net.ipv6.conf.all.forwarding=1 की पुष्टि करें और यह भी कि उसका फ़ायरवॉल सुरंग से आगे भेजे गए पैकेट स्वीकार करता है। रीले करने से इनकार करने वाले एग्ज़िट में सही ढंग से रूट किया गया पैकेट क्लाइंट की तरफ़ से बिल्कुल रूटिंग बग जैसा दिखता है।

क्या क्लाइंट एंडपॉइंट तक अपना रास्ता बनाए रख सकता है?

यही वह मामला है जिसने मुझे ऐसे लैपटॉप पर फँसाया जिसका WireGuard एंडपॉइंट केवल IPv6 था। एंडपॉइंट का पता एक साधारण वैश्विक पता है, इसलिए वह ::/0 के अंदर आता है। पूरा प्रीफ़िक्स इंटरफ़ेस में रूट कीजिए और हैंडशेक पैकेट ख़ुद को उसी सुरंग में खदेड़ देंगे जिसे वे अभी बनाने की कोशिश कर रहे हैं। सुरंग कभी ऊपर नहीं आती, और क्लाइंट के आउटपुट में कुछ नहीं बताता कि क्यों।

wg-quick लिनक्स पर इसे संभालता है। यह AllowedIPs से रूट निकालता है, उन्हें अपनी तालिका में लगाता है, और एक नीति नियम जोड़ता है ताकि एंडपॉइंट तक ट्रैफ़िक पहले मुख्य तालिका से हल हो: वह suppress_prefixlength 0 नियम जो आपको ip -6 rule में मिलेगा। इसीलिए wg-quick up वहाँ सफल होता है जहाँ हाथ से लिखा ip -6 route add default dev wg0 आपको काट देता है।

सुरंग ऊपर उठाने से पहले और बाद में, दोनों स्थितियाँ ip -6 route get <endpoint-v6> से जाँचिए। अगर जवाब आपके सुरंग डिवाइस की ओर बदल जाए, तो आपने वह रास्ता हटा दिया जो सुरंग को चाहिए। जब आप रूट ख़ुद लिखें, तो मूल गेटवे से एंडपॉइंट तक एक होस्ट रूट जोड़ें, या IPv4 से एंडपॉइंट से जुड़ें और IPv6 पेलोड पर छोड़ दें।

सुरंग के बाहर क्या रहना चाहिए?

ज़्यादा विशिष्ट रूट डिफ़ॉल्ट को हरा देते हैं, इसलिए लिंक पर मौजूद प्रीफ़िक्स या अपना रूट रखने वाली ULA रेंज बिना अतिरिक्त मेहनत के चलती रहती है। यही वह शांत कारण है जिससे इतने सारे पूर्ण-सुरंग IPv4 सेटअप बचे रहते हैं: LAN प्रीफ़िक्स डिफ़ॉल्ट से ज़्यादा विशिष्ट होते हैं और कभी सुरंग में नहीं घुसते।

यह तब टूटता है जब कोई स्थानीय डिवाइस वैश्विक पते से पहुँच में हो, जो उस प्रिंटर के लिए सामान्य है जिसे उसी राउटर ने सार्वजनिक प्रीफ़िक्स दिया हो, NAS या टेलीविज़न के लिए। वे पते ::/0 से मेल खाते हैं और किसी और से नहीं, इसलिए वे बाक़ी सबके साथ सुरंग में चले जाते हैं और ग़ायब हो जाते हैं।

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

अगर जवाब न है, तो उसे ब्लॉक कीजिए

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

एक चुनिए और लिख लीजिए कि कौन-सा चुना। डिफ़ॉल्ट रूट कीजिए और ऊपर के समझौते स्वीकार कीजिए, या सुरंग जितनी देर रहे तब तक IPv6 बंद रखिए। सिर्फ़ AllowedIPs से प्रीफ़िक्स हटा देना काफ़ी नहीं है, क्योंकि ऑपरेटिंग सिस्टम अपना अलग डिफ़ॉल्ट रखता है। लिनक्स पर सीधा तरीका sysctl -w net.ipv6.conf.all.disable_ipv6=1 है; बारीक तरीका फ़ायरवॉल नियम से IPv6 को सुरंग के बाहर गिरा देता है। फ़ोन क्लाइंट में स्पष्ट IPv6-ब्लॉक टॉगल होता है जो वही काम करता है।

इसे लीक की तरह जाँचिए

सुरंग ऊपर उठाइए और टॉगल पर भरोसा करने के बजाय स्थिति पढ़िए। ip -6 route show default को एक डिफ़ॉल्ट दिखाना चाहिए, और आपके LAN के बाहर के गंतव्य के लिए ip -6 route get को सुरंग डिवाइस का नाम लेना चाहिए। डिस्कनेक्ट के बाद दोनों दोहराइए: सुरंग से आगे टिकने वाला डिफ़ॉल्ट वही बग है जिसे आप ढूँढ रहे थे।

फिर दूसरी दिशा जाँचिए। स्थानीय नेटवर्क के होस्ट से क्लाइंट तक उसके स्थानीय IPv6 पते पर पहुँचिए। अगर वह काम करना बंद कर दे, तो शर्त तीन कभी पूरी नहीं हुई थी, तब रूट टेबल जो भी दावा करती हो।

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

संबंधित लेख