
frp v0.71.0
وكيل عكسي سريع لمساعدتك في كشف خادم محلي خلف NAT أو جدار ناري إلى الإنترنت.
frp
الرعاة
frp هو مشروع مفتوح المصدر يستمر تطويره بفضل دعم رعاتنا الرائعين بالكامل. إذا كنت ترغب في الانضمام إليهم، يرجى التفكير في رعاية تطوير frp.
الرعاة الذهبيون
بيئة التطوير المتكاملة الكاملة المصممة لمطوري Go المحترفين
Recall.ai - واجهة برمجة تطبيقات لتسجيلات الاجتماعات
إذا كنت تبحث عن واجهة برمجة تطبيقات لتسجيل الاجتماعات، ففكر في الاطلاع على Recall.ai،
وهي واجهة برمجة تطبيقات تسجل اجتماعات Zoom وGoogle Meet وMicrosoft Teams والاجتماعات الحضورية والمزيد.
ما هو frp؟
frp هو وكيل عكسي سريع يتيح لك كشف خادم محلي يقع خلف NAT أو جدار حماية إلى الإنترنت. يدعم حاليًا بروتوكولات TCP وUDP، بالإضافة إلى HTTP وHTTPS، مما يتيح إعادة توجيه الطلبات إلى الخدمات الداخلية عبر اسم النطاق.
يوفر frp أيضًا وضع اتصال P2P.
جدول المحتويات
- حالة التطوير
- البنية
- مثال على الاستخدام
- الميزات
- ملفات التكوين
- استخدام متغيرات البيئة
- تقسيم التكوينات إلى ملفات مختلفة
- لوحة تحكم الخادم
- واجهة إدارة العميل
- المراقبة
- مصادقة العميل
- التشفير والضغط
- إعادة تحميل تكوين frpc تلقائيًا
- الحصول على حالة الوكيل من العميل
- السماح بمنافذ معينة فقط على الخادم
- إعادة استخدام المنافذ
- حد النطاق الترددي
- تعدد إرسال تدفق TCP
- دعم بروتوكول KCP
- دعم بروتوكول QUIC
- تجميع الاتصالات
- موازنة التحميل
- فحص صحة الخدمة
- إعادة كتابة رأس HTTP Host
- تعيين رؤوس HTTP أخرى
- الحصول على عنوان IP الحقيقي
- طلب مصادقة HTTP الأساسية (كلمة مرور) لخدمات الويب
- أسماء النطاقات الفرعية المخصصة
- توجيه URL
- تعدد إرسال منافذ TCP
- الاتصال بـ frps عبر PROXY
- تعيين نطاق المنافذ
- إضافات العميل
- إضافات إدارة الخادم
- بوابة نفق SSH
- الشبكة الافتراضية (VirtualNet)
- بوابات الميزات
- المشاريع ذات الصلة
- المساهمة
- التبرع
حالة التطوير
frp قيد التطوير حاليًا. يمكنك تجربة أحدث إصدار في فرع master، أو استخدام فرع dev للوصول إلى الإصدار قيد التطوير حاليًا.
نعمل حاليًا على الإصدار 2 ونحاول إجراء بعض إعادة هيكلة وتحسينات الكود. ومع ذلك، يرجى ملاحظة أنه لن يكون متوافقًا مع الإصدار 1.
سننتقل من الإصدار 0 إلى الإصدار 1 في الوقت المناسب وسنقبل فقط إصلاحات الأخطاء والتحسينات، وليس طلبات الميزات الكبيرة.
حول V2
إن تعقيد وصعوبة إصدار v2 أعلى بكثير مما كان متوقعًا. لا يمكنني العمل على تطويره إلا خلال فترات زمنية متقطعة، والانقطاعات المستمرة تعطل الإنتاجية بشكل كبير. نظرًا لهذا الوضع، سنواصل تحسين وتكرار الإصدار الحالي حتى يتوفر لدينا وقت فراغ أكبر للمضي قدمًا في إعادة الهيكلة الرئيسية للإصدار.
الفكرة وراء v2 مبنية على سنوات خبرتي وتأملي في مجال الحوسبة السحابية الأصلية، خاصة في K8s وServiceMesh. جوهره هو وكيل حديث من الطبقة الرابعة والطبقة السابعة، مشابه لـ envoy. هذا الوكيل نفسه قابل للتوسع بشكل كبير، ولا يقتصر على تنفيذ وظيفة اختراق الشبكة الداخلية فحسب، بل يمكن تطبيقه أيضًا في مجالات أخرى متنوعة. بناءً على هذا النواة القابلة للتوسع بشكل كبير، نهدف إلى تنفيذ جميع قدرات frp v1 مع معالجة الوظائف التي كانت غير قابلة للتحقيق سابقًا أو صعبة التنفيذ بطريقة أنيقة. علاوة على ذلك، سنحافظ على قدرات تطوير وتكرار فعالة.
بالإضافة إلى ذلك، أتصور أن frp نفسه سيصبح نظامًا ومنصة قابلة للتوسع بشكل كبير، على غرار كيفية توفير مجموعة من قدرات التوسع بناءً على K8s. في K8s، يمكننا تخصيص التطوير وفقًا لاحتياجات المؤسسات، باستخدام ميزات مثل CRD ووضع المتحكم وwebhook وCSI وCNI. في frp v1، قدمنا مفهوم إضافات الخادم، والتي نفذت بعض قابلية التوسع الأساسية. ومع ذلك، فإنها تعتمد على بروتوكول HTTP بسيط وتتطلب من المستخدمين تشغيل عمليات مستقلة وإدارتها بأنفسهم. هذا النهج بعيد عن المرونة والراحة، والاحتياجات الواقعية تختلف بشكل كبير. من غير الواقعي توقع أن مشروعًا مفتوح المصدر غير ربحي يديره عدد قليل من الأفراد يمكنه تلبية احتياجات الجميع.
أخيرًا، نعترف بأن التصميم الحالي لوحدات مثل إدارة التكوين والتحقق من الأذونات وإدارة الشهادات وإدارة واجهة برمجة التطبيقات ليس حديثًا بما يكفي. بينما قد نقوم ببعض التحسينات في إصدار v1، فإن ضمان التوافق يظل قضية صعبة تتطلب قدرًا كبيرًا من الجهد لمعالجتها.
نقدر بصدق دعمكم لـ frp.
البنية
مثال على الاستخدام
للبدء، قم بتنزيل أحدث برنامج لنظام التشغيل والبنية الخاصة بك من صفحة الإصدارات.
بعد ذلك، ضع ملف frps الثنائي وملف تكوين الخادم على الخادم A، الذي لديه عنوان IP عام.
أخيرًا، ضع ملف frpc الثنائي وملف تكوين العميل على الخادم B، الموجود على شبكة LAN لا يمكن الوصول إليها مباشرة من الإنترنت العام.
بعض برامج مكافحة الفيروسات تصنف frpc بشكل غير صحيح كبرنامج ضار وتحذفه. هذا بسبب أن frp أداة شبكات قادرة على إنشاء وكلاء عكسيين. أحيانًا تضع برامج مكافحة الفيروسات علامة على الوكلاء العكسيين بسبب قدرتهم على تجاوز قيود منافذ جدار الحماية. إذا كنت تستخدم برنامج مكافحة فيروسات، فقد تحتاج إلى إضافة frpc إلى القائمة البيضاء/الاستثناءات في إعدادات مكافحة الفيروسات لتجنب الحجر/الحذف العرضي. راجع المشكلة 3637 لمزيد من التفاصيل.
الوصول إلى جهاز الكمبيوتر الخاص بك في شبكة LAN عبر SSH
- قم بتعديل
frps.tomlعلى الخادم A عن طريق تعيينbindPortلاتصال عملاء frp به: ```toml
frps.toml
bindPort = 7000
2. شغّل `frps` على الخادم A:
`./frps -c ./frps.toml`
3. عدّل `frpc.toml` على الخادم B واضبط حقل `serverAddr` على عنوان IP العام لخادم frps الخاص بك: ```toml
# frpc.toml
serverAddr = "x.x.x.x"
serverPort = 7000
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
لاحظ أن localPort (المنصت على العميل) و remotePort (المكشوف على الخادم) يُستخدمان لحركة المرور الداخلة والخارجة من نظام frp، بينما يُستخدم serverPort للاتصال بين frps و frpc.
- شغّل
frpcعلى الخادم B:
./frpc -c ./frpc.toml
- للوصول إلى الخادم B من جهاز آخر عبر الخادم A باستخدام SSH (بافتراض أن اسم المستخدم هو
test)، استخدم الأمر التالي:
ssh -oPort=6000 [email protected]
مشاركة منفذ واحد بين خدمات SSH متعددة
ينفّذ هذا المثال خدمات SSH متعددة مكشوفة عبر نفس المنفذ باستخدام وكيل من نوع tcpmux. وبالمثل، طالما أن العميل يدعم طريقة اتصال وكيل HTTP Connect، يمكن تحقيق إعادة استخدام المنفذ بهذه الطريقة.
- انشر frps على جهاز بعنوان IP عام وعدّل ملف frps.toml. إليك إعدادًا مبسطًا: ```toml bindPort = 7000 tcpmuxHTTPConnectPort = 5002
2. انشر frpc على الجهاز الداخلي A باستخدام الإعداد التالي: ```toml
serverAddr = "x.x.x.x"
serverPort = 7000
[[proxies]]
name = "ssh1"
type = "tcpmux"
multiplexer = "httpconnect"
customDomains = ["machine-a.example.com"]
localIP = "127.0.0.1"
localPort = 22
- انشر frpc آخر على الجهاز الداخلي B بالإعداد التالي: ```toml serverAddr = "x.x.x.x" serverPort = 7000
[[proxies]] name = "ssh2" type = "tcpmux" multiplexer = "httpconnect" customDomains = ["machine-b.example.com"] localIP = "127.0.0.1" localPort = 22
4. للوصول إلى الجهاز الداخلي A باستخدام SSH ProxyCommand، بافتراض أن اسم المستخدم هو "test":
`ssh -o 'proxycommand socat - PROXY:x.x.x.x:%h:%p,proxyport=5002' [email protected]`
5. للوصول إلى الجهاز الداخلي B، الفرق الوحيد هو اسم النطاق، بافتراض أن اسم المستخدم هو "test":
`ssh -o 'proxycommand socat - PROXY:x.x.x.x:%h:%p,proxyport=5002' [email protected]`
### الوصول إلى خدمات الويب الداخلية باستخدام نطاقات مخصصة في الشبكة المحلية
في بعض الأحيان نحتاج إلى كشف خدمة ويب محلية خلف شبكة NAT للآخرين لأغراض الاختبار باستخدام اسم النطاق الخاص بنا.
لسوء الحظ، لا يمكننا حل اسم نطاق إلى عنوان IP محلي. ومع ذلك، يمكننا استخدام frp لكشف خدمة HTTP(S).
1. عدّل `frps.toml` واضبط منفذ HTTP لـ vhost على 8080: ```toml
# frps.toml
bindPort = 7000
vhostHTTPPort = 8080
إذا كنت تريد تكوين وكيل https، فستحتاج إلى إعداد vhostHTTPSPort.
- ابدأ تشغيل
frps:
./frps -c ./frps.toml
- عدّل
frpc.tomlواضبطserverAddrعلى عنوان IP الخاص بخادم frps البعيد. حددlocalPortالخاص بخدمة الويب الخاصة بك: ```toml
frpc.toml
serverAddr = "x.x.x.x" serverPort = 7000
[[proxies]] name = "web" type = "http" localPort = 80 customDomains = ["www.example.com"]
4. ابدأ تشغيل `frpc`:
`./frpc -c ./frpc.toml`
5. قم بتعيين سجل A الخاص بـ `www.example.com` إما إلى عنوان IP العام لخادم frps البعيد أو سجل CNAME يشير إلى نطاقك الأصلي.
6. قم بزيارة خدمة الويب المحلية الخاصة بك باستخدام الرابط `http://www.example.com:8080`.
### إعادة توجيه طلبات استعلام DNS
1. قم بتعديل `frps.toml`: ```toml
# frps.toml
bindPort = 7000
- شغّل
frps:
./frps -c ./frps.toml
- عدّل
frpc.tomlواضبطserverAddrعلى عنوان IP الخاص بخادم frps البعيد. وجّه طلبات استعلام DNS إلى خادم DNS العام من Google8.8.8.8:53: ```toml
frpc.toml
serverAddr = "x.x.x.x" serverPort = 7000
[[proxies]] name = "dns" type = "udp" localIP = "8.8.8.8" localPort = 53 remotePort = 6000
4. ابدأ تشغيل frpc:
`./frpc -c ./frpc.toml`
5. اختبر تحليل DNS باستخدام أمر `dig`:
`dig @x.x.x.x -p 6000 www.google.com`
### إعادة توجيه مقبس Unix Domain
اكشف مقبس Unix domain (مثل مقبس Docker daemon) كبروتوكول TCP.
قم بإعداد `frps` كما هو موضح أعلاه.
1. ابدأ تشغيل `frpc` بالتكوين التالي: ```toml
# frpc.toml
serverAddr = "x.x.x.x"
serverPort = 7000
[[proxies]]
name = "unix_domain_socket"
type = "tcp"
remotePort = 6000
[proxies.plugin]
type = "unix_domain_socket"
unixPath = "/var/run/docker.sock"
- اختبر الإعداد عن طريق الحصول على إصدار docker باستخدام
curl:
curl http://x.x.x.x:6000/version
كشف خادم ملفات HTTP بسيط
اكشف خادم ملفات HTTP بسيط للوصول إلى الملفات المخزنة في الشبكة المحلية من الإنترنت العام.
قم بإعداد frps كما هو موضح أعلاه، ثم:
- ابدأ
frpcبالإعداد التالي: ```toml
frpc.toml
serverAddr = "x.x.x.x" serverPort = 7000
[[proxies]] name = "test_static_file" type = "tcp" remotePort = 6000 [proxies.plugin] type = "static_file" localPath = "/tmp/files" stripPrefix = "static" httpUser = "abc" httpPassword = "abc"
2. قم بزيارة `http://x.x.x.x:6000/static/` من متصفحك وأدخل اسم المستخدم وكلمة المرور الصحيحين لعرض الملفات الموجودة في `/tmp/files` على جهاز `frpc`.
### تفعيل HTTPS لخدمة HTTP(S) محلية
يمكنك استبدال البرنامج المساعد بـ `https2https`، وتوجيه `localAddr` إلى نقطة نهاية HTTPS.
1. ابدأ تشغيل `frpc` بالإعدادات التالية: ```toml
# frpc.toml
serverAddr = "x.x.x.x"
serverPort = 7000
[[proxies]]
name = "test_https2http"
type = "https"
customDomains = ["test.example.com"]
[proxies.plugin]
type = "https2http"
localAddr = "127.0.0.1:80"
crtPath = "./server.crt"
keyPath = "./server.key"
hostHeaderRewrite = "127.0.0.1"
requestHeaders.set.x-from-where = "frp"
- قم بزيارة
https://test.example.com.
كشف خدمتك بشكل خاص
للتخفيف من المخاطر المرتبطة بكشف بعض الخدمات مباشرة على الشبكة العامة، يتطلب وضع STCP (TCP السري) استخدام مفتاح مشترك مسبقًا للوصول إلى الخدمة من العملاء الآخرين.
قم بتكوين frps كما هو موضح أعلاه.
- ابدأ تشغيل
frpcعلى الجهاز B باستخدام الإعداد التالي. هذا المثال لكشف خدمة SSH (المنفذ 22)، ولاحظ حقلsecretKeyللمفتاح المشترك مسبقًا، وأن حقلremotePortقد أُزيل هنا: ```toml
frpc.toml
serverAddr = "x.x.x.x" serverPort = 7000
[[proxies]] name = "secret_ssh" type = "stcp" secretKey = "abcdefg" localIP = "127.0.0.1" localPort = 22
2. ابدأ تشغيل `frpc` آخر (عادةً على جهاز آخر C) بالإعدادات التالية للوصول إلى خدمة SSH باستخدام مفتاح أمان (حقل `secretKey`): ```toml
# frpc.toml
serverAddr = "x.x.x.x"
serverPort = 7000
[[visitors]]
name = "secret_ssh_visitor"
type = "stcp"
serverName = "secret_ssh"
secretKey = "abcdefg"
bindAddr = "127.0.0.1"
bindPort = 6000
- على الجهاز C، اتصل عبر SSH بالجهاز B باستخدام هذا الأمر:
ssh -oPort=6000 127.0.0.1
وضع P2P
xtcp مصمم لنقل كميات كبيرة من البيانات مباشرة بين العملاء. لا يزال خادم frps مطلوبًا، حيث أن P2P هنا يشير فقط إلى نقل البيانات الفعلي.
لاحظ أنه قد لا يعمل مع جميع أنواع أجهزة NAT. قد ترغب في الرجوع إلى stcp إذا لم يعمل xtcp.
- قم بتشغيل
frpcعلى الجهاز B، واكشف منفذ SSH. لاحظ أن حقلremotePortقد أُزيل: ```toml
frpc.toml
serverAddr = "x.x.x.x" serverPort = 7000
set up a new stun server if the default one is not available.
natHoleStunServer = "xxx"
[[proxies]] name = "p2p_ssh" type = "xtcp" secretKey = "abcdefg" localIP = "127.0.0.1" localPort = 22
2. ابدأ نسخة أخرى من `frpc` (عادةً على جهاز آخر C) مع الإعداد للاتصال بـ SSH باستخدام وضع P2P: ```toml
# frpc.toml
serverAddr = "x.x.x.x"
serverPort = 7000
# set up a new stun server if the default one is not available.
# natHoleStunServer = "xxx"
[[visitors]]
name = "p2p_ssh_visitor"
type = "xtcp"
serverName = "p2p_ssh"
secretKey = "abcdefg"
bindAddr = "127.0.0.1"
bindPort = 6000
# when automatic tunnel persistence is required, set it to true
keepTunnelOpen = false
- على الجهاز C، اتصل عبر SSH بالجهاز B باستخدام هذا الأمر:
ssh -oPort=6000 127.0.0.1
الميزات
ملفات التكوين
منذ الإصدار v0.52.0، ندعم TOML وYAML وJSON للتكوين. يرجى ملاحظة أن INI أصبح قديمًا وسيتم إزالته في الإصدارات المستقبلية. ستكون الميزات الجديدة متاحة فقط في TOML أو YAML أو JSON. يجب على المستخدمين الذين يرغبون في هذه الميزات الجديدة تبديل صيغة التكوين الخاصة بهم وفقًا لذلك.
اقرأ ملفات التكوين النموذجية الكاملة لاكتشاف المزيد من الميزات غير الموصوفة هنا.
تستخدم الأمثلة صيغة TOML، ولكن لا يزال بإمكانك استخدام YAML أو JSON.
ملفات التكوين هذه هي للإشارة فقط. يرجى عدم استخدام هذا التكوين مباشرة لتشغيل البرنامج لأنه قد يسبب مشاكل متنوعة.
ملف التكوين الكامل لـ frps (الخادم)
ملف التكوين الكامل لـ frpc (العميل)
استخدام متغيرات البيئة
يمكن الإشارة إلى متغيرات البيئة في ملف التكوين، باستخدام الصيغة القياسية لـ Go:```toml
frpc.toml
serverAddr = "{{ .Envs.FRP_SERVER_ADDR }}" serverPort = 7000
[[proxies]] name = "ssh" type = "tcp" localIP = "127.0.0.1" localPort = 22 remotePort = {{ .Envs.FRP_SSH_REMOTE_PORT }}
باستخدام الإعداد أعلاه، يمكن تمرير المتغيرات إلى برنامج `frpc` بهذه الطريقة:```
export FRP_SERVER_ADDR=x.x.x.x
export FRP_SSH_REMOTE_PORT=6000
./frpc -c ./frpc.toml
frpc سيعرض قالب ملف الإعداد باستخدام متغيرات بيئة نظام التشغيل. تذكر أن تسبق مرجعك بـ .Envs.
تقسيم الإعدادات إلى ملفات مختلفة
يمكنك تقسيم إعدادات البروكسي المتعددة إلى ملفات مختلفة وتضمينها في الملف الرئيسي.```toml
frpc.toml
serverAddr = "x.x.x.x" serverPort = 7000 includes = ["./confd/*.toml"]
بعد اكتمال التثبيت، يمكنك تشغيل الأداة باستخدام الأمر التالي:
```bash
toolname --help
لمزيد من المعلومات حول خيارات سطر الأوامر، راجع التوثيق الرسمي.
المتطلبات الأساسية
- Python 3.8 أو أحدث
- pip (مدير حزم Python)
- اتصال بالإنترنت لتنزيل التبعيات
التثبيت من المصدر
إذا كنت تفضل التثبيت من الكود المصدري، اتبع الخطوات التالية:
git clone https://github.com/example/toolname.git
cd toolname
pip install -r requirements.txt
python setup.py install
التثبيت باستخدام Docker
يتوفر أيضًا ملف Dockerfile جاهز للاستخدام:
docker build -t toolname .
docker run -it toolname --help
التحقق من التثبيت
للتأكد من أن التثبيت تم بنجاح، قم بتشغيل:
toolname --version
يجب أن يظهر رقم الإصدار في الإخراج. إذا واجهت أي أخطاء، تأكد من تثبيت جميع التبعيات بشكل صحيح.```toml
./confd/test.toml
[[proxies]] name = "ssh" type = "tcp" localIP = "127.0.0.1" localPort = 22 remotePort = 6000
### لوحة تحكم الخادم
تحقق من حالة frp ومعلومات إحصائيات الوكلاء عبر لوحة التحكم.
قم بتكوين منفذ للوحة التحكم لتفعيل هذه الميزة:```toml
# The default value is 127.0.0.1. Change it to 0.0.0.0 when you want to access it from a public network.
webServer.addr = "0.0.0.0"
webServer.port = 7500
# dashboard's username and password are both optional
webServer.user = "admin"
webServer.password = "admin"
ثم قم بزيارة http://[serverAddr]:7500 لعرض لوحة التحكم، حيث يكون اسم المستخدم وكلمة المرور كلاهما admin.
بالإضافة إلى ذلك، يمكنك استخدام منفذ HTTPS عبر استخدام شهادة SSL الخاصة بنطاقاتك (wildcard أو عادية):```toml webServer.port = 7500
dashboard's username and password are both optional
webServer.user = "admin" webServer.password = "admin" webServer.tls.certFile = "server.crt" webServer.tls.keyFile = "server.key"
ثم قم بزيارة `https://[serverAddr]:7500` لمشاهدة لوحة التحكم عبر اتصال HTTPS آمن، حيث يكون اسم المستخدم وكلمة المرور كلاهما `admin`.

### واجهة إدارة العميل
تساعدك واجهة إدارة العميل على فحص وإدارة تكوين frpc والوكلاء (proxies).
قم بتكوين عنوان لواجهة الإدارة لتفعيل هذه الميزة:```toml
webServer.addr = "127.0.0.1"
webServer.port = 7400
webServer.user = "admin"
webServer.password = "admin"
ثم قم بزيارة http://127.0.0.1:7400 لعرض واجهة المستخدم الإدارية، حيث يكون اسم المستخدم وكلمة المرور كلاهما admin.
إدارة الوكيل الديناميكية (Store)
يمكنك إنشاء الوكلاء والزوار وتحديثهم وحذفهم ديناميكيًا في وقت التشغيل من خلال واجهة الويب أو API، دون الحاجة إلى إعادة تشغيل frpc.
لتفعيل هذه الميزة، قم بتكوين store.path لتحديد ملف لحفظ الإعدادات:```toml
[store]
path = "./db.json"
الوكلاء والزوار الذين تتم إدارتهم عبر المتجر يتم حفظهم على القرص واستعادتهم تلقائيًا عند إعادة تشغيل frpc. يعملون جنبًا إلى جنب مع الوكلاء المعرّفين في ملف الإعداد — إدخالات المتجر لها الأولوية عند تعارض الأسماء.
### المراقبة
عند تمكين خادم الويب، سيقوم frps بحفظ بيانات المراقبة في ذاكرة التخزين المؤقت لمدة 7 أيام. سيتم مسحها بعد إعادة تشغيل العملية.
كما أن Prometheus مدعوم أيضًا.
#### Prometheus
قم بتمكين لوحة التحكم أولاً، ثم قم بتكوين `enablePrometheus = true` في `frps.toml`.
`http://{dashboard_addr}/metrics` سيوفر بيانات مراقبة prometheus.
### مصادقة العميل
هناك طريقتان للمصادقة لمصادقة frpc مع frps.
يمكنك تحديد أي منهما لاستخدامه عن طريق تكوين `auth.method` في `frpc.toml` و `frps.toml`، الافتراضي هو token.
تكوين `auth.additionalScopes = ["HeartBeats"]` سيستخدم طريقة المصادقة المكوّنة لإضافة والتحقق من المصادقة على كل نبضة قلب بين frpc و frps.
تكوين `auth.additionalScopes = ["NewWorkConns"]` سيفعل الشيء نفسه لكل اتصال عمل جديد بين frpc و frps.
#### مصادقة الرمز المميز
عند تحديد `auth.method = "token"` في `frpc.toml` و `frps.toml` - سيتم استخدام المصادقة القائمة على الرمز المميز.
تأكد من تحديد نفس `auth.token` في `frps.toml` و `frpc.toml` حتى يتمكن frpc من اجتياز التحقق من frps
##### مصدر الرمز المميز
يدعم frp قراءة رموز المصادقة من مصادر خارجية باستخدام إعداد `tokenSource`. حاليًا، يتم دعم مصدر الرمز المميز القائم على الملفات.
**مصدر الرمز المميز القائم على الملفات:**```toml
# frpc.toml
auth.method = "token"
auth.tokenSource.type = "file"
auth.tokenSource.file.path = "/path/to/token/file"
سيتم قراءة الرمز المميز من الملف المحدد عند بدء التشغيل. هذا مفيد في السيناريوهات التي تتم فيها إدارة الرموز المميزة بواسطة أنظمة خارجية أو التي تحتاج إلى إبقائها منفصلة عن ملفات التكوين لأسباب أمنية.
مصادقة OIDC
عند تحديد auth.method = "oidc" في frpc.toml و frps.toml - سيتم استخدام المصادقة المستندة إلى OIDC.
OIDC تعني OpenID Connect، والتدفق المستخدم يسمى Client Credentials Grant.
لاستخدام هذا النوع من المصادقة - قم بتكوين frpc.toml و frps.toml كما يلي:```toml
frps.toml
auth.method = "oidc" auth.oidc.issuer = "https://example-oidc-issuer.com/" auth.oidc.audience = "https://oidc-audience.com/.default"
```markdown
- **التحقق من صحة الإدخال**: التحقق من صحة جميع مدخلات المستخدم لمنع هجمات حقن SQL والبرمجة النصية عبر المواقع (XSS) وأنواع أخرى من هجمات الحقن.
- **المصادقة والتفويض**: تنفيذ آليات مصادقة وتفويض قوية لضمان أن المستخدمين المصرح لهم فقط يمكنهم الوصول إلى الموارد الحساسة.
- **التشفير**: تشفير البيانات الحساسة أثناء النقل وفي حالة السكون لحمايتها من الوصول غير المصرح به.
- **التحديثات والتصحيحات المنتظمة**: الحفاظ على تحديث جميع البرامج والأنظمة بأحدث تصحيحات الأمان لمعالجة الثغرات المعروفة.
- **النسخ الاحتياطي والاسترداد**: تنفيذ حلول نسخ احتياطي واسترداد منتظمة لضمان إمكانية استعادة البيانات في حالة حدوث خرق أو فقدان.
- **المراقبة والتدقيق**: مراقبة الأنظمة والشبكات بانتظام بحثًا عن الأنشطة غير المعتادة وإجراء عمليات تدقيق أمنية منتظمة لتحديد ومعالجة الثغرات المحتملة.
- **التدريب والتوعية**: تثقيف الموظفين والمستخدمين حول أفضل ممارسات الأمان وكيفية التعرف على التهديدات المحتملة والاستجابة لها.
- **الحد الأدنى من الامتيازات**: منح المستخدمين والأنظمة فقط الحد الأدنى من الأذونات اللازمة لأداء وظائفهم، مما يقلل من تأثير الخرق المحتمل.
- **التخطيط للاستجابة للحوادث**: تطوير وصيانة خطة للاستجابة للحوادث لمعالجة الحوادث الأمنية والتخفيف من حدتها بسرعة وفعالية.
- **الامتثال**: ضمان الامتثال للوائح والمعايير ذات الصلة، مثل GDPR وHIPAA وPCI-DSS، لتجنب العقوبات القانونية والمالية.
``````toml
# frpc.toml
auth.method = "oidc"
auth.oidc.clientID = "98692467-37de-409a-9fac-bb2585826f18" # Replace with OIDC client ID
auth.oidc.clientSecret = "oidc_secret"
auth.oidc.audience = "https://oidc-audience.com/.default"
auth.oidc.tokenEndpointURL = "https://example-oidc-endpoint.com/oauth2/v2.0/token"
التشفير والضغط
هذه الميزات معطلة افتراضيًا. يمكنك تفعيل التشفير و/أو الضغط:```toml
frpc.toml
[[proxies]] name = "ssh" type = "tcp" localPort = 22 remotePort = 6000 transport.useEncryption = true transport.useCompression = true
#### TLS
منذ الإصدار v0.50.0، تم تغيير القيمة الافتراضية لكل من `transport.tls.enable` و `transport.tls.disableCustomTLSFirstByte` إلى true، ويتم تمكين TLS افتراضيًا.
بالنسبة لتعدد المنافذ (port multiplexing)، يرسل frp بايتًا أولًا `0x17` لإنشاء اتصال TLS. لا يسري هذا إلا عند ضبط `transport.tls.disableCustomTLSFirstByte` على false.
لفرض أن يقبل `frps` اتصالات TLS فقط - قم بتكوين `transport.tls.force = true` في `frps.toml`. **هذا اختياري.**
**إعدادات `frpc` الخاصة بـ TLS:**```toml
transport.tls.enable = true
transport.tls.certFile = "certificate.crt"
transport.tls.keyFile = "certificate.key"
transport.tls.trustedCaFile = "ca.crt"
frps إعدادات TLS:```toml
transport.tls.force = true
transport.tls.certFile = "certificate.crt"
transport.tls.keyFile = "certificate.key"
transport.tls.trustedCaFile = "ca.crt"
ستحتاج إلى **شهادة CA جذرية** و**شهادة SSL/TLS واحدة على الأقل**. يمكن أن تكون **موقّعة ذاتيًا** أو عادية (مثل Let's Encrypt أو أي مزود شهادات SSL/TLS آخر).
إذا كنت تستخدم `frp` عبر عنوان IP وليس اسم المضيف، فتأكد من تعيين عنوان IP المناسب في منطقة Subject Alternative Name (SAN) عند إنشاء شهادات SSL/TLS.
على سبيل المثال:
* قم بإعداد ملف إعداد openssl. يوجد في `/etc/pki/tls/openssl.cnf` على أنظمة Linux و`/System/Library/OpenSSL/openssl.cnf` على MacOS، ويمكنك نسخه إلى المسار الحالي، مثل `cp /etc/pki/tls/openssl.cnf ./my-openssl.cnf`. إذا لم يكن موجودًا، يمكنك إنشاؤه بنفسك، مثل:```
cat > my-openssl.cnf << EOF
[ ca ]
default_ca = CA_default
[ CA_default ]
x509_extensions = usr_cert
[ req ]
default_bits = 2048
default_md = sha256
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
attributes = req_attributes
x509_extensions = v3_ca
string_mask = utf8only
[ req_distinguished_name ]
[ req_attributes ]
[ usr_cert ]
basicConstraints = CA:FALSE
nsComment = "OpenSSL Generated Certificate"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = CA:true
EOF
- بناء شهادات CA:``` openssl genrsa -out ca.key 2048 openssl req -x509 -new -nodes -key ca.key -subj "/CN=example.ca.com" -days 5000 -out ca.crt
* بناء شهادات frps:```
openssl genrsa -out server.key 2048
openssl req -new -sha256 -key server.key \
-subj "/C=XX/ST=DEFAULT/L=DEFAULT/O=DEFAULT/CN=server.com" \
-reqexts SAN \
-config <(cat my-openssl.cnf <(printf "\n[SAN]\nsubjectAltName=DNS:localhost,IP:127.0.0.1,DNS:example.server.com")) \
-out server.csr
openssl x509 -req -days 365 -sha256 \
-in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
-extfile <(printf "subjectAltName=DNS:localhost,IP:127.0.0.1,DNS:example.server.com") \
-out server.crt
- بناء شهادات frpc:```
openssl genrsa -out client.key 2048
openssl req -new -sha256 -key client.key
-subj "/C=XX/ST=DEFAULT/L=DEFAULT/O=DEFAULT/CN=client.com"
-reqexts SAN
-config <(cat my-openssl.cnf <(printf "\n[SAN]\nsubjectAltName=DNS:client.com,DNS:example.client.com"))
-out client.csr
openssl x509 -req -days 365 -sha256
-in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial
-extfile <(printf "subjectAltName=DNS:client.com,DNS:example.client.com")
-out client.crt
### إعادة التحميل السريع لإعدادات frpc
حقول `webServer` مطلوبة لتفعيل واجهة برمجة تطبيقات HTTP:```toml
# frpc.toml
webServer.addr = "127.0.0.1"
webServer.port = 7400
ثم قم بتشغيل الأمر frpc reload -c ./frpc.toml وانتظر حوالي 10 ثوانٍ للسماح لـ frpc بإنشاء أو تحديث أو إزالة الوكلاء.
لاحظ أن معلمات العميل العامة لن يتم تعديلها باستثناء 'start'.
start هي قائمة سماح عامة يتم تقييمها بعد دمج جميع المصادر (ملف التكوين/الملفات المضمّنة/المخزن).
إذا كانت start غير فارغة، فلن يتم تشغيل أي وكيل أو زائر غير مدرج فيها، بما في ذلك
الإدخالات التي تم إنشاؤها عبر Store API.
يتم الاحتفاظ بـ start بشكل أساسي لأغراض التوافق ولا يُنصح به عمومًا للتكوينات الجديدة.
فضل استخدام enabled لكل وكيل/زائر، وأبقِ start فارغة إلا إذا كنت تريد صراحةً هذا
سلوك قائمة السماح العام.
يمكنك تشغيل الأمر frpc verify -c ./frpc.toml قبل إعادة التحميل للتحقق من وجود أخطاء في التكوين.
الحصول على حالة الوكلاء من العميل
استخدم frpc status -c ./frpc.toml للحصول على حالة جميع الوكلاء. حقول webServer مطلوبة لتمكين HTTP API.
السماح بمنافذ معينة فقط على الخادم
يُستخدم allowPorts في frps.toml لتجنب إساءة استخدام المنافذ:```toml
frps.toml
allowPorts = [ { start = 2000, end = 3000 }, { single = 3001 }, { single = 3003 }, { start = 4000, end = 50000 } ]
### إعادة استخدام المنفذ
يمكن لـ `vhostHTTPPort` و `vhostHTTPSPort` في frps استخدام نفس المنفذ مع `bindPort`. سيقوم frps باكتشاف بروتوكول الاتصال والتعامل معه وفقًا لذلك.
ما يجب الانتباه إليه هو أنه إذا كنت تريد تكوين `vhostHTTPSPort` و `bindPort` على نفس المنفذ، فستحتاج أولاً إلى تعيين `transport.tls.disableCustomTLSFirstByte` إلى false.
نود أن نحاول في المستقبل السماح لعدة بروكسيات بربط نفس المنفذ البعيد ببروتوكولات مختلفة.
### حد النطاق الترددي
#### لكل بروكسي```toml
# frpc.toml
[[proxies]]
name = "ssh"
type = "tcp"
localPort = 22
remotePort = 6000
transport.bandwidthLimit = "1MB"
اضبط transport.bandwidthLimit في إعدادات كل وكيل لتفعيل هذه الميزة. الوحدات المدعومة هي MB و KB.
اضبط transport.bandwidthLimitMode إلى client أو server لتحديد النطاق الترددي على جانب العميل أو الخادم. القيمة الافتراضية هي client.
تعدد إرسال تدفق TCP
يدعم frp تعدد إرسال تدفق TCP منذ الإصدار v0.10.0 مثل تعدد إرسال HTTP2، وفي هذه الحالة يتم تعدد إرسال جميع الاتصالات المنطقية إلى نفس frpc في نفس اتصال TCP.
يمكنك تعطيل هذه الميزة عن طريق تعديل frps.toml و frpc.toml:```toml
frps.toml and frpc.toml, must be same
transport.tcpMux = false
### دعم بروتوكول KCP
KCP هو بروتوكول سريع وموثوق يمكنه تحقيق تأثير نقل يتمثل في تقليل متوسط زمن الاستجابة بنسبة 30% إلى 40% وتقليل أقصى تأخير بمقدار ثلاثة أضعاف، على حساب إهدار نطاق ترددي أكبر بنسبة 10% إلى 20% مقارنة بـ TCP.
يستخدم وضع KCP بروتوكول UDP كطبقة نقل أساسية. لاستخدام KCP في frp:
1. قم بتمكين KCP في frps: ```toml
# frps.toml
bindPort = 7000
# Specify a UDP port for KCP.
kcpBindPort = 7000
يمكن أن يكون رقم kcpBindPort هو نفس رقم bindPort، لأن حقل bindPort يحدد منفذ TCP.
- قم بتكوين
frpc.tomlلاستخدام KCP للاتصال بـ frps: ```toml
frpc.toml
serverAddr = "x.x.x.x"
Same as the 'kcpBindPort' in frps.toml
serverPort = 7000 transport.protocol = "kcp"
### دعم بروتوكول QUIC
QUIC هو بروتوكول نقل جديد متعدد الإرسال مبني فوق UDP.
استخدام QUIC في frp:
1. تفعيل QUIC في frps: ```toml
# frps.toml
bindPort = 7000
# Specify a UDP port for QUIC.
quicBindPort = 7000
يمكن أن يكون رقم quicBindPort هو نفس رقم bindPort، لأن حقل bindPort يحدد منفذ TCP.
- قم بتكوين
frpc.tomlلاستخدام QUIC للاتصال بـ frps: ```toml
frpc.toml
serverAddr = "x.x.x.x"
Same as the 'quicBindPort' in frps.toml
serverPort = 7000 transport.protocol = "quic"
### تجميع الاتصالات
بشكل افتراضي، يقوم frps بإنشاء اتصال frpc جديد بخدمة الواجهة الخلفية عند كل طلب من المستخدم. مع تجميع الاتصالات، يحتفظ frps بعدد معين من الاتصالات المُنشأة مسبقًا، مما يقلل الوقت اللازم لإنشاء اتصال.
هذه الميزة مناسبة لعدد كبير من الاتصالات القصيرة.
1. قم بتكوين حد عدد الاتصالات المجمعة الذي يمكن لكل وكيل استخدامه في `frps.toml`: ```toml
# frps.toml
transport.maxPoolCount = 5
- قم بتمكين وتحديد عدد تجمع الاتصالات: ```toml
frpc.toml
transport.poolCount = 1
### موازنة التحميل
يتم دعم موازنة التحميل عبر `group`.
هذه الميزة متاحة حاليًا فقط للأنواع `tcp` و`http` و`tcpmux`.```toml
# frpc.toml
[[proxies]]
name = "test1"
type = "tcp"
localPort = 8080
remotePort = 80
loadBalancer.group = "web"
loadBalancer.groupKey = "123"
[[proxies]]
name = "test2"
type = "tcp"
localPort = 8081
remotePort = 80
loadBalancer.group = "web"
loadBalancer.groupKey = "123"
loadBalancer.groupKey يُستخدم للمصادقة.
سيتم توجيه الاتصالات إلى المنفذ 80 إلى الوكلاء في نفس المجموعة بشكل عشوائي.
بالنسبة للنوع tcp، يجب أن يكون remotePort في نفس المجموعة متطابقًا.
بالنسبة للنوع http، يجب أن تكون customDomains وsubdomain وlocations متطابقة.
فحص صحة الخدمة
يمكن أن تساعدك ميزة فحص الصحة في تحقيق توفر عالٍ مع موازنة التحميل.
أضف healthCheck.type = "tcp" أو healthCheck.type = "http" لتفعيل فحص الصحة.
مع نوع فحص الصحة tcp، سيتم اختبار منفذ الخدمة (TCPing):```toml
frpc.toml
[[proxies]] name = "test1" type = "tcp" localPort = 22 remotePort = 6000
Enable TCP health check
healthCheck.type = "tcp"
TCPing timeout seconds
healthCheck.timeoutSeconds = 3
If health check failed 3 times in a row, the proxy will be removed from frps
healthCheck.maxFailed = 3
A health check every 10 seconds
healthCheck.intervalSeconds = 10
مع نوع فحص الصحة **http**، سيتم إرسال طلب HTTP إلى الخدمة ومن المتوقع استجابة HTTP 2xx OK:```toml
# frpc.toml
[[proxies]]
name = "web"
type = "http"
localIP = "127.0.0.1"
localPort = 80
customDomains = ["test.example.com"]
# Enable HTTP health check
healthCheck.type = "http"
# frpc will send a GET request to '/status'
# and expect an HTTP 2xx OK response
healthCheck.path = "/status"
healthCheck.timeoutSeconds = 3
healthCheck.maxFailed = 3
healthCheck.intervalSeconds = 10
إعادة كتابة ترويسة HTTP Host
بشكل افتراضي، لا يقوم frp بتعديل طلبات HTTP المُمرَّرة على الإطلاق، حيث أنها نسخة حرفية بايتًا ببايت.
ومع ذلك، وبالحديث عن خوادم الويب وطلبات HTTP، قد يعتمد خادم الويب الخاص بك على ترويسة HTTP Host لتحديد الموقع الذي يتم الوصول إليه. يمكن لـ frp إعادة كتابة ترويسة Host عند إعادة توجيه طلبات HTTP، وذلك عبر حقل hostHeaderRewrite:```toml
frpc.toml
[[proxies]] name = "web" type = "http" localPort = 80 customDomains = ["test.example.com"] hostHeaderRewrite = "dev.example.com"
طلب HTTP سيكون له ترويسة `Host` مُعاد كتابتها إلى `Host: dev.example.com` عند وصوله إلى خادم الويب الفعلي، على الرغم من أن الطلب من المتصفح ربما يحمل `Host: test.example.com`.
### تعيين ترويسات HTTP أخرى
على غرار `Host`، يمكنك تجاوز ترويسات طلب واستجابة HTTP الأخرى باستخدام نوع الوكيل `http`.```toml
# frpc.toml
[[proxies]]
name = "web"
type = "http"
localPort = 80
customDomains = ["test.example.com"]
hostHeaderRewrite = "dev.example.com"
requestHeaders.set.x-from-where = "frp"
responseHeaders.set.foo = "bar"
في هذا المثال، سيتم تعيين الترويسة x-from-where: frp في طلب HTTP و foo: bar في استجابة HTTP.
الحصول على عنوان IP الحقيقي
HTTP X-Forwarded-For
هذه الميزة مخصصة لبروكسيات http أو البروكسيات التي تم تفعيل الإضافات https2http و https2https فيها.
يمكنك الحصول على عنوان IP الحقيقي للمستخدم من ترويسات طلب HTTP X-Forwarded-For.
بروتوكول البروكسي
يدعم frp بروتوكول البروكسي لإرسال عنوان IP الحقيقي للمستخدم إلى الخدمات المحلية.
فيما يلي مثال لخدمة https:```toml
frpc.toml
[[proxies]] name = "web" type = "https" localPort = 443 customDomains = ["test.example.com"]
now v1 and v2 are supported
transport.proxyProtocolVersion = "v2"
يمكنك تفعيل دعم بروتوكول الوكيل (Proxy Protocol) في nginx لكشف عنوان IP الحقيقي للمستخدم في ترويسة HTTP `X-Real-IP`، ثم قراءة ترويسة `X-Real-IP` في خدمة الويب الخاصة بك للحصول على عنوان IP الحقيقي.
### طلب مصادقة HTTP الأساسية (كلمة مرور) لخدمات الويب
أي شخص يمكنه تخمين عنوان النفق الخاص بك يمكنه الوصول إلى خادم الويب المحلي لديك ما لم تحميه بكلمة مرور.
يفرض هذا مصادقة HTTP الأساسية على جميع الطلبات باستخدام اسم المستخدم وكلمة المرور المحددين في ملف إعدادات frpc.
لا يمكن تفعيل هذا إلا عندما يكون نوع الوكيل هو http.```toml
# frpc.toml
[[proxies]]
name = "web"
type = "http"
localPort = 80
customDomains = ["test.example.com"]
httpUser = "abc"
httpPassword = "abc"
قم بزيارة http://test.example.com في المتصفح وستتم مطالبتك الآن بإدخال اسم المستخدم وكلمة المرور.
أسماء النطاقات الفرعية المخصصة
من الملائم استخدام إعداد subdomain لأنواع http و https عندما يشارك العديد من الأشخاص خادم frps واحدًا.```toml
frps.toml
subDomainHost = "frps.com"
حلّ `*.frps.com` إلى عنوان IP الخاص بخادم frps. يُطلق على هذا عادةً سجل DNS بدل (Wildcard DNS record).```toml
# frpc.toml
[[proxies]]
name = "web"
type = "http"
localPort = 80
subdomain = "test"
الآن يمكنك زيارة خدمة الويب الخاصة بك على test.frps.com.
لاحظ أنه إذا لم يكن subdomainHost فارغًا، فلا ينبغي أن يكون customDomains نطاقًا فرعيًا من subdomainHost.
توجيه URL
يدعم frp إعادة توجيه طلبات HTTP إلى خدمات ويب خلفية مختلفة عبر توجيه URL.
يحدد locations بادئة URL المستخدمة للتوجيه. يبحث frps أولاً عن موقع البادئة الأكثر تحديدًا المعطى بواسطة السلاسل الحرفية بغض النظر عن الترتيب المدرج.```toml
frpc.toml
[[proxies]] name = "web01" type = "http" localPort = 80 customDomains = ["web.example.com"] locations = ["/"]
[[proxies]] name = "web02" type = "http" localPort = 81 customDomains = ["web.example.com"] locations = ["/news", "/about"]
طلبات HTTP التي تحمل بادئة المسار `/news` أو `/about` سيتم توجيهها إلى **web02** بينما سيتم توجيه الطلبات الأخرى إلى **web01**.
### تعدد الإرسال على منفذ TCP
يدعم frp استقبال مقابس TCP الموجهة إلى بروكسيات مختلفة على منفذ واحد في frps، على غرار `vhostHTTPPort` و `vhostHTTPSPort`.
الطريقة الوحيدة المدعومة حاليًا لتعدد الإرسال على منفذ TCP هي `httpconnect` - نفق HTTP CONNECT.
عند ضبط `tcpmuxHTTPConnectPort` على قيمة غير 0 في frps، سيستمع frps على هذا المنفذ لطلبات HTTP CONNECT.
سيتم استخدام مضيف طلب HTTP CONNECT لمطابقة البروكسي في frps. يمكن تكوين مضيفات البروكسي في frpc عن طريق ضبط `customDomains` و/أو `subdomain` ضمن بروكسيات `tcpmux`، عندما يكون `multiplexer = "httpconnect"`.
على سبيل المثال:```toml
# frps.toml
bindPort = 7000
tcpmuxHTTPConnectPort = 1337
I need the input content to translate. Please provide the chunk of Markdown content you'd like me to translate from English to Arabic.```toml
frpc.toml
serverAddr = "x.x.x.x" serverPort = 7000
[[proxies]] name = "proxy1" type = "tcpmux" multiplexer = "httpconnect" customDomains = ["test1"] localPort = 80
[[proxies]] name = "proxy2" type = "tcpmux" multiplexer = "httpconnect" customDomains = ["test2"] localPort = 8080
في التكوين أعلاه - يمكن الاتصال بـ frps على المنفذ 1337 مع ترويسة HTTP CONNECT مثل:```
CONNECT test1 HTTP/1.1\r\n\r\n
وسيتم توجيه الاتصال إلى proxy1.
الاتصال بـ frps عبر PROXY
يمكن لـ frpc الاتصال بـ frps من خلال وكيل إذا قمت بتعيين متغير بيئة نظام التشغيل HTTP_PROXY، أو إذا تم تعيين transport.proxyURL في ملف frpc.toml.
يعمل هذا فقط عندما يكون البروتوكول هو tcp.```toml
frpc.toml
serverAddr = "x.x.x.x" serverPort = 7000 transport.proxyURL = "http://user:[email protected]:8080"
### تعيين نطاق المنافذ
*أُضيف في الإصدار v0.56.0*
يمكننا استخدام صيغة النطاق في قوالب Go مع الدالة المدمجة `parseNumberRangePair` لتحقيق تعيين نطاق المنافذ.
المثال التالي، عند تشغيله، سينشئ 8 وكلاء بأسماء `test-6000, test-6001 ... test-6007`، حيث يقوم كل واحد بتعيين المنفذ البعيد إلى المنفذ المحلي.```
{{- range $_, $v := parseNumberRangePair "6000-6006,6007" "6000-6006,6007" }}
[[proxies]]
name = "tcp-{{ $v.First }}"
type = "tcp"
localPort = {{ $v.First }}
remotePort = {{ $v.Second }}
{{- end }}
المكونات الإضافية للعميل
يقوم frpc افتراضيًا فقط بإعادة توجيه الطلبات إلى منافذ TCP أو UDP المحلية.
تُستخدم المكونات الإضافية لتوفير ميزات غنية. توجد مكونات إضافية مدمجة مثل unix_domain_socket وhttp_proxy وsocks5 وstatic_file وhttp2https وhttps2http وhttps2https ويمكنك الاطلاع على مثال الاستخدام.
استخدام المكوّن الإضافي http_proxy:```toml
frpc.toml
[[proxies]] name = "http_proxy" type = "tcp" remotePort = 6000 [proxies.plugin] type = "http_proxy" httpUser = "abc" httpPassword = "abc"
`httpUser` و `httpPassword` هما معلمتا إعداد تُستخدمان في إضافة `http_proxy`.
### إضافات إدارة الخادم
اقرأ [المستند](https://github.com/fatedier/frp/blob/HEAD/doc/server_plugin.md).
اعثر على المزيد من الإضافات في [gofrp/plugin](https://github.com/gofrp/plugin).
### بوابة نفق SSH
*أُضيفت في الإصدار v0.53.0*
يدعم frp الاستماع إلى منفذ SSH على جانب frps ويحقق وكالة بروتوكول TCP عبر بروتوكول SSH -R، دون الاعتماد على frpc.```toml
# frps.toml
sshTunnelGateway.bindPort = 2200
عند تشغيل ./frps -c frps.toml، سيتم إنشاء ملف مفتاح خاص باسم .autogen_ssh_key تلقائيًا في دليل العمل الحالي. سيتم استخدام ملف المفتاح الخاص المُنشأ هذا بواسطة خادم SSH في frps.
تنفيذ الأمر```bash ssh -R :80:127.0.0.1:8080 v0@{frp address} -p 2200 tcp --proxy_name "test-tcp" --remote_port 9090
يُعدّ وكيلاً على frps يعيد توجيه الخدمة المحلية على المنفذ 8080 إلى المنفذ 9090.```bash
frp (via SSH) (Ctrl+C to quit)
User:
ProxyName: test-tcp
Type: tcp
RemoteAddress: :9090
هذا يعادل:```bash frpc tcp --proxy_name "test-tcp" --local_ip 127.0.0.1 --local_port 8080 --remote_port 9090
يرجى الرجوع إلى هذا [المستند](https://github.com/fatedier/frp/blob/HEAD/doc/ssh_tunnel_gateway.md) لمزيد من المعلومات.
### الشبكة الافتراضية (VirtualNet)
*ميزة تجريبية أُضيفت في الإصدار v0.62.0*
تتيح ميزة VirtualNet لـ frp إنشاء وإدارة اتصالات الشبكة الافتراضية بين العملاء والزوار من خلال واجهة TUN. وهذا يسمح بالتوجيه على مستوى عناوين IP بين الأجهزة، مما يوسّع نطاق frp إلى ما هو أبعد من مجرد إعادة توجيه المنافذ لدعم الاتصال الشبكي الكامل.
للحصول على معلومات تفصيلية حول التكوين والاستخدام، يرجى الرجوع إلى [وثائق VirtualNet](https://github.com/fatedier/frp/blob/HEAD/doc/virtual_net.md).
## بوابات الميزات (Feature Gates)
يدعم frp بوابات الميزات لتمكين أو تعطيل الميزات التجريبية. وهذا يسمح للمستخدمين بتجربة الميزات الجديدة قبل اعتبارها مستقرة.
### بوابات الميزات المتاحة
| الاسم | المرحلة | الافتراضي | الوصف |
|------|-------|---------|-------------|
| VirtualNet | ALPHA | false | إمكانيات الشبكة الافتراضية لـ frp |
### تمكين بوابات الميزات
لتمكين ميزة تجريبية، أضف بوابة الميزة إلى التكوين الخاص بك:```toml
featureGates = { VirtualNet = true }
دورة حياة الميزات
تمر الميزات عادةً بثلاث مراحل:
- ALPHA: معطلة افتراضيًا، وقد تكون غير مستقرة
- BETA: قد تكون مفعلة افتراضيًا، أكثر استقرارًا ولكنها لا تزال قيد التطوير
- GA (متاحة بشكل عام): مفعلة افتراضيًا، وجاهزة للاستخدام في الإنتاج
مشاريع ذات صلة
- gofrp/plugin - مستودع لإضافات frp يحتوي على مجموعة متنوعة من الإضافات المبنية على آلية تمديد frp، لتلبية احتياجات التخصيص في سيناريوهات مختلفة.
- gofrp/tiny-frpc - نسخة خفيفة من عميل frp (حوالي 3.5MB كحد أدنى) مبنية باستخدام بروتوكول ssh، تدعم بعض الميزات الأكثر استخدامًا، ومناسبة للأجهزة ذات الموارد المحدودة.
المساهمة
مهتم بالمشاركة؟ يسعدنا مساعدتك!
- ألقِ نظرة على قائمة المشكلات الخاصة بنا وفكر في إرسال طلب سحب إلى فرع dev.
- إذا كنت تريد إضافة ميزة جديدة، فيرجى إنشاء مشكلة أولاً لوصف الميزة الجديدة، بالإضافة إلى نهج التنفيذ. بمجرد قبول الاقتراح، قم بإنشاء تنفيذ للميزات الجديدة وأرسله كطلب سحب.
- آسف على لغتي الإنجليزية الضعيفة. التحسينات على هذا المستند مرحب بها، حتى إصلاحات الأخطاء المطبعية.
- إذا كانت لديك أفكار رائعة، أرسل بريدًا إلكترونيًا إلى [email protected].
ملاحظة: نفضل أن تقدم نصيحتك في المشكلات، حتى يتمكن الآخرون الذين لديهم نفس السؤال من البحث عنها بسرعة ولا نحتاج إلى الإجابة عليها بشكل متكرر.
التبرع
إذا كان frp يساعدك كثيرًا، يمكنك دعمنا من خلال:
رعاة GitHub
ادعمنا عبر Github Sponsors.
يمكنك وضع شعار شركتك في ملف README الخاص بهذا المشروع.
PayPal
تبرع بالمال عبر PayPal إلى حسابي [email protected].