النفق الذي يحول حركة مرور UDP إلى حركة مرور FakeTCP/UDP/ICMP مشفرة باستخدام Raw مقبس، يساعدك على تجاوز جدران حماية UDP (أو بيئة UDP غير المستقرة).
عند استخدامه بمفرده، فإن أنفاق udp2raw تقوم فقط بحركة مرور UDP. ومع ذلك، إذا استخدمت udp2raw + أي VPN يستند إلى UDP معًا، فيمكنك تمرير أي حركة مرور (بما في ذلك TCP/UDP/ICMP)، وقد تم تأكيد دعم OpenVPN/L2TP/ShadowVPN وtinyfecVPN حاليًا.
أو
udp2raw ويكي
简体中文
مضيف Linux (بما في ذلك Linux المكتبي أو الهاتف/الجهاز اللوحي الذي يعمل بنظام Android أو جهاز توجيه OpenWRT أو Raspberry PI) مع حساب الجذر أو إمكانية cap_net_raw.
بالنسبة لمستخدمي Windows وMacOS، استخدم udp2raw في هذا الريبو.
تساعدك رؤوس ICMP/FakeTCP على تجاوز حظر UDP أو UDP QOS أو سلوك UDP NAT غير المناسب لدى بعض مزودي خدمات الإنترنت. في وضع رأس ICMP، يعمل udp2raw مثل نفق ICMP.
رؤوس UDP مدعومة أيضًا. في وضع رأس UDP، يتصرف تمامًا مثل نفق UDP العادي، ويمكنك فقط الاستفادة من الميزات الأخرى (مثل التشفير أو منع إعادة التشغيل أو تثبيت الاتصال).
في وضع رأس FakeTCP، يحاكي udp2raw المصافحة ثلاثية الاتجاهات أثناء إنشاء اتصال، ويحاكي seq وack_seq أثناء نقل البيانات. كما أنه يحاكي بعض خيارات TCP مثل: MSS
, sackOk
, TS
, TS_ack
, wscale
. ستعتبر جدران الحماية FakeTCP بمثابة اتصال TCP، لكنه في الأساس UDP: فهو يدعم التسليم في الوقت الفعلي/خارج الطلب (تمامًا كما يفعل UDP العادي)، ولا يوجد تحكم في الازدحام أو إعادة الإرسال. لذلك لن تكون هناك أي مشكلة في TCP عبر TCP عند استخدام OpenVPN.
ملاحظات حول التشفير
يتم الكشف عن فشل التوصيل عن طريق نبضات القلب. في حالة انتهاء المهلة، سيقوم العميل تلقائيًا بتغيير رقم المنفذ وإعادة الاتصال. إذا نجحت إعادة الاتصال، فسيتم استرداد الاتصال السابق، وستظل جميع محادثات UDP الحالية صالحة.
على سبيل المثال، إذا كنت تستخدم udp2raw + OpenVPN، فلن يفقد OpenVPN الاتصال بعد أي عملية إعادة اتصال، حتى إذا تم إعادة توصيل كابل الشبكة أو تغيير نقطة وصول WiFi .
تعدد الإرسال يمكن لعميل واحد التعامل مع اتصالات UDP متعددة، وكلها تشترك في نفس الاتصال الأولي.
عملاء متعددون يمكن أن يحتوي خادم واحد على عملاء متعددين.
دعم NAT تعمل جميع الأوضاع الثلاثة في بيئات NAT.
تم اختبار دعم OpenVZ على BandwagonHost VPS.
من السهل إنشاء أي تبعيات. لتجميع udp2raw بشكل متبادل، كل ما عليك فعله هو تنزيل سلسلة أدوات، وتعديل ملف makefile للإشارة إلى سلسلة الأدوات، وتشغيل 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 أو أنه مدعوم بشكل سيئ. افترض أن عنوان IP للخادم الخاص بك هو 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_Guide
-a
يضيف الخيار تلقائيًا قاعدة iptables (أو بعض قواعد iptables) لك، ويعتمد udp2raw على قاعدة iptables هذه للعمل بثبات. انتبه إلى أنك لا تنسى -a
(إنه خطأ شائع). إذا كنت لا تريد أن يضيف udp2raw قاعدة iptables تلقائيًا، فيمكنك إضافتها يدويًا (ألق نظرة على الخيار -g
) وحذف -a
.
udp2raw-tunnel
git version:6e1df4b39f build date:Oct 24 2017 09:21:15
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> avaliable values:faketcp(default),udp,icmp
-k,--key <string> password to gen symetric key,default:"secret key"
--cipher-mode <string> avaliable values:aes128cbc(default),xor,none
--auth-mode <string> avaliable 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
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
--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
--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
--clear clear any iptables rules added by this program.overrides everything
-h,--help print this help message
-a
و -g
يرسل هذا البرنامج الحزم عبر مأخذ التوصيل الخام. في وضع FakeTCP، يجب أن يتم حظر معالجة حزم TCP لنواة Linux من خلال قاعدة iptables على كلا الجانبين، وإلا سترسل النواة تلقائيًا RST لحزمة TCP غير محددة وستتحمل مشاكل الاستقرار/الأداء. يمكنك استخدام الخيار -a
للسماح للبرنامج بإضافة/حذف قاعدة iptables تلقائيًا عند البدء/الخروج. يمكنك أيضًا استخدام الخيار -g
لإنشاء قاعدة iptables وإضافتها يدويًا.
--cipher-mode
و --auth-mode
يُقترح استخدام aes128cbc
+ hmac_sha1
للحصول على أقصى قدر من الأمان. إذا كنت ترغب في تشغيل البرنامج على جهاز توجيه، يمكنك تجربة xor
+ simple
، والذي يمكن أن يخدع فحص الحزم بواسطة جدران الحماية معظم الوقت، لكنه لا يستطيع حمايتك من الهجمات الخطيرة. الوضع بلا هو فقط لغرض التصحيح. لا يوصى بضبط وضع التشفير أو وضع المصادقة على لا شيء.
--seq-mode
لا يعمل وضع FakeTCP بنسبة 100% مثل اتصال TCP الحقيقي. قد يتمكن مزودو خدمة الإنترنت من التمييز بين حركة مرور TCP المحاكاة وحركة مرور TCP الحقيقية (على الرغم من أنها مكلفة). يمكن أن يساعدك الوضع التسلسلي على تغيير سلوك زيادة التسلسل قليلاً. إذا واجهت مشاكل في الاتصال، حاول تغيير القيمة.
--lower-level
--lower-level
يسمح لك بإرسال حزم على مستوى OSI 2 (مستوى الارتباط)، بحيث يمكنك تجاوز أي قواعد iptables محلية. إذا كانت لديك قواعد iptables معقدة تتعارض مع udp2raw وكنت غير قادر (أو كسول جدًا) على تحرير قواعد iptables، فقد يكون --lower-level
مفيدًا جدًا. جرب --lower-level auto
للكشف التلقائي عن المعلمات، ويمكنك تحديدها يدويًا في حالة فشل auto
.
التنسيق اليدوي if_name#dest_mac_adress
,ie: eth0#00:23:45:67:89:b9
.
--keep-rule
مراقبة iptables وإعادة إضافة قواعد iptables تلقائيًا (لمنع معالجة kernel tcp) إذا لزم الأمر. مفيد بشكل خاص عندما يتم مسح قواعد iptables بواسطة برامج أخرى (على سبيل المثال، إذا كنت تستخدم openwrt، في كل مرة تقوم فيها بتغيير الإعداد والالتزام به، فإن قاعدة iptables يمكن تطهيرها وإعادة بنائها).
--conf-file
يمكنك أيضًا تحميل الخيارات من ملف التكوين لإبعاد الأسرار عن أمر ps
.
على سبيل المثال، أعد كتابة الخيارات الخاصة بمثال server
أعلاه (في قسم البدء) في ملف التكوين:
server.conf
-s
# You can add comments like this
# Comments MUST occupy an entire line
# Or they will not work as expected
# Listen address
-l 0.0.0.0:4096
# Remote address
-r 127.0.0.1:7777
-a
-k passwd
--raw-mode faketcp
انتبه إلى المعلمة -k
: في وضع سطر الأوامر، ستتم إزالة علامات الاقتباس حول كلمة المرور بواسطة Shell. في ملفات التكوين، لا نقوم بإزالة علامات الاقتباس.
ثم ابدأ الخادم بـ
./udp2raw_amd64 --conf-file server.conf
--fifo
استخدم fifo (توجيه الإخراج المسمى) لإرسال الأوامر إلى البرنامج قيد التشغيل. على سبيل المثال --fifo fifo.file
.
من جانب العميل، يمكنك استخدام echo reconnect >fifo.file
لإجبار العميل على إعادة الاتصال. حاليًا لم يتم تنفيذ أي أمر للخادم.
iperf3 TCP عبر OpenVPN + udp2raw (لا يتم استخدام وضع iperf3 UDP بسبب خطأ مذكور في هذه المشكلة: esnet/iperf#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
(كانت السرعة العكسية مماثلة ولم يتم تحميلها)
الوضع الخام: وضع التشفير Faketcp: aes128cbc auth_mode: md5
(كانت السرعة العكسية مماثلة ولم يتم تحميلها)
تحقق من الويكي لمزيد من المعلومات:
https://github.com/wangyu-/udp2raw-tunnel/wiki