00:00:00यह है Headscale, Tailscale का एक फ्री और ओपन-सोर्स वर्ज़न जिसे आप किसी भी सर्वर पर इंस्टॉल कर सकते हैं,
00:00:06जो आपको अपने एन्क्रिप्टेड नेटवर्क पर पूरा कंट्रोल देता है, ताकि अगर इंटरनेट बंद हो जाए या Tailscale अचानक अपनी कीमतें बढ़ा दे, तो आपको फर्क न पड़े।
00:00:13लेकिन अजीब बात यह है कि Headscale को Tailscale के ही एक कर्मचारी ने बनाया है।
00:00:18वे अपने ही प्रतियोगी को बनाने के लिए किसी को पैसे क्यों दे रहे हैं?
00:00:22सब्सक्राइब बटन दबाएं और चलिए इसका पता लगाते हैं।
00:00:25विस्तार में जाने से पहले, चलिए जल्दी से Headscale को काम करते हुए देखते हैं।
00:00:30ठीक है, तो अभी मेरे पास तीन Hetzner सर्वर हैं, एक मेन Headscale कंट्रोल प्लेन के लिए और दो नोड्स यहाँ हैं, जिन्हें मैं एक-दूसरे से कनेक्ट करना चाहता हूँ।
00:00:40तो ये दोनों अभी मेरे एन्क्रिप्टेड नेटवर्क का हिस्सा हैं।
00:00:44चूंकि सब कुछ Docker पर चल रहा है, अगर मैं यह कमांड चलाऊं, तो मैं अपने मौजूदा नोड्स देख सकता हूँ, जो यहाँ “Ubuntu Test” और “Ubuntu Test 2” हैं।
00:00:53और ये वो IP एड्रेस हैं जिनका इस्तेमाल मैं उन्हें कनेक्ट करने के लिए कर सकता हूँ।
00:00:56फिलहाल, चलिए इन दो नोड्स को एक-दूसरे के अंदर से कनेक्ट करते हैं।
00:00:59तो सबसे पहले मैं इस IP एड्रेस को कॉपी करूँगा।
00:01:02और अब Ubuntu Test 2 के अंदर, मैं रूट (root) में SSH करने जा रहा हूँ।
00:01:07हाँ, मुझे रूट का इस्तेमाल नहीं करना चाहिए, लेकिन यह सिर्फ टेस्टिंग के लिए है।
00:01:09और यह Headscale का IP एड्रेस है।
00:01:11और अगर मैं एंटर दबाकर स्क्रीन क्लियर करूँ, तो जैसा कि आप देख सकते हैं, मैं Ubuntu Test 1 में हूँ।
00:01:17तो मैं Ubuntu Test 2 से Ubuntu Test 1 में आ गया हूँ, और वापस Ubuntu Test 2 पर जाने के लिए मैं एग्जिट (exit) कर सकता हूँ।
00:01:24और यही काम मैं Ubuntu Test 1 में भी कर सकता हूँ, अगर मैं SSH रूट लिखकर Ubuntu Test 2 का IP एड्रेस पेस्ट करूँ।
00:01:31और अगर मैं क्लियर करूँ, तो हम देख सकते हैं कि मैं Ubuntu Test 1 से Ubuntu Test 2 के अंदर हूँ।
00:01:36लेकिन अगर मैं टेलनेट (tailnet) के बाहर हूँ, यानी अगर मैं एक नया टैब खोलूँ जो मेरा मैक रूट है और फिर SSH रूट करके Ubuntu Test 2 का IP पेस्ट करूँ।
00:01:48तो आप देख सकते हैं कि यह बस अटक जाता है क्योंकि मैं टेलनेट के बाहर हूँ।
00:01:52जैसा कि आपने अभी देखा, Headscale आपको आपके नेटवर्क का पूरा एक्सेस देता है।
00:01:56आप हर छोटी डिटेल को कंट्रोल कर सकते हैं और बिना किसी वेंडर लॉकिंग के जितने चाहें उतने नोड्स जोड़ सकते हैं।
00:02:03और अगर आप इसे किसी पुराने Raspberry Pi वाले NAS से कनेक्ट कर दें, तो यह बिना इंटरनेट के भी काम कर सकता है।
00:02:08लेकिन इसका सेटअप थोड़ा पेचीदा है।
00:02:11असल में, चलिए मैं आपको दिखाता हूँ कि यह कैसे काम करता है।
00:02:13तो अभी मैंने “Ubuntu Test 3” नाम से एक नया सर्वर बनाया है, और मैं एक नया टेलनेट या एक नया एन्क्रिप्टेड सर्वर बनाऊँगा जिसमें एक नया यूजर होगा जो दो नोड्स को कनेक्ट करेगा।
00:02:24टेस्टिंग के लिए Ubuntu Test 3 और Ubuntu Test 1।
00:02:29मेरे Headscale कंट्रोल प्लेन के अंदर, Headscale पहले से ही इंस्टॉल है, लेकिन मैं आपको इसकी पूरी प्रक्रिया दिखा देता हूँ।
00:02:37अभी मेरे पास तीन Docker कंटेनर चल रहे हैं।
00:02:40एक Headscale UI है, एक Headscale है और दूसरा Caddy है।
00:02:45अगर हम इसके Docker compose फ़ाइल को देखें, तो यह कॉन्फ़िगरेशन Headscale के डॉक्यूमेंटेशन में दिए गए Docker compose जैसा ही है।
00:02:56हालाँकि मैंने Headscale वर्ज़न और अपनी डायरेक्टरीज़ के पाथ जैसी कुछ चीज़ें बदली हैं।
00:03:03अब मेरे पास Headscale UI के लिए भी एक कंटेनर है, जो उन कई ओपन सोर्स वेब UI में से एक है जिन्हें आप Headscale के साथ इस्तेमाल कर सकते हैं।
00:03:11और मैं आपको इसे थोड़ी देर बाद दिखाऊँगा।
00:03:13फिर यहाँ Caddy है जो रिवर्स प्रॉक्सी के रूप में काम करता है।
00:03:16अगर आप इसमें रुचि रखते हैं, तो डिस्क्रिप्शन में मैं इस खास Docker compose फ़ाइल का लिंक दे दूँगा।
00:03:21इस डायरेक्टरी में हमारे पास एक lib फ़ोल्डर और एक config फ़ोल्डर भी है।
00:03:26lib फ़ोल्डर, जैसा कि आप यहाँ देख सकते हैं, मुख्य रूप से SQLite डेटाबेस रखने के लिए है, जो यूजर की जानकारी, नोड की जानकारी, DNS और कई अन्य चीज़ों को कंट्रोल करता है।
00:03:36लेकिन कॉन्फ़िगरेशन में, अगर आप SQLite का इस्तेमाल नहीं करना चाहते, तो आप इसे Postgres डेटाबेस में बदल सकते हैं।
00:03:43फिर config डायरेक्टरी में tailscale कॉन्फ़िगरेशन और एक ह्यूमन-रीडेबल JSON फ़ाइल में एक्सेस कंट्रोल लिस्ट (ACL) पॉलिसी होती है।
00:03:52हम इसके बारे में बाद में बात करेंगे, लेकिन पहले इसे देखते हैं, जिसे आप tailscale के डॉक्यूमेंटेशन से ले सकते हैं और सीधे अपने सर्वर में curl भी कर सकते हैं, जैसा कि मैंने किया।
00:04:01लेकिन अगर हम GitHub पर उदाहरण कॉन्फ़िगरेशन देखें, तो हम सर्वर से लेकर प्रिफ़िक्स तक सब कुछ बदल सकते हैं और अपनी पॉलिसी फ़ाइल का लोकेशन जोड़ सकते हैं।
00:04:11अब यह मेरे कॉन्फ़िगरेशन से काफी मिलता-जुलता है, बस मैंने सर्वर URL बदला है, जो Cloudflare डोमेन से लिंक है ताकि मेरे नेटवर्क के नोड्स इस URL पर जाकर जान सकें कि दूसरे नोड्स कहाँ हैं।
00:04:23मैंने अपनी पॉलिसी का पाथ भी जोड़ दिया है और बस इतना ही।
00:04:28डोमेन एक सामान्य Cloudflare डोमेन है जिसमें एक A रिकॉर्ड है जो headscale सबडोमेन के तहत मेरे headscale कंट्रोल प्लेन के IP एड्रेस से जुड़ा है।
00:04:37और इसके तैयार होने के बाद, अगर मैं caddy फ़ाइल को देखूँ, तो आप देख सकते हैं कि हम दो URL इस्तेमाल कर रहे हैं, एक /web के तहत headscale UI के लिए और एक headscale प्रॉक्सी के लिए।
00:04:49एक बार जब ये चीज़ें तैयार हो जाएँ, तो सबसे पहला काम एक नया यूजर बनाना है, जो हम इस कमांड को टाइप करके कर सकते हैं।
00:04:56मैं “Tom” नाम का एक यूजर बना रहा हूँ, लेकिन यह नाम कुछ भी हो सकता है।
00:05:00अब यूजर बन गया है, हम “users list” चलाकर अपने सभी यूजर्स देख सकते हैं और यहाँ हमारा नया यूजर है जिसकी ID 6 है।
00:05:08लेकिन अभी हमारे यूजर के साथ कोई नोड नहीं जुड़ा है।
00:05:11तो चलिए टॉम को कुछ नोड्स देते हैं।
00:05:13Ubuntu test 3 के अंदर, जो नया सर्वर मैंने बनाया है, सबसे पहले हमें Tailscale क्लाइंट जोड़ना होगा, जो हम अपने सर्वर में यह कमांड चलाकर कर सकते हैं।
00:05:23और अब यह हमें Tailscale बाइनरी का एक्सेस दे देता है।
00:05:27ध्यान दें, अगर आप रूट यूजर नहीं हैं, तो आपको Tailscale चलाने के लिए sudo का इस्तेमाल करना पड़ सकता है।
00:05:31लेकिन Tailscale को चालू करने या लॉगिन करने के लिए कोई भी कमांड चलाने से पहले, हमें इसे एक खास तरीके से करना होगा जो headscale के साथ काम करे।
00:05:38ऐसा करने के लिए, हमें कुछ प्री-ऑथ (pre-auth) कीज़ बनानी होंगी, जिनका कमांड हमें headscale डॉक्यूमेंटेशन के “गेटिंग स्टार्टेड” पेज पर मिल जाएगा।
00:05:46तो मैं नीचे स्क्रॉल करके इस कमांड को कॉपी करता हूँ।
00:05:49फिर अपने headscale कंट्रोल प्लेन के अंदर, मैं “docker exec” लिखकर कमांड पेस्ट करूँगा।
00:05:54और यहाँ जहाँ यूजर ID लिखा है, हम टॉम की यूजर ID जोड़ेंगे, जो कि 6 है।
00:05:59और इसे करने से पहले, मुझे एक और “headscale” शब्द जोड़ना होगा क्योंकि हम headscale कंटेनर के अंदर जा रहे हैं।
00:06:04और अब हमारे पास हमारी प्री-ऑथ की (key) है।
00:06:07फिर हम इस कमांड को कॉपी करेंगे और इसे Ubuntu test 3 में पेस्ट करेंगे।
00:06:11फिर हम अपनी प्री-ऑथ की को कॉपी करेंगे और यहाँ पेस्ट करेंगे।
00:06:15और फिर हमें यहाँ लॉगिन सर्वर को अपने headscale सर्वर में बदलना होगा, जिसे हमने headscale.pandor.css कॉन्फ़िगर किया था।
00:06:23Pandora पहले ही किसी ने ले लिया था, वरना मैं वही रखता।
00:06:26तो अब अगर हम एंटर दबाते हैं, तो हमारे headscale नेटवर्क में एक नया नोड जुड़ जाना चाहिए।
00:06:31अब अगर हम वापस अपने कंट्रोल प्लेन पर जाएँ और “nodes list” चलाएँ, तो हमें यहाँ Ubuntu test 3 दिखना चाहिए, जो हमारे यूजर टॉम का है और जिसका यह IP और IPv6 एड्रेस है।
00:06:44अब चलिए Ubuntu test 1 को भी टॉम यूजर में जोड़ते हैं।
00:06:47लेकिन पहले मैं पुराने Ubuntu test नोड को डिलीट करूँगा जिसकी ID 1 है और मैं इसे फोर्स डिलीट करूँगा ताकि किसी कन्फर्मेशन की ज़रूरत न पड़े।
00:06:56और अब जब यह हो गया है, तो मैं एक और प्री-ऑथ की बनाऊँगा और उसे Ubuntu test में जोड़ दूँगा, और SSH फ्लैग के साथ SSH इनेबल करना नहीं भूलूँगा क्योंकि इसमें यह पहले से है।
00:07:06चलिए Ubuntu test 3 पर भी चलते हैं और वहाँ भी SSH सेटअप कर देते हैं, जो बस SSH के जरिए कनेक्ट होने की सुविधा देता है।
00:07:13अब, अगर मैं उपलब्ध नोड्स की लिस्ट देखूँ, तो मेरे पास नीचे Ubuntu test 1 और Ubuntu Test 3 हैं, दोनों टॉम के अंदर हैं।
00:07:20तो चलिए दोनों को कनेक्ट करते हैं।
00:07:21मैं Ubuntu test 3 का IP लूँगा और Ubuntu test 1 में जाऊँगा, फिर IP के साथ “SSH root” चलाऊँगा।
00:07:30और की (key) इनेबल करने के बाद, हम देख सकते हैं कि मैं Ubuntu test 1 से Ubuntu test 3 के अंदर हूँ।
00:07:35और यही मैं Ubuntu test 3 से Ubuntu test 1 में भी कर सकता हूँ।
00:07:41अब, अगर आपने मेरे स्टेप्स को ठीक से फॉलो किया है, तो बहुत मुमकिन है कि यह आपके लिए काम न करे क्योंकि आपको एक एक्सेस कंट्रोल पॉलिसी जोड़नी होगी।
00:07:49तो चलिए मैं आपको अपनी पॉलिसी दिखाता हूँ।
00:07:51अगर मैं इसे क्लियर करूँ और अपनी headscale डायरेक्टरी में जाऊँ, तो हम कॉन्फ़िगरेशन फ़ोल्डर में देख सकते हैं कि हमारे पास एक ACL ह्यूमन-रीडेबल JSON फ़ाइल है।
00:08:01और अगर मैं इसके अंदर जाऊँ, तो यहाँ एक बहुत ही आसान कॉन्फ़िगरेशन है जो मूल रूप से किसी भी सोर्स को, यानी मेरे नेटवर्क के किसी भी व्यक्ति को किसी भी डेस्टिनेशन या पोर्ट से जुड़ने की अनुमति देता है।
00:08:11और साथ ही SSH के तहत, यह मेरे टेलनेट के किसी भी नोड को स्वीकार करता है और उन्हें बिना किसी अप्रूवल के SSH के जरिए किसी भी दूसरे नोड से जुड़ने देता है, लेकिन सिर्फ रूट यूजर के लिए।
00:08:24अब ज़ाहिर है, अपने नेटवर्क और स्थिति के आधार पर, आप इसे और सख्त या सुरक्षित बनाना चाहेंगे ताकि कुछ खास नोड्स ही किसी खास पोर्ट पर दूसरे नोड्स से जुड़ सकें।
00:08:33लेकिन शुरुआत करने के लिए यह एक बहुत ही सरल कॉन्फ़िगरेशन है।
00:08:37और फिर से, मैं डिस्क्रिप्शन में इसका लिंक दे दूँगा।
00:08:40अब, आप सोच रहे होंगे कि headscale UI के बारे में क्या?
00:08:43क्या वह इस पूरी प्रक्रिया को आसान बनाता है?
00:08:45मैं कहूँगा हाँ भी और नहीं भी।
00:08:47चलिए मैं आपको दिखाता हूँ।
00:08:48तो यह मेरे headscale UI का URL है, और अभी आप मेरे दोनों यूजर्स, Tess और Tom को उनकी कुछ जानकारी के साथ देख सकते हैं।
00:08:57जैसे कि कीज़ और वो नोड्स जो इसके काम करने के लिए कनेक्टेड हैं।
00:09:01शुरुआत में, आपको एक headscale API की (key) जोड़नी होगी, जो आप इस कमांड को चलाकर प्राप्त कर सकते हैं।
00:09:06लेकिन मुझे इसके साथ डिवाइस व्यू (device view) में समस्या आई।
00:09:09जैसा कि आप देख सकते हैं, यहाँ ज्यादा जानकारी नहीं है, और यह कंसोल में टाइपस्क्रिप्ट टाइप एरर की वजह से है, जो कि मेरी गलती नहीं होनी चाहिए क्योंकि मैंने असल सोर्स कोड में कोई बदलाव नहीं किया है।
00:09:22लेकिन इस मोड़ पर, ऐप अक्सर फ्रीज़ हो जाता है, जिससे कुछ भी काम नहीं करता।
00:09:26मुझे यहाँ से एक नया डिवाइस जोड़ने और कुछ कॉन्फ़िगरेशन बदलने में सक्षम होना चाहिए।
00:09:32लेकिन क्योंकि यह बहुत बग्स से भरा है, इसलिए मुझे यह उतना उपयोगी नहीं लगा।
00:09:35अब और भी कई headscale UI मौजूद हैं, जिनमें से कुछ एक्सेस कंट्रोल पॉलिसी जोड़ना और भी आसान बना देते हैं।
00:09:42लेकिन मेरी राय में, मुझे कोई भी headscale UI बहुत उपयोगी नहीं लगा।
00:09:46तो हाँ, इसका सेटअप थोड़ा पेचीदा है।
00:09:49ठीक है, यह वाकई बहुत पेचीदा है।
00:09:51बिना टेक्निकल बैकग्राउंड वाला व्यक्ति या यहाँ तक कि एक जूनियर डेवलपर भी इसे अकेले सेटअप करने में संघर्ष करेगा।
00:09:57यही वजह है कि शायद Tailscale की टीम ने अपने कर्मचारी को इस पर काम करने दिया है क्योंकि फिलहाल यह उनकी कंपनी के लिए कोई बड़ा खतरा नहीं है।
00:10:07मेरा मतलब है, बस किसी को Claude Opus का इस्तेमाल करके इसके चारों ओर एक बहुत अच्छा UI बनाने की ज़रूरत है और वे कुछ बेहतरीन कर सकते हैं, जिसे शायद यह लाइसेंस दबा दे।
00:10:18लेकिन एक बार जब आप सब कुछ सेट कर लेते हैं, तो headscale बहुत ही शानदार तरीके से काम करता है।
00:10:22हालाँकि इसमें अभी भी कुछ फीचर्स की कमी है, जैसे कि 'funnel' और 'serve' कमांड, जिनका इस्तेमाल किसी सर्वर को सार्वजनिक रूप से या सिर्फ अपने नेटवर्क पर एक्सपोज करने के लिए किया जाता है।
00:10:32यह मल्टीपल टेलनेट्स, एफिमेरल (ephemeral) नोड्स और नेटिव नेटवर्क फ्लो लॉग्स को सपोर्ट नहीं करता है।
00:10:38लेकिन एक ओपन सोर्स टूल के लिए, यह वाकई प्रभावशाली है।
00:10:42और अगर मैं कभी उस स्थिति में पहुँचा जहाँ मैं अपना OpenClaw पूरी तरह से ऑफलाइन एक लोकल LLM के साथ चलाना चाहूँ, तो मैं इस पर विचार कर सकता हूँ।