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

रूट मौजूद है पर कुछ बाहर नहीं जाता

पहले क्लाइंट की रूट तालिका जाँचें। default via 10.147.20.5 dev zt0 जैसी पंक्ति साबित करती है कि रूट इंस्टॉल हुआ, यह नहीं कि गंतव्य ट्रैफ़िक स्वीकार करेगा। अगला हॉप ऐसा सदस्य होना चाहिए जो उसे आगे भेजने को तैयार और सक्षम हो।

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

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

तीन हिस्से जो सभी सही होने चाहिए

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

PartWhere it livesWhat a failure looks like
Forwarding and NATExit node kernel and firewallTraffic arrives, no reply
Managed default routeZeroTier network controllerNo default via the tunnel on the member
Client acceptanceMember's per-network settingRoute offered but not installed
DNS behaviorClient resolver configurationPages fail by name, IP works

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

कंट्रोलर की पंक्ति अधिकृति है, कॉन्फ़िगरेशन नहीं। किसी सदस्य के ज़रिए 0.0.0.0/0 का ऐलान हर क्लाइंट को बताता है कि एग्ज़िट कहाँ है; यह उस सदस्य को ट्रैफ़िक ढोने में सक्षम नहीं बनाता। यह यह भी सत्यापित नहीं करता कि सदस्य के पास इंटरनेट तक काम करने वाला रास्ता है। ZeroTier का एग्ज़िट नोड दस्तावेज़ नोड, रूट और क्लाइंट के बीच वही विभाजन समझाता है।

एग्ज़िट नोड को आगे भेजने और अनुवाद के लिए सेट करें

IPv4 फ़ॉरवर्डिंग स्थायी रूप से सक्षम करें, फिर WAN इंटरफ़ेस छोड़ने वाले ट्रैफ़िक के लिए स्रोत NAT जोड़ें। फ़िल्टर नियमों को दोनों दिशाओं में फ़ॉरवर्ड किए गए प्रवाह की अनुमति देनी चाहिए, क्योंकि फ़ॉरवर्डिंग और अनुवाद अनुमति से अलग हैं:

sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i zt0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o zt0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

zt0 और eth0 को होस्ट पर मौजूद नामों से बदलें; किसी उदाहरण इंटरफ़ेस के लिए सहेजा गया नियम असली पर पैकेट का पीछा नहीं करता। बदलावों को उन नियमों का मालिक फ़ायरवॉल प्रबंधक के ज़रिए स्थायी बनाएँ, क्योंकि इंटरैक्टिव शेल में दिया आदेश अगली बार रीबूट पर गायब हो जाता है।

अगर होस्ट UFW या firewalld जैसा फ़ायरवॉल प्रबंधक चलाता है, तो iptables की पंक्तियाँ बगल में ढेर करने के बजाय उसी प्रबंधक से नियम जोड़ें। एक ही शृंखलाओं को संपादित करने वाले दो मालिक बूट क्रम पर निर्भर नीति बनाते हैं। क्रम तब मायने रखता है जब प्रबंधक अपनी शृंखलाएँ बनाता है। प्रबंधक को फिर से लोड करने के बाद क्लाइंट से परीक्षण करें, पहले नहीं।

रूट का ऐलान करें और क्लाइंट पर उसे स्वीकार करें

नेटवर्क कंट्रोलर पर 0.0.0.0/0 के लिए एक प्रबंधित रूट जोड़ें जिसका अगला हॉप एग्ज़िट सदस्य का ZeroTier पता हो। फिर जिस सदस्य को इसे इस्तेमाल करना चाहिए, उस पर उस नेटवर्क के लिए ओवरराइड की अनुमति दें। अनुमति स्थानीय है: यह दूसरे सदस्यों को फिर से कॉन्फ़िगर नहीं करती और कंट्रोलर नहीं बदलती।

zerotier-cli listnetworks
zerotier-cli set <network-id> allowDefault=1
ip route get 1.1.1.1

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

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

एग्ज़िट सत्यापित करें और दूसरे पता परिवार देखें

ऐसी सेवा से सार्वजनिक पता माँगें जो स्रोत बताती हो, और उसकी तुलना एग्ज़िट नोड के WAN पते से करें। फिर नाम वाली साइट लोड करके पुष्टि करें कि DNS अब भी हल होता है, और केवल ब्राउज़र नहीं बल्कि एक महत्वपूर्ण एप्लिकेशन भी जाँचें।

ड्यूल-स्टैक क्लाइंट अपना मूल IPv6 रास्ता इस्तेमाल करता रह सकता है जबकि IPv4 ZeroTier से बाहर जाता है। अगर लक्ष्य सारा ट्रैफ़िक छिपाना या नियंत्रित करना है, तो अलग ::/0 रूट और एग्ज़िट पर IPv6 फ़ॉरवर्डिंग ज़रूरी है, और IPv4 परीक्षण उनके बारे में कुछ नहीं कहता।

Linux का रिवर्स-पाथ फ़िल्टरिंग भी क्लाइंट पर वैध एग्ज़िट ट्रैफ़िक गिरा सकता है। ZeroTier भाग लेने वाले सदस्यों के लिए rp_filter पर विचार दर्ज करता है; उस सेटिंग को जानबूझकर और केवल रूट और NAT की पुष्टि के बाद बदलें, पहले प्रयोग के रूप में नहीं।

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

संबंधित लेख