Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
rathole — وكيل عكسي خفيف الوزن وعالي الأداء لعبور NAT، مكتوب بلغة Rust. بديل لـ frp و ngrok. | Kitploit
أدوات/GitHubGitHub/rathole-org/rathole
أدوات عامةأمن الشبكاتالأدوات والمكونات
GitHubrathole-org/rathole

rathole

وكيل عكسي خفيف الوزن وعالي الأداء لعبور NAT، مكتوب بلغة Rust. بديل لـ frp و ngrok.

عرض المستودع
14.0k804منذ سنة واحدةتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

rathole

شعار rathole

نجوم GitHub إصدار GitHub (أحدث SemVer) حالة سير عمل GitHub (الفرع) جميع إصدارات GitHub سحوبات Docker انضم إلى الدردشة على https://gitter.im/rapiz1/rathole

English | 简体中文

وكيل عكسي آمن وثابت وعالي الأداء لاختراق NAT، مكتوب بلغة Rust

rathole، مثل frp وngrok، يمكن أن يساعد في عرض الخدمة على الجهاز الموجود خلف NAT على الإنترنت، عبر خادم بعنوان IP عام.

  • rathole
    • الميزات
    • بداية سريعة
    • الإعدادات
      • التسجيل
      • الضبط
    • القياس
    • الخطة

الميزات

  • أداء عالٍ يمكن تحقيق إنتاجية أعلى بكثير من frp، وأكثر استقرارًا عند التعامل مع عدد كبير من الاتصالات. انظر القياس
  • استهلاك منخفض للموارد يستهلك ذاكرة أقل بكثير من الأدوات المماثلة. انظر القياس. يمكن أن يكون الملف الثنائي بحجم ~500KiB ليتناسب مع قيود الأجهزة، مثل الأجهزة المضمنة كالموجهات.
  • الأمان الرموز المميزة للخدمات إلزامية ومخصصة لكل خدمة. الخادم والعملاء مسؤولون عن إعداداتهم الخاصة. مع بروتوكول Noise الاختياري، يمكن تكوين التشفير بسهولة. لا حاجة لإنشاء شهادة موقعة ذاتيًا! كما أن TLS مدعوم.
  • إعادة التحميل السريع يمكن إضافة الخدمات أو إزالتها ديناميكيًا عن طريق إعادة تحميل ملف الإعدادات. API HTTP قيد التطوير.

بداية سريعة

يمكن الحصول على rathole كامل الإمكانيات من صفحة الإصدارات. أو البناء من المصدر للمنصات الأخرى ولتقليل حجم الملف الثنائي. تتوفر أيضًا صورة Docker.

استخدام rathole مشابه جدًا لـ frp. إذا كانت لديك خبرة مع الأخير، فإن الإعدادات ستكون سهلة جدًا بالنسبة لك. الاختلاف الوحيد هو أن إعدادات الخدمة مقسمة إلى جانب العميل وجانب الخادم، وأن الرمز المميز إلزامي.

لاستخدام rathole، تحتاج إلى خادم بعنوان IP عام، وجهاز خلف NAT، حيث توجد بعض الخدمات التي تحتاج إلى عرضها على الإنترنت.

افترض أن لديك NAS في المنزل خلف NAT، وتريد عرض خدمة ssh الخاصة به على الإنترنت:

  1. على الخادم الذي لديه IP عام

أنشئ ملف server.toml بالمحتوى التالي وقم بتعديله حسب احتياجاتك.

root@kitploit:~
# server.toml
[server]
bind_addr = "0.0.0.0:2333" # `2333` تحدد المنفذ الذي يستمع إليه rathole للعملاء

[server.services.my_nas_ssh]
token = "use_a_secret_that_only_you_know" # الرمز المستخدم لمصادقة العميل للخدمة. قم بتغييره إلى قيمة عشوائية.
bind_addr = "0.0.0.0:5202" # `5202` تحدد المنفذ الذي يعرض `my_nas_ssh` على الإنترنت

ثم قم بتشغيل:

root@kitploit:~
./rathole server.toml
  1. على المضيف الموجود خلف NAT (NAS الخاص بك)

أنشئ ملف client.toml بالمحتوى التالي وقم بتعديله حسب احتياجاتك.

root@kitploit:~
# client.toml
[client]
remote_addr = "myserver.com:2333" # عنوان الخادم. يجب أن يكون المنفذ مماثلاً للمنفذ الموجود في `server.bind_addr`

[client.services.my_nas_ssh]
token = "use_a_secret_that_only_you_know" # يجب أن يكون مماثلاً للخادم لتجاوز المصادقة
local_addr = "127.0.0.1:22" # عنوان الخدمة التي تحتاج إلى إعادة التوجيه

ثم قم بتشغيل:

root@kitploit:~
./rathole client.toml
  1. الآن سيحاول العميل الاتصال بالخادم myserver.com على المنفذ 2333، وسيتم إعادة توجيه أي حركة مرور إلى myserver.com:5202 إلى منفذ العميل 22.

وبالتالي يمكنك استخدام ssh myserver.com:5202 للاتصال بـ NAS الخاص بك.

لتشغيل rathole كخدمة خلفية على Linux، راجع أمثلة systemd.

الإعدادات

يمكن لـ rathole أن يحدد تلقائيًا ما إذا كان سيعمل في وضع الخادم أو وضع العميل، وفقًا لمحتوى ملف الإعدادات، إذا كان هناك كتلة واحدة فقط من [server] أو [client]، كما في المثال في بداية سريعة.

ولكن يمكن أيضًا وضع كتلتي [client] و [server] في ملف واحد. ثم على جانب الخادم، قم بتشغيل rathole --server config.toml وعلى جانب العميل، قم بتشغيل rathole --client config.toml لتحديد وضع التشغيل لـ rathole بشكل صريح.

قبل الانتقال إلى مواصفات الإعدادات الكاملة، يُنصح بإلقاء نظرة سريعة على أمثلة الإعدادات للحصول على فكرة عن تنسيق الإعدادات.

انظر النقل لمزيد من التفاصيل حول التشفير وكتلة transport.

فيما يلي مواصفات الإعدادات الكاملة:

root@kitploit:~
[client]
remote_addr = "example.com:2333" # ضروري. عنوان الخادم
default_token = "default_token_if_not_specify" # اختياري. الرمز الافتراضي للخدمات، إذا لم تحدد كل خدمة رمزها الخاص
heartbeat_timeout = 40 # اختياري. اضبط على 0 لتعطيل اختبار نبضات القلب على طبقة التطبيق. يجب أن تكون القيمة أكبر من `server.heartbeat_interval`. الافتراضي: 40 ثانية
retry_interval = 1 # اختياري. الفاصل الزمني بين محاولات إعادة الاتصال بالخادم. الافتراضي: 1 ثانية

[client.transport] # الكتلة بأكملها اختيارية. حدد وسيلة النقل المستخدمة
type = "tcp" # اختياري. القيم الممكنة: ["tcp", "tls", "noise"]. الافتراضي: "tcp"

[client.transport.tcp] # اختياري. يؤثر أيضًا على `noise` و `tls`
proxy = "socks5://user:[email protected]:1080" # اختياري. الوكيل المستخدم للاتصال بالخادم. `http` و `socks5` مدعومان.
nodelay = true # اختياري. يحدد ما إذا كان سيتم تمكين TCP_NODELAY، إذا كان ذلك مناسبًا، لتحسين زمن الوصول ولكن تقليل عرض النطاق الترددي. الافتراضي: true
keepalive_secs = 20 # اختياري. يحدد `tcp_keepalive_time` في `tcp(7)`، إذا كان ذلك مناسبًا. الافتراضي: 20 ثانية
keepalive_interval = 8 # اختياري. يحدد `tcp_keepalive_intvl` في `tcp(7)`، إذا كان ذلك مناسبًا. الافتراضي: 8 ثوان

[client.transport.tls] # ضروري إذا كان `type` هو "tls"
trusted_root = "ca.pem" # ضروري. شهادة المصادقة (CA) التي وقعت شهادة الخادم
hostname = "example.com" # اختياري. اسم المضيف الذي يستخدمه العميل للتحقق من الشهادة. إذا لم يتم تعيينه، يتم الرجوع إلى `client.remote_addr`

[client.transport.noise] # بروتوكول Noise. راجع `docs/transport.md` لمزيد من الشرح
pattern = "Noise_NK_25519_ChaChaPoly_BLAKE2s" # اختياري. القيمة الافتراضية كما هو موضح
local_private_key = "key_encoded_in_base64" # اختياري
remote_public_key = "key_encoded_in_base64" # اختياري

[client.transport.websocket] # ضروري إذا كان `type` هو "websocket"
tls = true # إذا كان `true` فسيستخدم الإعدادات في `client.transport.tls`

[client.services.service1] # خدمة تحتاج إلى إعادة التوجيه. يمكن تغيير الاسم `service1` بشكل عشوائي، طالما أنه مماثل للاسم في إعدادات الخادم
type = "tcp" # اختياري. البروتوكول الذي يحتاج إلى إعادة التوجيه. القيم الممكنة: ["tcp", "udp"]. الافتراضي: "tcp"
token = "whatever" # ضروري إذا لم يتم تعيين `client.default_token`
local_addr = "127.0.0.1:1081" # ضروري. عنوان الخدمة التي تحتاج إلى إعادة التوجيه
nodelay = true # اختياري. تجاوز `client.transport.nodelay` لكل خدمة
retry_interval = 1 # اختياري. الفاصل الزمني بين محاولات إعادة الاتصال بالخادم. الافتراضي: يرث الإعدادات العامة

[client.services.service2] # يمكن تعريف خدمات متعددة
local_addr = "127.0.0.1:1082"

[server]
bind_addr = "0.0.0.0:2333" # ضروري. العنوان الذي يستمع إليه الخادم للعملاء. بشكل عام، يحتاج المنفذ فقط إلى التغيير.
default_token = "default_token_if_not_specify" # اختياري
heartbeat_interval = 30 # اختياري. الفاصل الزمني بين نبضات القلب على طبقة التطبيق. اضبط على 0 لتعطيل إرسال نبضات القلب. الافتراضي: 30 ثانية

[server.transport] # نفس `[client.transport]`
type = "tcp"

[server.transport.tcp] # نفس العميل
nodelay = true
keepalive_secs = 20
keepalive_interval = 8

[server.transport.tls] # ضروري إذا كان `type` هو "tls"
pkcs12 = "identify.pfx" # ضروري. ملف pkcs12 لشهادة الخادم والمفتاح الخاص
pkcs12_password = "password" # ضروري. كلمة مرور ملف pkcs12

[server.transport.noise] # نفس `[client.transport.noise]`
pattern = "Noise_NK_25519_ChaChaPoly_BLAKE2s"
local_private_key = "key_encoded_in_base64"
remote_public_key = "key_encoded_in_base64"

[server.transport.websocket] # ضروري إذا كان `type` هو "websocket"
tls = true # إذا كان `true` فسيستخدم الإعدادات في `server.transport.tls`

[server.services.service1] # يجب أن يكون اسم الخدمة مماثلاً لجانب العميل
type = "tcp" # اختياري. نفس `[client.services.X.type]`
token = "whatever" # ضروري إذا لم يتم تعيين `server.default_token`
bind_addr = "0.0.0.0:8081" # ضروري. العنوان الذي يتم عرض الخدمة عليه. بشكل عام، يحتاج المنفذ فقط إلى التغيير.
nodelay = true # اختياري. نفس العميل

[server.services.service2]
bind_addr = "0.0.0.1:8082"

التسجيل

يستخدم rathole، مثل العديد من برامج Rust الأخرى، متغيرات البيئة للتحكم في مستوى التسجيل. تتوفر المستويات info، warn، error، debug، trace.

root@kitploit:~
RUST_LOG=error ./rathole config.toml

سيؤدي ذلك إلى تشغيل rathole مع تسجيل مستوى الأخطاء فقط.

إذا لم يكن RUST_LOG موجودًا، فإن مستوى التسجيل الافتراضي هو info.

الضبط

منذ الإصدار v0.4.7، يقوم rathole بتمكين TCP_NODELAY افتراضيًا، مما يفيد زمن الوصول والتطبيقات التفاعلية مثل rdp وخوادم Minecraft. ومع ذلك، فإنه يقلل قليلاً من عرض النطاق الترددي.

إذا كان عرض النطاق الترددي أكثر أهمية، فيمكن تعطيل TCP_NODELAY باستخدام nodelay = false.

القياس

لدى rathole زمن وصول مشابه لـ frp، ولكن يمكنه التعامل مع عدد أكبر من الاتصالات، وتوفير عرض نطاق ترددي أكبر، مع استخدام ذاكرة أقل.

لمزيد من التفاصيل، راجع الصفحة المنفصلة القياس.

ومع ذلك، لا تستنتج من هنا أن rathole يمكنه جعل خدمتك المعاد توجيهها أسرع عدة مرات من ذي قبل بطريقة سحرية. تم إجراء القياس على الحلقة المحلية (loopback)، مما يشير إلى الأداء عندما تكون المهمة مقيدة بوحدة المعالجة المركزية. يمكن للمرء أن يحصل على تحسن كبير إذا لم تكن الشبكة هي عنق الزجاجة. لسوء الحظ، هذا ليس صحيحًا للعديد من المستخدمين. في هذه الحالة، الفائدة الرئيسية هي استهلاك أقل للموارد، بينما قد لا يتحسن عرض النطاق الترددي وزمن الوصول بشكل كبير.

إنتاجية HTTP معدل نقل TCP معدل نقل UDP الذاكرة

الخطة

  • واجهات برمجة تطبيقات HTTP للإعدادات

خارج النطاق يسرد الميزات التي لا يُخطط لتنفيذها ولماذا.

تنزيل الأداة