استخدام FRP للوصول إلى بيئة ServBay المحلية من الإنترنت (اختراق الشبكة المحلية)
يُعد FRP أداة بروكسي عكسي عالية الأداء وسهلة الاستخدام، مثالية للمطورين الذين يريدون إتاحة خدماتهم المحلية (مثل المواقع، الـ API، قواعد البيانات وغيرها) بأمان وسهولة إلى الإنترنت. يعتمد FRP على هيكلية عميل (frpc
) وخادم (frps
) لتفعيل هذا الاختراق بكفاءة.
في هذا الدليل سنشرح لمستخدمي ServBay، خصوصًا على macOS، كيفية إعداد واستخدام عميل FRP (frpc
) لإنشاء نفق آمن، يسمح لك بجعل خدمات الويب المحلية التي تديرها في ServBay متاحة من الإنترنت. هذا ضروري للعرض عن بُعد، التطوير التعاوني، استقبال طلبات Webhook أو اختبارات الـ API من خارج الشبكة المحلية.
نظرة تقنية على المبدأ
تكمن فكرة FRP في إنشاء قناة مشفرة بين جهازك داخل الشبكة المحلية (يعمل عليه frpc
، أي جهاز ServBay) وسيرفر خارجي عام (يعمل عليه frps
). أي طلب خارجي يصل أولًا إلى الخادم (frps)، ثم يُعاد توجيهه تلقائيًا عبر النفق إلى العميل (frpc) الذي يوجهه بدوره إلى الخدمة المحلية في ServBay (مثلاً موقعك أو API). سيرد السيرفر على المستخدم بالاتجاه المعاكس.
تتيح هذه الآلية تجاوز قيود الجدران النارية والموجهات، وإتاحة خدمات الشبكة المحلية للعالم الخارجي، كما تدعم عدة بروتوكولات: TCP، UDP، HTTP، HTTPS—الأمر الذي يمنح بيئة ServBay قوة وصول عن بُعد.
سيناريوهات الاستخدام
من خلال دمج ServBay مع FRP سيمكنك بسهولة تحقيق السيناريوهات التالية:
- العرض والتطوير عن بعد: اعرض تطبيقك أو موقعك المحلي لفريقك أو عملاءك مباشرة دون نشره على سيرفر خارجي.
- اختبار Webhook: استقبال طلبات Webhook من خدمات خارجية (GitHub، Stripe، WeChat Pay وغيرهم) وتجربتها محليًا.
- التكامل بين APIs: مشاركة الـ API المطور محليًا مع مطوري الواجهة الأمامية أو شركاء خارجيين للاختبار المشترك.
- اختبار التطوير على الأجهزة المحمولة: الوصول لمواقع أو تطبيقات ServBay من أجهزة موبايل للتاكد من التوافقية عبر الأجهزة.
- مشاركة مؤقتة: شارك ملفات أو خدمات محلية بسرعة بدون إعدادات معقدة.
المتطلبات الأساسية
قبل البدء في إعداد FRP تأكد من:
- تنصيب وتشغيل ServBay: ServBay منصّب على جهازك (macOS) والخدمة التي ترغب بمشاركتها محليًا تعمل ويمكنك الوصول إليها من المتصفح.
- توفر خادم FRP خارجي (
frps
): لديك سيرفر خارجي (يمتلك IP عام) عليه FRP Server (frps
). سيركز الدليل على إعداد العميل (frpc
). - دومين عام (اختياري، ويفضل لـ HTTP/HTTPS): لو ترغب بالوصول عبر دومين احتجت لامتلاك دومين خاص بك وتعديل السجلات DNS.
- تنصيب عميل FRP (
frpc
): FRP Client غير مضمن في ServBay ويجب عليك تحميله وتثبيته منفصلًا.
التحضير وتثبيت عميل FRP
تابع الخطوات التالية لتثبيت عميل FRP (frpc
) على جهاز macOS الذي يدير ServBay:
تحميل عميل FRP: اذهب إلى صفحة إصدارات FRP على GitHub وحمّل النسخة الأحدث المطابقة لهندسة نظامك.
- لأجهزة Apple Silicon (M1/M2/M3 ...) حمّل ملف
frp_*.darwin_arm64.tar.gz
. - لأجهزة Intel حمّل ملف
frp_*.darwin_amd64.tar.gz
.
- لأجهزة Apple Silicon (M1/M2/M3 ...) حمّل ملف
تثبيت عميل FRP: فك الضغط عن الملف وقم بنسخ الملف التنفيذي
frpc
إلى أحد مسارات الـ PATH مثل/usr/local/bin
لتتمكن من تشغيله من أي موقع في الطرفية.انتبه أن رقم الإصدار (مثلاً
0.52.3
) ونوع النظام (darwin_arm64
) هما مثال ويفترض ضبطهما حسب النسخة التي حمّلتها بالفعل.bash# نفترض أن الملف هو frp_0.52.3_darwin_arm64.tar.gz cd ~/Downloads # فك الضغط (غيّر الاسم حسب ما حمّلته) tar -zxvf frp_0.52.3_darwin_arm64.tar.gz # دخول المجلد المستخرج (عدّل الاسم حسب الحاجة) cd frp_0.52.3_darwin_arm64 # نسخ frpc إلى /usr/local/bin sudo cp frpc /usr/local/bin/ # (اختياري) نسخ ملف frpc.toml إلى المجلد الرئيسي للمستخدم # cp frpc.toml ~/
1
2
3
4
5
6
7
8
9
10
11
12
13
14أدخل كلمة مرور المستخدم لإتمام أمر
sudo
.التحقق من التثبيت: افتح نافذة طرفية جديدة ونفذ الأمر التالي للتحقق من الإعداد:
bashfrpc -v # من المتوقع عرض: frpc version 0.52.3
1
2إذا ظهر رقم الإصدار فالتثبيت تم بنجاح.
إعداد قناة FRP للعميل
يتم إعداد FRP client عبر ملف إعداد غالبًا ما يسمى frpc.toml
(ويفضل الأن استخدام ملف بصيغة TOML). ينبغي إنشاء أو تعديل هذا الملف لتحديد طريقة اتصال frpc
مع الخادم (frps
) وكيف سيتم توجيه خدمات ServBay للعالم الخارجي.
شرح ملف الإعداد frpc.toml
فيما يلي مثال لهيكل إعداد أساسي يوضح الاتصال وتعريف البروكسي:
# frpc.toml - مثال على إعداد عميل FRP
# [common] : إعدادات الاتصال بالخادم
serverAddr = "your-frps-server.com" # عنوان إدارة خادم FRP أو دومينه
serverPort = 7000 # المنفذ المخصص لاتصال العميل بالخادم (عادة 7000)
# إعداد المصادقة (ينصح باستخدام token)
auth.method = "token"
auth.token = "your_authentication_token" # يجب أن يطابق الإعداد في الخادم
# اختياري: تفعيل التشفير TLS لزيادة الأمان
# tls_enable = true
# [[proxies]] : إعداد واحد أو أكثر لقنوات البروكسي
[[proxies]]
name = "my-web-service" # اسم فريد للبروكسي داخل الملف
type = "http" # نوع البروكسي: http, https, tcp, udp ...
localIP = "127.0.0.1" # عنوان الخدمة المحلية (عادة 127.0.0.1)
localPort = 80 # المنفذ المحلي الذي تستمع له الخدمة (مثلاً 80 لـ http)
customDomains = ["servbay.your-domain.com"] # الدومين المستخدم للوصول للخدمة (يجب ضبطه في DNS لما يوجه لأيبى الخادم)
# يمكن إضافة المزيد من البروكسي عبر مزيد من [[proxies]]
# [[proxies]]
# ... (خدمة أخرى)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
العنصر | الملف/القسم | الشرح |
---|---|---|
serverAddr | [common] | عنوان خادم FRP (IP عام أو دومين). |
serverPort | [common] | المنفذ المخصص للاتصال بالخادم (افتراضي 7000، اضبط حسب إعدادك). |
auth.method | [common] | طريقة المصادقة (عادةً token ويجب مطابقة إعداد الخادم). |
auth.token | auth (تحت [common] ) | الرمز السري المستخدم للمصادقة (لا تشاركه مع الغير). |
tls_enable | [common] | تفعيل التشفير بين العميل والخادم (ينصح بـ true ). |
[[proxies]] | المستوى الجذري | تعريف بروكسيات متعددة، كل [[proxies]] لمجموعة منفصلة من الإعدادات. |
name | [[proxies]] | اسم البروكسي—يجب أن يكون فريدًا داخل الملف ويفضل أن يصف الخدمة. |
type | [[proxies]] | نوع البروتوكول (http , https , tcp , udp ,...اختر المناسب لخدمتك). |
localIP | [[proxies]] | عنوان الـ IP المحلي (عادةً 127.0.0.1). |
localPort | [[proxies]] | المنفذ المحلي (مثلاً 80 لـ HTTP، 443 لـ HTTPS، 3306 لـ MySQL...) |
remotePort | [[proxies]] | (فقط لأنواع tcp /udp ) المنفذ الخارجي المفتوح بالعالم. |
customDomains | [[proxies]] | (فقط لـ http /https ) قائمة بالدومينات التي تصل عبرها للخدمة. يجب توجيهها في DNS لأيبى الخادم. |
subdomain | [[proxies]] | (فقط لـ http /https مع دعم الخادم) لتعريف دومين فرعي على المضيف إذا سمح الخادم. |
[proxies.plugin] | [[proxies]] | إعداد إضافي للبلجنات الخاصة (مثلاً https2https). |
hostHeaderRewrite | [proxies.plugin] أو [[proxies]] | تعديل رأس Host في الطلبات الموجهة للخدمة المحلية—مفيد مع الاستضافة الافتراضية للويب في ServBay. يجب مطابقته مع دومين الموقع المحلي. |
مثال نموذجي: توجيه خدمة HTTPS لموقع ServBay
عادةً يُفعّل ServBay الـ HTTPS تلقائيًا على مواقعك المحلية مع إدارة شهادات SSL. لإتاحتها عبر FRP استعمل نوع بروكسي https
وغالبًا مع خاصية إعادة كتابة Host، أو استخدم توجيه TCP للمنفذ 443. وترتكز إعدادات الاستضافة الافتراضية في ServBay على رأس Host، لذا استخدام النوع https
مع hostHeaderRewrite
هو الأمثل عادةً.
مثال: افترض أن موقعك المحلي يستخدم دومين servbay.test
وتريد اتاحته عبر دومين عام مثل test-frp.servbay.app
، وتأكد من ضبط DNS ليوجه الدومين الجديد إلى خادم FRP الصحيح.
أنشئ ملف الإعداد frpc.toml
(مثلاً في ~/frpc.toml
) وأضف الآتي:
# مثال frpc.toml لإتاحة موقع HTTPS مستضاف عبر ServBay
# [common]: إعدادات الاتصال بالخادم
serverAddr = "frps.servbay.demo" # عدل هذا بقيمة خادمك
serverPort = 7000 # أو حسب إعدادك
auth.method = "token"
auth.token = "servbay_demo_token" # أدخِل رمز التوثيق المخصص لك
# ينصح بتفعيل التشفير بين العميل والخادم
tls_enable = true
# [[proxies]]: إعداد القناة لبروكسي HTTPS لموقعك المحلي
[[proxies]]
name = "servbay-website-https" # اختر اسما معبرًا
type = "https" # نوع البروكسي
# الدومين الخارجي الذي يصل العملاء من خلاله للخدمة
customDomains = ["test-frp.servbay.app"] # عدل بقيمة دومينك العام
# تحويل الطلبات إلى الخدمة المحلية في ServBay
localIP = "127.0.0.1"
localPort = 443 # المنفذ الافتراضي لـ HTTPS في ServBay
# مهم: إعادة كتابة رأس Host ليطابق دومين الموقع المحلي في ServBay
# لأن السيرفر (Nginx/Caddy) يحدد الموقع انطلاقا من هذا الرأس
hostHeaderRewrite = "servbay.test" # عيّن دومين موقعك المحلي في ServBay
# اختياري: إضافة رأس مخصص مع الطلبات
[proxies.requestHeaders.set]
x-from-where = "frp-tunnel"
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
اضبط الإعدادات (serverAddr
, serverPort
, auth.token
, customDomains
, hostHeaderRewrite
) بحسب بياناتك.
ملاحظة بخصوص أهمية hostHeaderRewrite
: يستخدم ServBay خوادم ويب (Nginx أو Caddy مثلًا) للتمييز بين المواقع بالاعتماد على رأس Host. وعند المرور عبر قناة FRP سيصل الطلب برأس الدومين الخارجي (test-frp.servbay.app
) بدلًا من الدومين المحلي (servbay.test
). إذا لم تعالج هذا، قد ترى صفحات خطأ (404) أو صفحة افتراضية. لذا من الضروري تعيين hostHeaderRewrite
بدومين الموقع المحلي الصحيح.
تشغيل عميل FRP
بعد إنشاء وحفظ ملف frpc.toml
، شغل الطرفية واذهب لمجلد الملف (أو استعمل المسار الكامل إذا كان في المجلد الرئيسي)، ثم ابدأ العميل بالأمر:
# إذا كان الملف في المجلد الحالي
frpc -c frpc.toml
# أو باستخدام المسار الكامل إذا كان في المجلد الرئيسي
# frpc -c ~/frpc.toml
2
3
4
5
سيعمل frpc
في الواجهة الأمامية وسيتصل بالسيرفر. إذا نجح الاتصال سترى سجل الأحداث في الطرفية يؤشر على نجاح إعداد النفق.
لجعل frpc
يعمل بالخلفية يمكنك استخدام أمر nohup
أو أداة macOS launchctl
مثلًا:
# إذا كان frpc.toml في المجلد الرئيسي
nohup frpc -c ~/frpc.toml &
2
سيتم توجيه مخرجات البرنامج إلى ملف nohup.out
وسيعمل العميل في الخلفية. (استخدام launchctl هو الأسلوب الرسمي ولكن معقد نسبيًا).
التحقق من الخدمة وتشخيص السجلات
خطوات التحقق
بعد تشغيل frpc
وتأكيد نجاح الاتصال راقب في المتصفح ما يلي عند فتح الدومين العام (مثال: https://test-frp.servbay.app
):
- تحميل الصفحة بنجاح دون أخطاء أو تنبيهات SSL (بالنسبة لـ HTTPS) أو مشاكل أخرى.
- يظهر كود HTTP 200 أو الكود المتوقع.
- تشابه المحتوى بين صفحة ServBay المحلية (
https://servbay.test
) والموقع الذي تم الوصول إليه عن بعد. - وجود قفل الأمان في المتصفح (في حال HTTPS) وتأكيد صلاحية شهادة SSL (أنها اُصدرت فعلاً للدومين الخارجي).
تشخيص السجلات
سجلات عميل FRP هي وسيلتك الأولى لتشخيص مشاكل الاتصال أو التوجيه. بشكل افتراضي ستُعرض في الطرفية عند تشغيل الأمر:
frpc -c frpc.toml --log_level debug
يمكن أيضًا إعداد ملف log عبر متغير log_file
داخل frpc.toml
(مثلاً: log_file = "/var/log/frpc.log"
)، ولمتابعته مباشرة:
tail -f /path/to/your/frpc.log
استكشاف الأخطاء الشائعة وحلّها
فيما يلي بعض المشاكل الشائعة وحلولها:
الظاهرة | الحلول |
---|---|
فشل المصادقة مع خادم FRP | تأكد من تطابق متغيرات [common] لـ auth.token وauth.method في كل من العميل والخادم. تحقق من سجلات الخادم للأخطاء. |
مشكلة في حل أو وصول الدومين الخارجي | راجع إعداد customDomains وتأكد أن الدومينات موجهة لـ IP الخادم في DNS (تحقق بـ ping your-frp-domain.com ). |
تظهر صفحة الترحيب الخاصة بـ FRP | غالبًا يعني أن الدومين وصل للخادم لكن لم يتم تعريفه في إعدادات العميل أو النوع غير صحيح (تحقق من customDomains وtype ). |
المنفذ المحلي محجوز أو الخدمة لم تبدأ | تأكد من تشغيل خدمة ServBay وأنها تستمع على المنفذ الصحيح (localPort ). تحقق باستخدام: lsof -i :PORT . |
النفق ينفصل باستمرار أو أداءه غير مستقر | راجع استقرار اتصال الإنترنت في كل من العميل والسيرفر. يمكنك زيادة القيم في [common] مثل: heartbeat_timeout = 30 . |
تحويل تلقائي من HTTP إلى HTTPS | تحقق من إعدادات خادم الويب في ServBay (مثل Nginx/Caddy)، وخصص النوع في type . |
مشاكل شهادة HTTPS (تحذيرات المتصفح) | إذا استخدمت شهادة ذاتية أو صادرة عن ServBay قد يظهر تحذير في المتصفح (متوقع). لتقليل التحذير، ثبّت شهادة الـ CA المحلية أو استخدم طرق بلجن معينة أو شهادات رسمية على الخادم. |
ظهور خطأ 404 عند الوصول | تحقق من إعداد hostHeaderRewrite وتأكد أنه يطابق دومين موقعك المحلي في ServBay. |
جدار حماية الخادم يمنع الاتصال | تأكد من فتح منافذ serverPort + منافذ الخدمات الخارجية على سيرفر FRP. |
جدار حماية macOS يمنع الاتصال | تأكد من عدم وجود قواعد مانعة للخروج إلى منفذ الخادم (serverPort ) أو الاتصالات الواردة لـ ServBay عبر localPort . |
العميل متصل لكن الخدمة غير متاحة من الخارج | غالبًا المشكلة في إعدادات السيرفر أو الشبكة بين العميل والسيرفر. تحقق من سجلات خادم FRP وأية قواعد توجيه مفقودة. |
ميزات FRP مع ServBay ونصائح الأمان
عند ربط FRP مع ServBay يحصل المطورون على مرونة وسهولة فائقة:
- دعم متعدد للبروتوكول: FRP يدعم HTTP, HTTPS, TCP, UDP وغيرهم—يمكنك أيضًا إتاحة قواعد بيانات أو SSH، وليس فقط المواقع.
- مرونة التكوين: ملف TOML بسيط يكفي لتعريف عدة بروكسيات وخدمات بآن واحد.
- مشروع مفتوح المصدر ويمكن التحكم به: FRP مفتوح المصدر وتتحكم به بالكامل بلا حاجة لأطراف ثالثة.
- حماية متقدمة: يدعم FRP المصادقة بالتوكن، تشفير TLS، وهكذا تُؤمن بياناتك. ويمكنك الاعتماد أيضًا على خاصيات أمان ServBay (كإدارة شهادات SSL).
توصيات أمان هامة:
- فعّل التشفير TLS: ينصح بشدة تعيين
tls_enable = true
في ملف الإعداد. - استخدم Token معقد وغير متوقع: واعمل على تغييره دوريًا.
- قلّل الخدمات المعروضة للعالم الخارجي: أظهر فقط ما تحتاجه فعلاً.
- استخدم دومينات عامة وليس الـ IP فقط: خصوصًا في خدمات HTTP/HTTPS لأمان ومرونة أكثر عبر customDomains.
- أمّن خادم FRP نفسه: افتح فقط المنافذ الضرورية وشغّل جدر الحماية.
- فعّل التحكم في الوصول: مثل التقييد عبر IP لمنع الوصول غير المرغوب فيه إذا توفر ذلك في الخادم.
باتباع هذه الخطوات والإعدادات تستطيع إتاحة خدمات ServBay المحلية للعالم بواسطة FRP بطريقة فعالة وآمنة—مما يسهل عملك كمطور، ويوفر بيئة اختبار قوية ومتاحة عن بعد.