राउटर सेटिंग बदले बिना लोकल सर्वर के लिए स्थायी HTTPS URL देने वाली SSH टनल सेवा बनाई है
(natnest.site)सेवा लिंक: https://natnest.site
क्लाइंट सोर्स: https://github.com/litdemon/natnest-client
नमस्ते। मैंने SSH reverse tunnel आधारित एक सेवा NatNest बनाई है, जो लोकल सर्वर को बाहरी दुनिया के लिए एक्सपोज़ करती है।
run local server 8080
natnest 8080 → https://yourname.natnest.site
इसे बनाने की वजह
मेरे घर में एक Mac mini है और मैं उस पर Ollama चलाता हूँ।
मैं उसे बाहर से भी इस्तेमाल करना चाहता था, लेकिन हर बार port forwarding सेट करना सबसे बड़ी रुकावट बन जाता था।
मैं राउटर के admin पेज में जाकर पोर्ट खोलकर इस्तेमाल करता था।
फिर Google में Dialogflow इस्तेमाल करते समय मुझे Webhook(fulfillment) रजिस्टर करना पड़ा।
उसके लिए https चाहिए था, और Domain व certificate तैयार करके Nginx चलाना, reverse proxy बनाना और सब जोड़ना पड़ता था।
दूसरे डेवलपर्स को भी उसी स्थिति में मेरे जैसे ही सारे काम करने पड़ते थे। समझाना भी मुश्किल था, इसलिए
"क्यों न इसे सीधे खुद ही बना लिया जाए?"
यही सोचकर NatNest की शुरुआत हुई।
मैंने सिर्फ Client ही नहीं बनाया। Nginx + Lua, Redis, DB, api server, Tunnel-server(ssh server) वगैरह कई सर्वरों को जोड़कर NatNest बनाया गया है।
इसे बनाते समय मुझे पता चला कि ngrok और Cloudflare Tunnel में पहले से इसी तरह की सेवाएँ मौजूद हैं T_T.
यह कैसे काम करता है
जब क्लाइंट(CLI) सर्वर से SSH reverse tunnel कनेक्ट करता है, तो सर्वर subdomain → internal port mapping को Redis में रजिस्टर करता है। उसके बाद जब बाहर से https://yourname.natnest.site पर request आती है, तो OpenResty(Nginx + Lua) Redis को देखकर उसे संबंधित SSH tunnel port पर proxy कर देता है।
बाहरी request → [Nginx + Lua] → Redis lookup → SSH tunnel port → लोकल सर्वर
क्लाइंट में बैकग्राउंड watchdog process SSH कनेक्शन को बनाए रखती है, इसलिए टर्मिनल बंद हो जाए या नेटवर्क थोड़ी देर के लिए कट जाए, तब भी 5 सेकंड के भीतर अपने-आप दोबारा कनेक्ट हो जाता है।
ngrok / Cloudflare Tunnel से यह कैसे अलग है
NatNest : स्थायी URL, self-hosting, webhook log viewer
Ngrok Free : स्थायी URL(❌), self-hosting नहीं, webhook log viewer (Pro या उससे ऊपर)
Cloudflare Tunnel : स्थायी URL(❌), Pro या उससे ऊपर, नहीं(❌)
यह मेरे जैसे लोगों के लिए सही विकल्प है जो चाहते हैं: "मुफ़्त में स्थायी URL, और डेटा मेरे अपने सर्वर पर"।
सबसे बड़ा फायदा यह है कि
मेरे पास Ngrok जैसी सेवा देने वाला एक solution है, और
यहाँ आने वाली टिप्पणियों में अगर कोई अच्छा फीचर सुझाया जाए तो उसे तुरंत लागू करने की फुर्ती भी है।
यह सच में डेवलपर्स की चाही गई सुविधाओं को समेटने की पहली सीढ़ी है।
मौजूदा स्थिति और ईमानदार सीमाएँ
v0.5.1 के आधार पर नीचे दिए गए फीचर काम कर रहे हैं:
- Google account linking(OAuth Device Flow) + SSH key auto-generation
- स्थायी subdomain + wildcard Let's Encrypt HTTPS auto-renewal
- वेब डैशबोर्ड(सक्रिय tunnel सूची, real-time webhook logs)
- Linux(amd64·arm64), macOS, Windows क्लाइंट binary
अभी कुछ कमियाँ भी हैं:
- Windows build CI/CD automation अभी अधूरी है (मैनुअल build की स्थिति)
- सर्वर एक single server है और घर से ऑपरेट हो रहा है, इसलिए latency है
- मैं सेवा अकेले चला रहा हूँ, इसलिए service-level stability(SLA) की गारंटी देना कठिन है
अगर आप इसे इंस्टॉल करके देखना चाहते हैं
Linux / macOS
curl -fsSL https://natnest.site/install.sh | bash
natnest setup # Google account लिंक
natnest 8080 # लोकल 8080 port को बाहर एक्सपोज़ करें
यह पहली बार है कि मैं इसे बाहरी तौर पर सार्वजनिक कर रहा हूँ, इसलिए अगर आपके पास उपयोग अनुभव या "ऐसा फीचर हो तो अच्छा रहेगा" जैसी राय हो, तो कृपया टिप्पणी में लिखें। मैं सच में आभारी रहूँगा।
4 टिप्पणियां
इंस्टॉल कमांड और होमपेज के ऊपर वाला GitHub लिंक 404 एरर दिखा रहे हैं।
टिप्पणी के लिए धन्यवाद। मैंने संशोधन लागू कर दिया है.
इससे भी बड़ी समस्या शायद यह लगती है कि डिज़ाइन बदलाव देखते ही साफ पता चलता है कि इसे AI ने बनाया है।
https://github.com/anderspitman/awesome-tunneling
Awesome Tunneling - ngrok के विकल्पों का संग्रह
tunnelजैसी चीज़ों की मांग काफ़ी ज़्यादा है, इसलिए उस तरह के कई विकल्प हैं। दूसरे services से भी reference लेना अच्छा रहेगा।ठीक लग रहा है। सेटिंग्स के झंझट से छुटकारा मिलता है