← ब्लॉग

दो tailnet वाला जाल: एक पुरानी key जिसने गलत नेटवर्क बदल दिया

27 सितंबर 2026 · 6 मिनट में पढ़ें

ग्राहक अपने लीज़ वाले Mac तक Tailscale से पहुँचते हैं। SSH एक्सेस का नियम हम tailnet पॉलिसी में रखते हैं, और उसे कोड से मैनेज करते हैं। लीज़ शुरू होने पर ग्राहक का पता जोड़ा जाता है। लीज़ ख़त्म होने पर हटाया जाता है। यह एक छोटा, उबाऊ सिस्टम है। फिर एक दिन इसने बताया कि हर ग्राहक का एक्सेस चला गया है, और यह झूठ था।

टूल ने क्या बताया

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

नियम ख़ाली नहीं था। हम कोई और tailnet पढ़ रहे थे।

दो नेटवर्क, एक alias

अकाउंट में दो tailnet थे। एक में फ़्लीट है: लीज़ वाले Mac, हब, हर ग्राहक का शेयर। दूसरा सेटअप के समय का बचा हुआ एक पुराना निजी नेटवर्क था, जिसमें एक बंद मशीन और एक लैपटॉप था।

Tailscale API में आप tailnet का नाम दे सकते हैं, या - दे सकते हैं, जिसका मतलब है "जिस भी tailnet की बुलाने वाली key है"। हमारा कोड - देता था। यह तब तक ठीक है जब तक दो keys न हों। Keys एक जैसी दिखने वाली स्ट्रिंग हैं, इसलिए - चुपचाप उसी के पीछे चलता है जो environment में हो। एक पुरानी key एक कॉन्फ़िग फ़ाइल में घुस आई थी।

ख़तरनाक हिस्सा लिखना था

झूठ बोलने वाला read एक दोपहर बर्बाद करता है। झूठ बोलने वाला write एक हादसा बनता है। उसी टूल में एक रिपेयर मोड है, जो एक्सेस नियम को मौजूदा ग्राहकों से मिलाता है। गलत tailnet पर चलाने पर इसने ईमानदारी से तीन असली ग्राहकों के ईमेल पते पुराने नेटवर्क की पॉलिसी में लिख दिए। वहाँ उनका कोई असर नहीं था।

असल में किसी ग्राहक पर असर नहीं पड़ा, क्योंकि फ़्लीट वाला tailnet पूरे समय अछूता और सही था। पर कुछ मिनटों तक ऑटोमेशन गलत नेटवर्क का एक्सेस कंट्रोल बदल रहा था और सफलता बता रहा था।

फ़िक्स: नेटवर्क का नाम लें

हमने - देना बंद कर दिया। अब कोड फ़्लीट वाले tailnet का नाम साफ़ लिखता है। जो key उसे नहीं देख सकती, वह जो दिखे उसकी ओर भटकने की जगह साफ़ तौर पर फ़ेल होती है।

अब हर रन प्रिंट करता है कि उसने किस tailnet से बात की। अगर वह लाइन फ़्लीट की नहीं है, तो उसके नीचे के नतीजे बेमतलब हैं। और यह आपको उन पर कुछ करने से पहले पता चल जाता है।

आम सबक

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

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

सवाल

Tailscale API key कैसे तय करती है कि वह किस tailnet को बदलेगी?
Key एक ही tailnet की होती है, और API में tailnet का नाम '-' मतलब 'जिस भी tailnet की यह key है'। दो tailnet की दो keys एक जैसी दिखती हैं, इसलिए '-' चुपचाप key के पीछे चलता है।
दो tailnet को सुरक्षित तरीके से अलग कैसे पहचानें?
आँख से देखकर कभी नहीं। तुलना करें कि हर key कौन से डिवाइस लिस्ट कर पाती है। सही key को आपका फ़्लीट दिखता है। गलत key को वह दिखता है जो उस अकाउंट के पास और है।
क्या टूलिंग को कभी '-' वाला tailnet alias इस्तेमाल करना चाहिए?
लिखने वाले किसी भी काम के लिए नहीं। tailnet का नाम साफ़ लिखें। तब गलत नेटवर्क की key चुपचाप गलत ACL बदलने की जगह 404 के साथ फ़ेल होगी।

अपना हिसाब खुद लगाएँ: कैलकुलेटर देखें, या एक runner लीज़ करें।