
نفق يحول حركة مرور UDP إلى حركة مرور UDP/FakeTCP/ICMP مشفرة باستخدام Raw Socket، يساعدك على تجاوز جدران حماية UDP (أو بيئة UDP غير مستقرة)
نفق يحول حركة مرور UDP إلى حركة مرور FakeTCP/UDP/ICMP مشفرة باستخدام Raw Socket، ويساعدك في تجاوز جدران حماية UDP (أو بيئة UDP غير مستقرة).
عند استخدامه بمفرده،udp2raw ينقل فقط حركة مرور UDP. ومع ذلك،إذا استخدمت udp2raw مع أي VPN قائم على UDP معًا،يمكنك نقل أي حركة مرور (بما في ذلك TCP/UDP/ICMP)، حاليًا، تم تأكيد دعم OpenVPN/L2TP/ShadowVPN وtinyfecVPN.

أو

مضيف Linux (بما في ذلك Linux سطح المكتب، هاتف/جهاز لوحي Android، راوتر OpenWRT، أو Raspberry PI) مع حساب الجذر أو إمكانية cap_net_raw.
لمستخدمي Windows وMacOS، استخدم udp2raw في هذا المستودع.
تساعدك رؤوس ICMP/FakeTCP في تجاوز حظر UDP أو جودة خدمة UDP (QoS) أو سلوك NAT غير المناسب لـ UDP لدى بعض مزودي خدمة الإنترنت. في وضع رأس ICMP، يعمل udp2raw كنفق ICMP.
رؤوس UDP مدعومة أيضًا. في وضع رأس UDP، يتصرف تمامًا كنفق UDP عادي، ويمكنك الاستفادة من الميزات الأخرى (مثل التشفير، مكافحة إعادة التشغيل، أو تثبيت الاتصال).
في وضع رأس FakeTCP، يحاكي udp2raw المصافحة ثلاثية الاتجاهات عند إنشاء اتصال، ويحاكي seq و ack_seq أثناء نقل البيانات. كما يحاكي بعض خيارات TCP مثل: MSS، sackOk، TS، TS_ack، wscale. ستعتبر جدران الحماية أن FakeTCP هو اتصال TCP، لكنه في الأساس UDP: فهو يدعم التسليم الفوري/خارج الترتيب (تمامًا مثل UDP العادي)، دون التحكم في الازدحام أو إعادة الإرسال. لذلك لن تكون هناك مشكلة TCP-over-TCP عند استخدام OpenVPN.
يتم اكتشاف فشل الاتصال بواسطة نبضات القلب. إذا انتهت المهلة، سيقوم العميل تلقائيًا بتغيير رقم المنفذ وإعادة الاتصال. إذا نجحت إعادة الاتصال، سيتم استعادة الاتصال السابق، وستظل جميع محادثات UDP الحالية صالحة.
على سبيل المثال، إذا كنت تستخدم udp2raw + OpenVPN، فلن يفقد OpenVPN الاتصال بعد أي إعادة اتصال، حتى إذا تم إعادة توصيل كابل الشبكة أو تغيير نقطة الوصول Wi-Fi.
make cross ثم يصبح كل شيء جاهزًا. (ملاحظة: الملفات الثنائية المجمعة مسبقًا لسطح المكتب، Raspberry Pi، 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.
# Run at server side:
./udp2raw_amd64 -s -l0.0.0.0:4096 -r 127.0.0.1:7777 -k "passwd" --raw-mode faketcp -a
# Run at client side
./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
الخيار -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يرسل هذا البرنامج الحزم عبر raw socket. في وضع FakeTCP، يجب حظر معالجة حزم TCP بواسطة نواة Linux عبر قاعدة iptables على كلا الجانبين، وإلا سترسل النواة تلقائيًا RST لأي حزمة TCP غير معروفة وستعاني من مشاكل الاستقرار / الأداء. يمكنك استخدام الخيار -a للسماح للبرنامج بإضافة / حذف قاعدة iptules تلقائيًا عند البدء / الخروج. يمكنك أيضًا استخدام الخيار -g لإنشاء قاعدة iptables وإضافتها يدويًا.
--cipher-mode و --auth-modeيُقترح استخدام aes128cbc + hmac_sha1 لتحقيق أقصى درجات الأمان. إذا كنت تريد تشغيل البرنامج على راوتر، يمكنك تجربة xor + simple، والتي يمكنها خداع فحص الحزم بواسطة جدران الحماية معظم الوقت، لكنها لا تستطيع حمايتك من الهجمات الجادة. الوضع none هو لأغراض التصحيح فقط. لا يُنصح بتعيين cipher-mode أو auth-mode إلى none.
--seq-modeلا يتصرف وضع FakeTCP بنسبة 100% مثل اتصال TCP حقيقي. قد يتمكن مزودو خدمة الإنترنت من تمييز حركة مرور 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-ruleمراقبة iptables وإعادة إضافة قواعد iptables تلقائيًا (لحظر معالجة kernel 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 fifo.file.
في جانب العميل، يمكنك استخدام echo reconnect >fifo.file لإجبار العميل على إعادة الاتصال. حاليًا، لم يتم تنفيذ أي أمر للخادم.
iperf3 TCP عبر OpenVPN + udp2raw (لم يتم استخدام وضع iperf3 UDP بسبب خطأ مذكور في هذه المشكلة: https://github.com/esnet/iperf/issues/296. بدلاً من ذلك، نقوم بتغليف حركة مرور TCP في UDP عبر OpenVPN لاختبار الأداء. اقرأ التطبيق للحصول على التفاصيل.
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

(السرعة العكسية كانت مشابهة ولم يتم رفعها)
تحقق من الويكي لمزيد من المعلومات: