इस लेख में हम दिखाएंगे कि बिल्ट-इन Windows 10 OpenSSH सर्वर का उपयोग करके SSH टनल के माध्यम से पोर्ट कैसे फॉरवर्ड करें। SSH पोर्ट फॉरवर्डिंग आपको ऐप पोर्ट को लोकल कंप्यूटर से रिमोट सर्वर और इसके विपरीत टनल (फॉरवर्ड) करने की अनुमति देता है। पहले SSH टनलिंग का उपयोग केवल Linux/Unix वातावरण में किया जाता था, लेकिन आज आप इसे Windows 10/Windows Server 2016 में भी उपयोग कर सकते हैं। यहां Windows पर SSH टनल (TCP पोर्ट 22) के माध्यम से RDP कनेक्शन का उपयोग करने का केस स्टडी है।
SSH टनलिंग का उपयोग ज्यादातर उन परिदृश्यों में किया जाता है जब आपको फायरवॉल के पीछे रिमोट कंप्यूटर से कनेक्ट करने की आवश्यकता होती है। उदाहरण के लिए, आपके पास केवल SSH पोर्ट खुला (TCP 22) वाला एक Windows Server है। अन्य सभी पोर्ट हार्डवेयर फायरवॉल या Windows Firewall द्वारा ब्लॉक हैं। आपका कार्य RDP क्लाइंट का उपयोग करके Windows Server से कनेक्ट करना है। यह असंभव लगता है क्योंकि रिमोट डेस्कटॉप पोर्ट 3389 फायरवॉल द्वारा ब्लॉक है। हालांकि, आप SSH टनल के माध्यम से पोर्ट फॉरवर्डिंग तकनीक का उपयोग कर सकते हैं।
यहां SSH टनलिंग के विशिष्ट उपयोग परिदृश्य हैं:
- Local TCP forwarding एक रिमोट सर्वर पर लोकल पोर्ट फॉरवर्डिंग है;
- Remote TCP forwarding एक लोकल कंप्यूटर पर रिमोट पोर्ट फॉरवर्डिंग है;
- Double SSH tunnel NAT के पीछे समर्पित पब्लिक IP पते के बिना कंप्यूटर को SSH सर्वर के माध्यम से जोड़ता है (यदि OpenVPN समाधान लागू नहीं है)।
SSH टनल के माध्यम से RDP एक्सेस (Local TCP Forwarding)
इस मोड में, आप अपने कंप्यूटर पर एक लोकल TCP पोर्ट बनाते हैं। इस पोर्ट के सभी कनेक्शन SSH टनल के माध्यम से रिमोट सर्वर पर निर्दिष्ट पोर्ट पर फॉरवर्ड किए जाते हैं। इस उदाहरण में, हम लोकल पोर्ट 8888 बनाएंगे, और इससे कनेक्शन को रिमोट Windows कंप्यूटर पर RDP पोर्ट 3389 पर फॉरवर्ड किया जाएगा। सामान्य कनेक्शन योजना नीचे दिखाई गई है।

बिल्ट-इन Windows 10 SSH क्लाइंट का उपयोग करके SSH टनल बनाने के लिए (Windows 10 1809 और Windows Server 2019 से Windows का हिस्सा), यह कमांड चलाएं:
ssh -L 8888:192.168.1.90:3389 root@192.168.1.90
SSH टनल को बैकग्राउंड में काम करने के लिए, –f पैरामीटर जोड़ें।

SSH टनल के माध्यम से रिमोट कंप्यूटर डेस्कटॉप से कनेक्ट करने के लिए, आपको RDP क्लाइंट (mstsc.exe) का उपयोग करके अपने कंप्यूटर के लोकल पोर्ट 8888 से कनेक्ट करना होगा:
127.0.0.1:8888

रिमोट कंप्यूटर में लॉगिन करें और RDP सत्र में सुरक्षित रूप से काम करें (लेकिन आप याद रखें कि पोर्ट 3389 अभी भी फायरवॉल द्वारा बंद है)। आप यह सुनिश्चित करने के लिए TCPView टूल का उपयोग कर सकते हैं कि RDP कनेक्शन लोकल है (RDP कनेक्शन स्थानीय रूप से चल रहे SSH सर्वर द्वारा शुरू किया गया है)।

कृपया ध्यान दें कि यदि आप अनएन्क्रिप्टेड ऐप ट्रैफिक को फॉरवर्ड करते हैं, तो यह पब्लिक नेटवर्क पर एन्क्रिप्टेड रूप से ट्रांसमिट होगा। ऐसा ट्रैफिक आपके SSH कनेक्शन के एक छोर पर एन्क्रिप्ट किया जाएगा और दूसरे पर डिक्रिप्ट किया जाएगा।
आपके लोकल नेटवर्क के अन्य कंप्यूटर भी इस मोड का उपयोग करके RDP सर्वर से कनेक्ट कर सकते हैं भले ही सीधा कनेक्शन अनुमति न हो (SSH और RDP दोनों के माध्यम से)। ऐसा करने के लिए, उन्हें RDP क्लाइंट के माध्यम से आपके कंप्यूटर पर पोर्ट नंबर 8888 से कनेक्ट करना होगा जहां SSH टनल बनाया गया है:
mstsc.exe /v 10.10.1.220:8888

लोकल कंप्यूटर पर रिमोट TCP फॉरवर्डिंग
SSH टनल का एक और उपयोग मामला है — रिमोट TCP फॉरवर्डिंग। SSH टनल का उपयोग करके, आप रिमोट सर्वर को अपने कंप्यूटर पर लोकल पोर्ट या आपके लोकल नेटवर्क में किसी अन्य कंप्यूटर पर पोर्ट तक पहुंचने की अनुमति दे सकते हैं। उदाहरण के लिए, आप चाहते हैं कि एक बाहरी सर्वर (200.168.1.90) आपकी इंट्रानेट साइट तक पहुंचे (इंटरनेट में प्रकाशित नहीं)। रिवर्स SSH टनल बनाने के लिए, इस कमांड का उपयोग करें:
ssh -R 8080:internalwww:80 user@200.168.1.90
रिमोट SSH सर्वर से internalwwww साइट तक पहुंच प्राप्त करने के लिए, ब्राउज़र में इस पते को टाइप करना पर्याप्त है: https://localhost:8080
सभी Windows संस्करणों में आप netsh interface portproxy command का उपयोग करके पोर्ट फॉरवर्डिंग नियम बना सकते हैं।
SSH टनल का उपयोग करके, आप पोर्ट फॉरवर्डिंग चेन बना सकते हैं। OpenSSH कॉन्फिग फाइल (%programdata%\ssh\sshd_config) में निम्न निर्देशों में से एक जोड़कर SSH टनलिंग को सक्षम या अक्षम करें:
AllowStreamLocalForwarding yes AllowTcpForwarding remote