
एक टनल जो UDP ट्रैफिक को एन्क्रिप्टेड UDP/FakeTCP/ICMP ट्रैफिक में बदलता है, रॉ सॉकेट का उपयोग करके, जो आपको UDP फायरवॉल (या अस्थिर UDP वातावरण) को बायपास करने में मदद करता है।
एक टनल जो रॉ सॉकेट का उपयोग करके UDP ट्रैफिक को एन्क्रिप्टेड FakeTCP/UDP/ICMP ट्रैफिक में बदलता है, जो आपको UDP फायरवॉल (या अस्थिर UDP वातावरण) को बायपास करने में मदद करता है।
जब अकेले उपयोग किया जाता है, udp2raw केवल UDP ट्रैफिक को टनल करता है। फिर भी, यदि आप udp2raw + किसी भी UDP-आधारित VPN का एक साथ उपयोग करते हैं, तो आप किसी भी ट्रैफिक (TCP/UDP/ICMP सहित) को टनल कर सकते हैं। वर्तमान में OpenVPN/L2TP/ShadowVPN और tinyfecVPN समर्थित होने की पुष्टि की गई है।

या

Linux होस्ट (डेस्कटॉप Linux, Android फोन/टैबलेट, OpenWRT राउटर, या Raspberry PI सहित) रूट अकाउंट या cap_net_raw क्षमता के साथ।
Windows और MacOS उपयोगकर्ताओं के लिए, इस रिपॉजिटरी में udp2raw का उपयोग करें।
ICMP/FakeTCP हेडर आपको कुछ ISPs पर UDP ब्लॉकिंग, UDP QOS या अनुचित UDP NAT व्यवहार को बायपास करने में मदद करते हैं। ICMP हेडर मोड में, udp2raw एक ICMP टनल की तरह काम करता है।
UDP हेडर भी समर्थित हैं। UDP हेडर मोड में, यह एक सामान्य UDP टनल की तरह व्यवहार करता है, और आप बस अन्य सुविधाओं (जैसे एन्क्रिप्शन, एंटी-रिप्ले, या कनेक्शन स्थिरीकरण) का लाभ उठा सकते हैं।
FakeTCP हेडर मोड में, udp2raw कनेक्शन स्थापित करते समय 3-वे हैंडशेक का अनुकरण करता है, डेटा ट्रांसफर करते समय seq और ack_seq का अनुकरण करता है। यह कुछ TCP विकल्पों का भी अनुकरण करता है जैसे: MSS, sackOk, TS, TS_ack, wscale। फायरवॉल FakeTCP को एक TCP कनेक्शन मानेंगे, लेकिन यह मूलतः UDP है: यह रीयल-टाइम/आउट-ऑफ-ऑर्डर डिलीवरी का समर्थन करता है (जैसा कि सामान्य UDP करता है), कोई कंजेशन कंट्रोल या री-ट्रांसमिशन नहीं। इसलिए OpenVPN का उपयोग करते समय TCP ओवर TCP की कोई समस्या नहीं होगी।
कनेक्शन विफलताओं का पता हार्टबीट्स द्वारा लगाया जाता है। यदि टाइम-आउट हो जाता है, तो क्लाइंट स्वचालित रूप से पोर्ट नंबर बदल देगा और फिर से कनेक्ट हो जाएगा। यदि पुन: कनेक्शन सफल होता है, तो पिछला कनेक्शन बहाल हो जाएगा, और सभी मौजूदा UDP वार्तालाप मान्य रहेंगे।
उदाहरण के लिए, यदि आप udp2raw + OpenVPN का उपयोग करते हैं, तो OpenVPN किसी भी पुन: कनेक्ट के बाद कनेक्शन नहीं खोएगा, भले ही नेटवर्क केबल फिर से प्लग की जाए या WiFi एक्सेस पॉइंट बदल दिया जाए।
make cross चलाना है और सब कुछ हो जाता है। (नोट: डेस्कटॉप, RaspberryPi, Android, कुछ Openwrt राउटर्स के लिए प्री-कंपाइल बाइनरी पहले से ही रिलीज़ में शामिल हैं)Bypass UDP QoS Bypass UDP Blocking Bypass OpenVPN TCP over TCP problem OpenVPN over ICMP UDP to ICMP tunnel UDP to TCP tunnel UDP over ICMP UDP over TCP
बाइनरी रिलीज़ डाउनलोड करें https://github.com/wangyu-/udp2raw-tunnel/releases से
मान लीजिए कि आपका UDP ब्लॉक है या QOS किया जा रहा है या बस खराब समर्थित है। मान लीजिए कि आपका सर्वर आईपी 44.55.66.77 है, और udp पोर्ट 7777 पर एक सेवा सुन रही है।
# सर्वर साइड पर चलाएँ:
./udp2raw_amd64 -s -l0.0.0.0:4096 -r 127.0.0.1:7777 -k "passwd" --raw-mode faketcp -a
# क्लाइंट साइड पर चलाएँ
./udp2raw_amd64 -c -l0.0.0.0:3333 -r44.55.66.77:4096 -k "passwd" --raw-mode faketcp -a
(उपरोक्त कमांड को रूट के रूप में चलाने की आवश्यकता है। बेहतर सुरक्षा के लिए, कुछ अतिरिक्त चरणों के साथ, आप udp2raw को गैर-रूट के रूप में चला सकते हैं। अधिक जानकारी के लिए इस लिंक देखें)


अब, क्लाइंट और सर्वर के बीच TCP पोर्ट 4096 के माध्यम से एक एन्क्रिप्टेड रॉ टनल स्थापित हो गई है। क्लाइंट साइड पर UDP पोर्ट 3333 से कनेक्ट करना सर्वर साइड पर पोर्ट 7777 से कनेक्ट करने के बराबर है। कोई UDP ट्रैफिक उजागर नहीं होगा।
Android पर चलाने के लिए, Android_Guide देखें
-a विकल्प स्वचालित रूप से आपके लिए एक iptables नियम (या कुछ iptables नियम) जोड़ता है, udp2raw स्थिर रूप से काम करने के लिए इस iptables नियम पर निर्भर करता है। सावधान रहें कि -a न भूलें (यह एक सामान्य गलती है)। यदि आप नहीं चाहते कि udp2raw स्वचालित रूप से iptables नियम जोड़े, तो आप इसे मैन्युअल रूप से जोड़ सकते हैं (-g विकल्प देखें) और -a को छोड़ दें।
udp2raw-tunnel
git version:4623f878e0 build date:Nov 3 2024 23:15:46
repository: https://github.com/wangyu-/udp2raw-tunnel
usage:
run as client : ./this_program -c -l local_listen_ip:local_port -r server_address:server_port [options]
run as server : ./this_program -s -l server_listen_ip:server_port -r remote_address:remote_port [options]
common options,these options must be same on both side:
--raw-mode <string> available values:faketcp(default),udp,icmp and easy-faketcp
-k,--key <string> password to gen symetric key,default:"secret key"
--cipher-mode <string> available values:aes128cfb,aes128cbc(default),xor,none
--auth-mode <string> available values:hmac_sha1,md5(default),crc32,simple,none
-a,--auto-rule auto add (and delete) iptables rule
-g,--gen-rule generate iptables rule then exit,so that you can copy and
add it manually.overrides -a
--disable-anti-replay disable anti-replay,not suggested
--fix-gro try to fix huge packet caused by GRO. this option is at an early stage.
make sure client and server are at same version.
client options:
--source-ip <ip> force source-ip for raw socket
--source-port <port> force source-port for raw socket,tcp/udp only
this option disables port changing while re-connecting
other options:
--conf-file <string> read options from a configuration file instead of command line.
check example.conf in repo for format
--fifo <string> use a fifo(named pipe) for sending commands to the running program,
check readme.md in repository for supported commands.
--log-level <number> 0:never 1:fatal 2:error 3:warn
4:info (default) 5:debug 6:trace
--log-position enable file name,function name,line number in log
--disable-color disable log color
--disable-bpf disable the kernel space filter,most time its not necessary
unless you suspect there is a bug
--dev <string> bind raw socket to a device, not necessary but improves performance
--sock-buf <number> buf size for socket,>=10 and <=10240,unit:kbyte,default:1024
--force-sock-buf bypass system limitation while setting sock-buf
--seq-mode <number> seq increase mode for faketcp:
0:static header,do not increase seq and ack_seq
1:increase seq for every packet,simply ack last seq
2:increase seq randomly, about every 3 packets,simply ack last seq
3:simulate an almost real seq/ack procedure(default)
4:similiar to 3,but do not consider TCP Option Window_Scale,
maybe useful when firewall doesnt support TCP Option
--lower-level <string> send packets at OSI level 2, format:'if_name#dest_mac_adress'
ie:'eth0#00:23:45:67:89:b9'.or try '--lower-level auto' to obtain
the parameter automatically,specify it manually if 'auto' failed
--wait-lock wait for xtables lock while invoking iptables, need iptables v1.4.20+
--gen-add generate iptables rule and add it permanently,then exit.overrides -g
--keep-rule monitor iptables and auto re-add if necessary.implys -a
--hb-len <number> length of heart-beat packet, >=0 and <=1500
--mtu-warn <number> mtu warning threshold, unit:byte, default:1375
--clear clear any iptables rules added by this program.overrides everything
--retry-on-error retry on error, allow to start udp2raw before network is initialized
-h,--help print this help message
-a और -gयह प्रोग्राम रॉ सॉकेट के माध्यम से पैकेट भेजता है। FakeTCP मोड में, लिनक्स कर्नेल TCP पैकेट प्रोसेसिंग को दोनों तरफ एक iptables नियम द्वारा अवरुद्ध किया जाना चाहिए, अन्यथा कर्नेल एक अपरिचित TCP पैकेट के लिए स्वचालित रूप से RST भेजेगा और आपको स्थिरता/प्रदर्शन की समस्याओं का सामना करना पड़ेगा। आप प्रोग्राम को शुरू/बंद होने पर स्वचालित रूप से iptables नियम जोड़ने/हटाने के लिए -a विकल्प का उपयोग कर सकते हैं। आप -g विकल्प का उपयोग iptables नियम उत्पन्न करने और इसे मैन्युअल रूप से जोड़ने के लिए भी कर सकते हैं।
--cipher-mode और --auth-modeअधिकतम सुरक्षा प्राप्त करने के लिए aes128cbc + hmac_sha1 का उपयोग करने का सुझाव दिया जाता है। यदि आप प्रोग्राम को राउटर पर चलाना चाहते हैं, तो आप xor + simple आज़मा सकते हैं, जो अधिकांश समय फायरवॉल द्वारा पैकेट निरीक्षण को मूर्ख बना सकता है, लेकिन यह आपको गंभीर हमलों से बचा नहीं सकता है। मोड none केवल डिबगिंग उद्देश्य के लिए है। cipher-mode या auth-mode को none पर सेट करने की अनुशंसा नहीं की जाती है।
--seq-modeFakeTCP मोड 100% वास्तविक TCP कनेक्शन की तरह व्यवहार नहीं करता है। ISPs सिम्युलेटेड TCP ट्रैफिक को वास्तविक TCP ट्रैफिक से अलग करने में सक्षम हो सकते हैं (हालांकि यह महंगा है)। seq-mode आपको seq वृद्धि व्यवहार को थोड़ा बदलने में मदद कर सकता है। यदि आप कनेक्शन समस्याओं का अनुभव करते हैं, तो मान बदलने का प्रयास करें।
--lower-level--lower-level आपको OSI लेवल 2 (लिंक लेवल) पर पैकेट भेजने की अनुमति देता है, ताकि आप किसी भी स्थानीय iptables नियम को बायपास कर सकें। यदि आपके पास जटिल iptables नियम हैं जो udp2raw से विरोध करते हैं और आप iptables नियमों को संपादित नहीं कर सकते (या बहुत आलसी हैं), तो --lower-level बहुत उपयोगी हो सकता है। पैरामीटर को स्वचालित रूप से पता लगाने के लिए --lower-level auto आज़माएँ, यदि auto विफल हो जाता है तो आप इसे मैन्युअल रूप से निर्दिष्ट कर सकते हैं।
मैन्युअल प्रारूप if_name#dest_mac_adress, जैसे: eth0#00:23:45:67:89:b9।
--keep-ruleiptables की निगरानी करें और यदि आवश्यक हो तो स्वचालित रूप से iptables नियमों को फिर से जोड़ें (कर्नेल TCP प्रोसेसिंग को अवरुद्ध करने के लिए)। विशेष रूप से उपयोगी जब अन्य प्रोग्रामों द्वारा iptables नियम साफ़ किए जा सकते हैं (उदाहरण के लिए, यदि आप openwrt का उपयोग कर रहे हैं, तो हर बार जब आप कोई सेटिंग बदलते और कमिट करते हैं, तो iptables नियम साफ़ और पुनर्निर्मित हो सकते हैं)।
--conf-fileआप ps कमांड से रहस्यों को दूर रखने के लिए एक कॉन्फ़िगरेशन फ़ाइल से विकल्प भी लोड कर सकते हैं।
उदाहरण के लिए, ऊपर दिए गए server उदाहरण (आरंभ करना अनुभाग में) के विकल्पों को कॉन्फ़िगरेशन फ़ाइल में फिर से लिखें:
server.conf
-s
# आप इस तरह टिप्पणियाँ जोड़ सकते हैं
# टिप्पणियाँ पूरी पंक्ति पर कब्जा करनी चाहिए
# अन्यथा वे अपेक्षित रूप से काम नहीं करेंगी
# सुनने का पता
-l 0.0.0.0:4096
# रिमोट पता
-r 127.0.0.1:7777
-a
-k passwd
--raw-mode faketcp
-k पैरामीटर पर ध्यान दें: कमांड लाइन मोड में पासवर्ड के चारों ओर के उद्धरण शेल द्वारा हटा दिए जाते हैं। कॉन्फ़िगरेशन फ़ाइलों में हम उद्धरण नहीं हटाते हैं।
फिर सर्वर को इसके साथ शुरू करें
./udp2raw_amd64 --conf-file server.conf
--fifoचल रहे प्रोग्राम को कमांड भेजने के लिए एक फीफो (नामित पाइप) का उपयोग करें। उदाहरण के लिए --fifo fifo.file।
क्लाइंट साइड पर, आप क्लाइंट को फिर से कनेक्ट करने के लिए echo reconnect >fifo.file का उपयोग कर सकते हैं। वर्तमान में सर्वर के लिए कोई कमांड लागू नहीं किया गया है।
OpenVPN + udp2raw के माध्यम से iperf3 TCP (iperf3 UDP मोड का उपयोग इस मुद्दे में उल्लिखित बग के कारण नहीं किया जाता है: https://github.com/esnet/iperf/issues/296 । इसके बजाय, हम प्रदर्शन का परीक्षण करने के लिए OpenVPN द्वारा TCP ट्रैफिक को UDP में पैकेज करते हैं। विवरण के लिए एप्लिकेशन पढ़ें।
iperf3 -c 10.222.2.1 -P40
iperf3 -c 10.222.2.1 -P40 -R
raw_mode: faketcp cipher_mode: xor auth_mode: simple

(रिवर्स स्पीड समान थी और अपलोड नहीं की गई)
raw_mode: faketcp cipher_mode: aes128cbc auth_mode: md5

(रिवर्स स्पीड समान थी और अपलोड नहीं की गई)
अधिक जानकारी के लिए wiki देखें: