SSH और Nginx से खुद का HTTP टनल बनाएं

मूल शीर्षक: Self-hosted HTTP tunnels with SSH and Nginx

यह क्यों महत्वपूर्ण है

self-hosted tunnel के लिए third-party सेवाओं पर निर्भरता खत्म होती है, जो privacy और नियंत्रण के लिए महत्वपूर्ण है।

Vincent Bernat ने OpenSSH और Nginx का उपयोग करके self-hosted HTTP tunnel का तरीका अक्टूबर 2026 में साझा किया, जिससे localhost सेवाएं सुरक्षित रूप से इंटरनेट पर उपलब्ध कराई जा सकती हैं।

जब कोई localhost:8080 पर चल रहे ब्लॉग पोस्ट के preview को दूसरों के साथ साझा करना हो, तो ngrok, Cloudflare Quick Tunnels जैसे commercial विकल्प या frp, localtunnel जैसे self-hostable टूल काम आते हैं। लेकिन Bernat ने दिखाया कि केवल OpenSSH और Nginx से यह काम किया जा सकता है — बिना किसी अतिरिक्त client के।

प्रक्रिया सरल है: `ssh -N -R 0:localhost:8080 web02.luffy.cx` कमांड से remote server पर एक random port (जैसे 41535) allocate होती है। फिर Nginx को `*.ssh.luffy.cx` wildcard subdomain के लिए configure किया जाता है, जो उस port पर requests proxy करती है। DNS में wildcard CNAME और Let's Encrypt का DNS-01 challenge से wildcard certificate लिया जाता है।

सुरक्षा की दृष्टि से port number कमज़ोर secret है — kernel की local port range (~32768-60999) से लगभग 14.7 bits entropy मिलती है, जो पर्याप्त नहीं। इसलिए Bernat ने Nginx के `ngx_http_secure_link_module` का उपयोग किया। यह module MD5 hash को expiration timestamp और port के साथ मिलाकर URL में username के रूप में encode करता है। Client HTTP basic authentication से यह hash भेजता है, और Nginx `$remote_user` variable के ज़रिए इसे verify करता है। Expiration timestamp इसलिए ज़रूरी है क्योंकि बाद की SSH session उसी port को reuse कर सकती है।

स्रोत

vincent.bernat.ch — मूल लेख पढ़ें →