एसएसडी सुरंग के माध्यम से यूडीपी यातायात


66

शीर्षक बहुत अधिक यह रकम है। मैं एसएसडी सुरंग के माध्यम से यूडीपी यातायात भेजना चाहूंगा। विशेष रूप से, मुझे सुरंग के माध्यम से यूडीपी के पैकेट भेजने में सक्षम होना चाहिए और सर्वर को दूसरी तरफ मुझे वापस भेजने में सक्षम होना चाहिए। मुझे पता है कि इसे टीसीपी कनेक्शन के लिए कैसे करना है। क्या यह यूडीपी के साथ संभव है?

जवाबों:


36

यह छोटा सा गाइड आपको बताता है कि SSH के माध्यम से UDP ट्रैफ़िक को कैसे भेजा जाए जो कि अधिकांश UNIX जैसे ऑपरेटिंग सिस्टम के साथ मानक (ssh, nc, mkfifo) आते हैं।

SSH कनेक्शन के माध्यम से UDP टनलिंग का प्रदर्शन करना

चरण दर चरण अपने SSH कनेक्शन के साथ एक टीसीपी फॉरवर्ड पोर्ट खोलें

अपने स्थानीय मशीन (स्थानीय) पर, SSH द्वारा दूर की मशीन (सर्वर) से कनेक्ट करें, अतिरिक्त -L विकल्प के साथ ताकि SSH TCP पोर्ट-फॉरवर्ड के साथ:

local# ssh -L 6667:localhost:6667 server.foo.com

यह आपके स्थानीय मशीन के पोर्ट नंबर 6667 पर टीसीपी कनेक्शन को सुरक्षित चैनल के माध्यम से server.foo.com पर पोर्ट नंबर 6667 पर अग्रेषित करने की अनुमति देगा। सर्वर पर आगे टीसीपी को यूडीपी पर सेट करें

सर्वर पर, हम टीसीपी पोर्ट 6667 पर एक श्रोता को खोलते हैं जो यूडीपी पोर्ट 53 को निर्दिष्ट आईपी के लिए डेटा अग्रेषित करेगा। यदि आप मेरी तरह DNS अग्रेषण करना चाहते हैं, तो आप पहले नेमसर्वर का IP ले सकते हैं जो आपको /etc/resolv.conf में मिलेगा। लेकिन पहले, हमें एक फिफो बनाने की जरूरत है। फ़ोरनो दो चैनलों के बीच दो-तरफ़ा संचार के लिए आवश्यक है। एक साधारण शेल पाइप केवल बाईं प्रक्रिया को 'मानक आउटपुट से सही प्रक्रिया' मानक इनपुट तक पहुंचाता है।

server# mkfifo /tmp/fifo
server# nc -l -p 6667 < /tmp/fifo | nc -u 192.168.1.1 53 > /tmp/fifo

यह 192.168.1.1 के पोर्ट 53 पर UDP ट्रैफ़िक को अग्रेषित करने के लिए सर्वर के पोर्ट 6667 पर टीसीपी ट्रैफ़िक और वापस आने की अनुमति देगा। अपनी मशीन पर UDP को TCP को आगे सेट करें

अब, हमें स्थानीय मशीन पर ऊपरी तौर पर जो किया गया था, उसके विपरीत करने की आवश्यकता है। यूडीपी पोर्ट 53 को बांधने के लिए आपको निजीकरण की आवश्यकता है।

local# mkfifo /tmp/fifo
local# sudo nc -l -u -p 53 < /tmp/fifo | nc localhost 6667 > /tmp/fifo

इससे लोकल मशीन के पोर्ट 53 पर UDP ट्रैफिक को स्थानीय मशीन के पोर्ट 6667 पर TCP ट्रैफिक के लिए फॉरवर्ड किया जा सकेगा। अपने मोबाइल DNS सर्वर का आनंद लें :)

जैसा कि आपने शायद अब अनुमान लगाया है, जब स्थानीय मशीन पर एक DNS क्वेरी का प्रदर्शन किया जाएगा, जैसे कि स्थानीय यूडीपी पोर्ट 53 पर, इसे स्थानीय टीसीपी पोर्ट 6667, फिर सर्वर के टीसीपी पोर्ट 6667, फिर सर्वर के DNS सर्वर पर भेजा जाएगा। , 192.168.1.1 का UDP पोर्ट 53। अपने स्थानीय मशीन पर डीएनएस सेवाओं का आनंद लेने के लिए, अपने /etc/resolv.conf में पहली नेमसर्वर के रूप में निम्न लाइन डालें:

nameserver 127.0.0.1

28
यह समाधान सुरक्षित नहीं है। संदेश धाराओं को संरक्षित करने के लिए टीसीपी धाराओं की गारंटी नहीं है, इसलिए किसी भी प्रोटोकॉल को तोड़ते हुए एक एकल यूडीपी डेटाग्राम भागों में विभाजित किया जा सकता है।
जुहो Justman

2
6667 (मैन एसएसएच उदाहरण से) के बजाय पोर्ट 1153 का उपयोग करना अच्छा हो सकता है, जिसका उपयोग आईआरसी द्वारा किया जाता है।
देल पिरोझकोव

1
@ Juhofallstman इस नुकसान को इंगित करने के लिए धन्यवाद। समस्या के बारे में पता होने के नाते ... क्या आपने कोई समाधान निकाला है? क्या छोटे पर्याप्त संदेश काम करने की संभावना बनाने का एक तरीका होगा?
मानवता

4
समाधान टीसीपी स्ट्रीम के माध्यम से भेजे जाने से पहले प्रत्येक पैकेट की लंबाई तय करना होगा, और उस से मूल पैकेट को फिर से बनाना होगा। ऐसा करने के लिए सी स्क्रिप्ट लिखना आसान होगा, लेकिन मुझे यकीन नहीं है कि अगर एक आसानी से उपलब्ध समाधान मौजूद है। व्यवहार में, टीसीपी आमतौर पर इस मामले में संदेश सीमाओं को संरक्षित करने के लिए लगता है, लेकिन किसी भी समय अजीब विफलता हो सकती है।
जुहो Justman

मुझे इसके साथ एक और समस्या का सामना करना पड़ा: पाइप और फीफो बफ़र्ड हैं इसलिए फ्रेम सीमाएं खो जाती हैं। इतने सारे यूडीपी फ्रेम को एक टीसीपी फ्रेम में समेटा जा सकता है।
जूलियो गुएरा

26

यह उदाहरण (मुझे लगता है कि जॉन का जवाब एक ही जगह पर एक ही बात बताता है), एक टीसीपी / एसएसएच कनेक्शन पर किसी अन्य मशीन की यूडीपी / डीएनएस सेवाओं तक पहुंचने का वर्णन करता है।

हम टीसीपी के लिए स्थानीय यूडीपी / 53 ट्रैफिक को अग्रेषित करेंगे, फिर दूसरी मशीन पर एसएसएच के पोर्ट-फॉरवर्डिंग तंत्र के साथ टीसीपी ट्रैफिक, फिर दूसरे छोर पर टीसीपी से यूडीपी / 53।
आमतौर पर, आप इसे ओपनपेंन के साथ कर सकते हैं।
लेकिन यहाँ, हम इसे सरल टूल के साथ करेंगे, केवल ओपनश और नेटकैट।

उस पृष्ठ के अंत में, ' socat' के संदर्भ में एक और टिप्पणी है ,
उसी यूडीपी / डीएनएस पहुंच के साथ बनाया गया है,

सर्वर पक्ष: socat tcp4-listen:5353,reuseaddr,fork UDP:nameserver:53
ग्राहक पक्ष:socat udp4-listen:53,reuseaddr,fork tcp:localhost:5353

अधिक के लिए सामाजिक उदाहरण देखें ।


3
स्वीकृत उत्तर की तुलना में यह मेरे लिए बहुत अधिक उपयोगी है। मुझे वीडियो स्ट्रीम (टीएस / यूडीपी) के एक यूनिडायरेक्शनल पुनर्निर्देशन की आवश्यकता थी ... ssh orig_strm_src socat udp4-listen:4003,reuseaddr,fork STDOUT| socat STDIN udp-sendto:localhost:4003
ned

एफडब्ल्यूआईडब्ल्यू, मैंने अपने होम पेज पर एक अधिक विस्तृत गाइड लिखा है जिसमें बताया गया है कि यूडीपी फॉरवर्डिंग के लिए एसएसएच पर सोसाइटी कैसे स्थापित करें। यह एक उदाहरण के रूप में एसएनएमपी का उपयोग करता है।
पीटर वी। मॉर्क

20

SSH (कम से कम ओपनएसएसएच) को सरल वीपीएन के लिए समर्थन है। क्लाइंट में -wया Tunnelविकल्प का उपयोग करके ssh, आप tunदोनों सिरों पर एक डिवाइस बना सकते हैं , जिसका उपयोग किसी भी प्रकार के आईपी ट्रैफ़िक को अग्रेषित करने के लिए किया जा सकता है। ( Tunnelमैनुअल पेज में भी देखें ssh_config(5)।) ध्यान दें कि इसके लिए दोनों सिरों पर OpenSSH (और शायद रूट विशेषाधिकार) की आवश्यकता होती है।


इसके लिए गैर-निजीकृत बंदरगाहों के यूडीपी टनलिंग के लिए रिमोट मशीन पर रूट विशेषाधिकारों की आवश्यकता होती है और 'नहीं' पर सेट करने के लिए PermitRootLogin। बहुत बुरा।
फिल पिरोज्कोव

@grawity इस विकल्प को इंगित करने के लिए धन्यवाद, जो तब भी आवश्यक रूट लॉगिन फिल्पिरोजोकोव द्वारा इंगित किया गया था। मुझे आश्चर्य है कि अगर जड़ की आवश्यकता नहीं है, तो इसे छलने का कोई तरीका हो सकता है?
ह्यूमेनिटीएंडपीस

4
@humanityANDpeace: आप ट्यून / टैप डिवाइसेज को प्रिव्यू कर सकते हैं और उन्हें एक विशिष्ट उपयोगकर्ता के स्वामित्व में बना सकते हैं ip tuntap add
१ity

हाय @grawity मुझे आपका समाधान पसंद है लेकिन यह काम नहीं कर सकता। मैंने tunडिवाइस को इस प्रकार पेश किया: sudo ip tuntap add mode tunलेकिन जब कभी -wइस तरह के विकल्प का उपयोग किया जाता है : ssh $Server -w $portमुझे लगता है Tunnel device open failed. Could not request tunnel forwarding.कि मैं क्या गलत कर रहा हूं?
लुकास Aimaretto

16

या आप बस एक साधारण कमांड के साथ ssf (जो इस उपयोग के मामले को संभालने के लिए डिज़ाइन किया गया था) का उपयोग कर सकते हैं:


ग्राहक की ओर:

#>./ssfc -U 53:192.168.1.1:53 server.foo.com

यह आदेश स्थानीय पोर्ट 53 (dns) को 192.168.1.1 पोर्ट 53 पर पुनर्निर्देशित करता है, जो कि लोकलहोस्ट और server.foo.com के बीच सुरक्षित सुरंग के माध्यम से होता है।


आपको ssf सर्वर (इसके बजाय - या आपके ssh सर्वर के आगे) की आवश्यकता होगी:

#>./ssfs

वैसे, ssf के क्लाइंट और सर्वर दोनों पक्ष विंडोज / लिनक्स / मैक पर काम करते हैं। यह एक उपयोगकर्ता अनुप्रयोग है, इसलिए आपको ट्यून / टैप या वीपीएन की आवश्यकता नहीं है।

पोर्ट 53 को पुनर्निर्देशित करने के लिए, आपको प्रशासनिक विशेषाधिकारों की आवश्यकता होगी - चाहे आप जिस टूल का उपयोग कर रहे हों।

अधिक जानकारी के लिए, विवरण, केस का उपयोग करें या डाउनलोड करें: https://securesocketfunneling.github.io/ssf/


कृपया "यहां मेरा उत्पाद है" के साथ सतर्क जवाब दें, यह बॉर्डरलाइन स्पैम है। मेरा सुझाव है कि सहायता केंद्र से दिशानिर्देशों को पढ़ना और उनका पालन ​​करना
हैवीड

7
अधिक से अधिक, यह एक बेशर्म प्लग है। वैसे भी समाधान आपके अनुरोध पर फिट हो सकता है। वैसे, SSF ओपनसोर्स और नॉन प्रॉफिट है।
ssf-Developers

11
@heavyd: यदि उसने हैकी स्क्रिप्ट का एक गुच्छा पोस्ट किया है, तो यह स्वीकार्य होगा, लेकिन क्योंकि उसने एक परिपक्व ओपन-सोर्स टूल बनाया है, यह नहीं है? यह मूल प्रश्न का पूरी तरह से उत्तर देता है।
सिंथीड

मुझे यह स्वीकार करना होगा कि यह ठीक वही उपकरण है जिसकी मुझे तलाश थी, भले ही वह बेशर्म प्लग था।
चिकित्सक

9

मैं ncएसएनएमपी के लिए काम नहीं कर सकता , क्योंकि एसएनएमपी ग्राहक एक नया स्रोत यूडीपी पोर्ट चुनते रहते हैं, और कई एक बार में सक्रिय हो सकते हैं।

इसके बजाय, मैंने एक उदाहरण के रूप में एसएनएमपी का उपयोग करके socatइस ब्लॉग पोस्ट में इसे कैसे करना है, यह वर्णन करते हुए एक पोस्ट लिखा है । अनिवार्य रूप से, दो टर्मिनलों का उपयोग करते हुए, एक अवलोकन से शुरू होता है:

अवलोकन

टर्मिनल एक:

client$ ssh -L 10000:localhost:10000 server
server$ socat -T10 TCP4-LISTEN:10000,fork UDP4:switch:161

यह टीसीपी पोर्ट 10000 का एसएसएच अग्रेषण बनाता है और सर्वर पर सोकेट चलाता है। ध्यान दें कि स्विच का आईपी पता सोसाइटी कमांड लाइन में "स्विच" के रूप में उल्लिखित है।

टर्मिनल दो:

client$ sudo socat UDP4-LISTEN:161,fork TCP4:localhost:10000

जो क्लाइंट पर सोसाइटी सेट करता है। इससे हो जाना चाहिए।


इसने मेरे लिए काम किया :)
पॉल फेनी

4

यदि आप UDP पोर्ट तक पहुँच रखते हैं, तो VPN एक बेहतर समाधान है।

यदि आपके पास केवल टीसीपी एसएसएच पोर्ट तक पहुंच है, तो एक एसएसएच सुरंग वीपीएन के रूप में अच्छी है, कम से कम पिंग और पैकेट बैकट्रैकिंग के लिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.