SSH कनेक्शन के माध्यम से DNS टनलिंग कनेक्टिविटी खो देता है


5

SSH सुरंग के माध्यम से यूडीपी ट्रैफ़िक के सुपर यूजर प्रश्न में , यह वर्णन करता है कि DNS को SSH सुरंग को कैसे गर्तित करें:

सबसे पहले, क्लाइंट पक्ष पर, यह करें:

ssh -N -L 6667:localhost:6667 user@server

फिर, सर्वर साइड पर ऐसा करें:

mkfifo /tmp/fifo
nc -k -l 6667 < /tmp/fifo | nc -u ip_of_dns_server 53 > /tmp/fifo

अंत में, क्लाइंट की तरफ से ऐसा करें:

mkfifo /tmp/fifo
nc -k -l -u 53 < /tmp/fifo | nc 127.0.0.1 6667 > /tmp/fifo

उसके बाद मैं उम्मीद के मुताबिक DNS क्वेरी कर सकता हूं, लेकिन केवल एक ही अनुरोध के लिए :

client# host m6.fr 127.0.0.1

मैं अधिक अनुरोधों के लिए कनेक्शन को कैसे जीवित रख सकता हूं?


क्या ncउस एकल सफल अनुरोध के बाद कोई बाहर निकलता है? यदि हां, तो किसी अन्य प्रश्न के उत्तर की जाँच करें
कामिल मैकियोरोस्की

जवाबों:


1

TL; DR: Netcat का उपयोग न करें, प्रयोगों के लिए Socat का उपयोग करें । यह कुछ भी बेहतर संभालती है।

कारण यह काम नहीं कर रहा है नामांकित पाइप के बारे में नहीं है (भले ही यह अन्य समस्याओं के साथ एक बदसूरत विधि है), लेकिन netcat की एक सीमा।

एक बार Netcat को UDP कनेक्शन प्राप्त होता है, यह उसे बांधता है। तो यह अब पोर्ट 53 के लिए नहीं सुन रहा है, यह उस पोर्ट से जुड़ा है जिसने प्रारंभिक पैकेट भेजा था, ठीक उसी तरह जैसे यह टीसीपी के साथ करता है। हर बार जब आप DNS अनुरोध कर रहे होते हैं, तो टूल पोर्ट बदल देगा और Netcat को कभी अनुरोध नहीं मिलेगा। तो केवल पहला अनुरोध काम करेगा।

जब आप अपना उदाहरण सेट करते हैं, तो पहले क्वेरी से पहले इस कमांड को आज़माएँ:

netstat -aunp|grep -w 53
udp        0      0 0.0.0.0:53              0.0.0.0:*                           12316/nc.openbsd 

केवल (केवल कामकाजी) क्वेरी करें और फिर से नेटस्टैट करने की कोशिश करें:

# netstat -aunp|grep -w 53
udp        0      0 127.0.0.1:53            127.0.0.1:44335         ESTABLISHED 12316/nc.openbsd

जैसा कि आप देख सकते हैं netcat सिर्फ परिवर्तित मोड: एक कनेक्शन पर पाशन सुनने से। क्योंकि यह UDP है, Netcat को स्वचालित रूप से "स्थापित कनेक्शन" नहीं पता होगा।

मेरे पास अवधारणा का एक प्रमाण है (जो इसे काम करता है और दिखाता है कि समस्या इस यूडीपी मोड से संबंधित है) लेकिन इसके लिए क्लाइंट पर नेटकैट के अलावा सोसाइटी की आवश्यकता होती है। एक ही UDP स्रोत पोर्ट का उपयोग करके सभी अनुरोधों को netcat तक पहुंचाना लक्ष्य है । सर्वर की ओर से कुछ भी नहीं बदलता है, लेकिन मैं यूडीपी अनुरोध के स्रोत पोर्ट को नेटकैट के लिए मजबूर करने के लिए श्रृंखला (इसलिए अंतिम आदेश) की शुरुआत में सोसाइट डाल देता हूं।

सबसे पहले, क्लाइंट पक्ष पर, यह करें:

ssh -N -L 6667:localhost:6667 user@server

फिर, सर्वर साइड पर ऐसा करें:

mkfifo /tmp/fifo
nc -k -l 6667 < /tmp/fifo | nc -u ip_of_dns_server 53 > /tmp/fifo

अंत में, क्लाइंट की तरफ से ऐसा करें:

mkfifo /tmp/fifo
nc -k -l -u 5555 < /tmp/fifo | nc 127.0.0.1 6667 > /tmp/fifo

socat udp4-listen:53,reuseaddr,fork udp:127.0.0.1:5555,sourceport=55550,reuseaddr

अब मैं कई प्रश्न कर सकता हूं।

1 क्वेरी से पहले:

# netstat -aunp|egrep -w '53|5555'
udp        0      0 0.0.0.0:5555            0.0.0.0:*                           12715/nc.openbsd    
udp        0      0 0.0.0.0:53              0.0.0.0:*                           12717/socat         

1 के बाद:

udp        0      0 127.0.0.1:55550         127.0.0.1:5555          ESTABLISHED 12736/socat         
udp        0      0 127.0.0.1:5555          127.0.0.1:55550         ESTABLISHED 12715/nc.openbsd    
udp        0      0 0.0.0.0:53              0.0.0.0:*                           12717/socat         

दूसरी क्वेरी के बाद:

udp        0      0 127.0.0.1:55550         127.0.0.1:5555          ESTABLISHED 12750/socat         
udp        0      0 127.0.0.1:5555          127.0.0.1:55550         ESTABLISHED 12715/nc.openbsd    
udp        0      0 0.0.0.0:53              0.0.0.0:*                           12717/socat         
udp        0      0 127.0.0.1:53            127.0.0.1:53255         ESTABLISHED 12750/socat         

सुकैट उसी समस्या को झेलता है लेकिन forkविकल्प के साथ , यह फिर से सुनता है, और ऐसा प्रतीत होता है कि यह पिछले खोए हुए "कनेक्शन" का पता लगाता है; मुझे लगता है कि देरी का कारण बनता है।

आप पुराने व्यवहार (एक बार काम करता है) प्राप्त कर सकते हैं यदि आप ,sourceport=55550,reuseaddrसोसाइट कमांड में केवल भाग निकालते हैं ।


UDP-LISTEN के बजाय UDP-RECVFROM का उपयोग करने से सामाजिक व्यवहार में सुधार होना चाहिए (यह स्थापित नहीं होगा)
AB
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.