छेनी के माध्यम से ग्राहकों के बीच पोर्ट अग्रेषण: L3 के बिना एक स्ट्रिप्ड-डाउन सुरंग

जब दो डिवाइस NAT या सख्त फ़ायरवॉल के पीछे होते हैं और एक दूसरे को सीधे “देख” नहीं सकते हैं, तो वीपीएन मानक समाधान प्रतीत होता है। लेकिन एक पूर्ण विकसित L3 सुरंग (जैसे वायरगार्ड या ओपनवीपीएन) अक्सर अनावश्यक होती है: इसके लिए रूट अधिकारों की आवश्यकता होती है, वर्चुअल इंटरफेस स्थापित करना पड़ता है, और मौजूदा मार्गों के साथ टकराव हो सकता है।

ऐसे मामलों में, छेनी का उपयोग करना सुविधाजनक है – एक टीसीपी/यूडीपी सुरंग जो HTTP के शीर्ष पर चलती है और डेटा ट्रांसफर के लिए वेबसॉकेट का उपयोग करती है। इस नोट में मैं दिखाऊंगा कि एक इंटरमीडिएट सर्वर के माध्यम से एक क्लाइंट से दूसरे क्लाइंट तक पोर्ट को “फॉरवर्ड” कैसे किया जाए।

यह कैसे काम करता है?

स्थिति की कल्पना करें: आपके पास क्लाइंट A (उदाहरण के लिए, आपका होम सर्वर), क्लाइंट B (आपका कार्य लैपटॉप) और सार्वजनिक IP पते वाला एक VPS है। ग्राहक ए और बी वीपीएस तक पहुंच सकते हैं, लेकिन एक दूसरे को नहीं।

अग्रेषण योजना इस प्रकार होगी:
1. क्लाइंट ए वीपीएस से जुड़ता है और सर्वर पर एक “रिवर्स” पोर्ट खोलता है। अब सर्वर के पोर्ट X पर आने वाली हर चीज़ क्लाइंट A के पोर्ट Y पर जाती है।
2. क्लाइंट बी वीपीएस से जुड़ता है और पोर्ट Z को अपनी स्थानीय मशीन से सर्वर के पोर्ट X तक अग्रेषित करता है।
3. परिणामस्वरूप, क्लाइंट B localhost:Z तक पहुंचता है और क्लाइंट A:Y पर समाप्त होता है।

यह दृष्टिकोण उन मामलों में समाधानों में से एक है जहां वीपीएस के साथ संचार एल 3 परत को लागू नहीं करता है या ग्राहकों के बीच रूटिंग को कॉन्फ़िगर करने की कोई क्षमता नहीं है। हम विशेष रूप से एप्लिकेशन और पोर्ट स्तर पर काम करते हैं।

चरण 1: सर्वर प्रारंभ करें

अपने VPS पर, बस Chisel को सर्वर मोड में चलाएँ। क्लाइंट को सर्वर साइड पर पोर्ट खोलने की अनुमति देने के लिए <कोड>–रिवर्स ध्वज की आवश्यकता होती है।

chisel server --port 8080 --reverse

चरण 2: क्लाइंट ए (स्रोत) को कनेक्ट करना

मान लीजिए कि क्लाइंट ए पोर्ट 3000 पर अपने स्थानीय वेब सर्वर तक पहुंच खोलना चाहता है। वह वीपीएस से जुड़ता है और कहता है: “सर्वर पर पोर्ट 2000 रिजर्व करें और इसे मुझे 3000 पर अग्रेषित करें।”

chisel client vps-ip:8080 R:2000:127.0.0.1:3000

अब वीपीएस (लूपबैक इंटरफ़ेस पर) पर पोर्ट 2000 क्लाइंट ए की ओर ले जाता है।

चरण 3: क्लाइंट बी (उपभोक्ता) को कनेक्ट करना

अब क्लाइंट बी इस संसाधन तक पहुंचना चाहता है। यह उसी वीपीएस से जुड़ता है और अपने स्थानीय पोर्ट 8080 को सर्वर के पोर्ट 2000 पर भेजता है।

chisel client vps-ip:8080 8080:127.0.0.1:2000

तैयार! अब, जब आप क्लाइंट बी पर http://localhost:8080 खोलते हैं, तो आप क्लाइंट ए पर चल रही सेवा देखेंगे।

सुरक्षा और बारीकियाँ

चिसेल --auth ध्वज के माध्यम से प्रमाणीकरण का समर्थन करता है, जिसे सार्वजनिक सर्वर के माध्यम से काम करते समय अत्यधिक अनुशंसित किया जाता है। आप ट्रैफ़िक को एन्क्रिप्ट करने के लिए टीएलएस प्रमाणपत्र का भी उपयोग कर सकते हैं।

इस दृष्टिकोण का मुख्य लाभ यह है कि TUN/TAP डिवाइस और जटिल रूटिंग टेबल की कोई आवश्यकता नहीं है। यह एक स्ट्रिप-डाउन सुरंग है जो बिल्कुल एक काम करती है: वेबसॉकेट कनेक्शन के माध्यम से बंदरगाहों को बांधती है। यदि आप पोर्ट 443 के माध्यम से काम करने के लिए चिसेल को कॉन्फ़िगर करते हैं तो यह कॉर्पोरेट प्रॉक्सी के माध्यम से भी काम करता है।

आउटपुट

छेनी विशिष्ट नेटवर्क कार्यों के लिए एक उपयोगिता है। जब आपको एक पूर्ण वीपीएन स्थापित किए बिना अलग-अलग नोड्स के बीच पोर्ट को अग्रेषित करने की आवश्यकता होती है, तो रिले सर्वर के माध्यम से आगे और पीछे सुरंगों का संयोजन पूरी तरह से व्यवहार्य समाधान बन जाता है।

लिंक

https://github.com/jpillora/chisel