
مرحل Domain-Fronting يقوم بتوجيه حركة المرور عبر GAS (Google Apps Script) ويُمررها إلى Cloudflare Workers. مصمم لتجاوز DPI.
Client -> Local Relay -> Google/CDN Front -> GAS (Google Apps Script) Relay -> Cloudflare Worker -> Exit
|
+-> Shows www.google.com to network DPI filter
Client -> Local Relay -> Google/CDN Front -> GAS (Google Apps Script) Relay -> Cloudflare Worker -> Self-Hosted Upstream Forwarder -> Exit
|
+-> Shows www.google.com to network DPI filter
في الاستخدام العادي، يرسل المتصفح حركة المرور إلى البروكسي الذي يعمل على جهاز الكمبيوتر الخاص بك.
يقوم البروكسي بإرسال تلك الحركة عبر البنية التحتية لـ Google بحيث لا ترى الشبكة سوى نطاق مسموح به مثل www.google.com.
ثم يقوم المرحّل المنشور لديك بجلب الموقع الحقيقي عبر cloudflare worker وإعادة الرد عبر نفس المسار.
هذا يعني أن الفلتر يرى حركة مرور تبدو عادية لـ Google، بينما يظل الوجهة الحقيقية مخفية داخل طلب المرحّل.
git clone https://github.com/denuitt1/mhr-cfw.git
cd mhr-cfw
pip install -r requirements.txt
لا يمكن الوصول إلى PyPI مباشرة؟ استخدم هذا المرآة بدلاً من ذلك:
pip install -r requirements.txt -i https://mirror-pypi.runflare.com/simple/ --trusted-host mirror-pypi.runflare.com
worker.js من هذا المشروع (داخل deploy/)، انسخ كل شيء، وألصقه في محرر Apps Script.const WORKER_URL = "myworker.workers.dev";
Code.gs من هذا المشروع (داخل deploy/)، انسخ كل شيء، وألصقه في محرر Apps Script.const AUTH_KEY = "your-secret-password-here";
const WORKER_URL = "https://myworker.workers.dev";
⚠️ تذكر كلمة المرور التي قمت بتعيينها في الخطوة 3. ستستخدم نفس كلمة المرور في ملف الإعدادات أدناه.
انقر على ملف run.bat (على ويندوز) أو ملف run.sh (على لينكس) لبدء المرحّل.
إذا كنت تشغّله لأول مرة، سيظهر لك معالج إعداد حيث يجب إدخال AUTH_KEY و Google Apps Script Deployment ID.
يجب أن ترى رسالة تفيد بأن الـ HTTP proxy يعمل على 127.0.0.1:8085.
نوصي باستخدام عميل v2rayN وتكوين بروكسي socks5.
يمكنك أيضاً استخدام إضافة FoxyProxy لـ Chrome أو لـ Firefox لاستخدام هذا البروكسي في متصفحك.
افتح ipleak.net في متصفحك، يجب أن ترى عنوان IP الخاص بك معروضاً كعنوان لـ Cloudflare.
عند تشغيل جهاز افتراضي (VM)، يعمل في بيئة شبكية معزولة منفصلة عن الجهاز المضيف. بشكل افتراضي، لا يستطيع VM الوصول مباشرة إلى الخدمات التي تعمل على localhost للمضيف — بما في ذلك هذا البروكسي.
لإصلاح ذلك، تحتاج إلى العثور على عنوان IP الخاص بالبوابة الذي يخصصه الـ hypervisor للمضيف، ثم استخدامه بدلاً من localhost عند تكوين البروكسي داخل VM.
مثال: VirtualBox (وضع NAT)
يمكن الوصول إلى المضيف من داخل VM دائماً عبر 10.0.2.2. قم بتعيين البروكسي:
export http_proxy="http://10.0.2.2:8085"
export https_proxy="http://10.0.2.2:8085"
export all_proxy="socks5://10.0.2.2:8085"
لجعل هذا دائماً، أضف الأسطر أعلاه إلى ~/.bashrc وشغّل source ~/.bashrc.
نظراً لأن هذا البروكسي يقوم بفحص SSL، قد ترى أخطاء في الشهادة. قم بتثبيت ca.crt المرفق لإصلاحها:
sudo cp ca.crt /usr/local/share/ca-certificates/ && sudo update-ca-certificates
يمكنك استخدام هذا البروكسي على هاتفك أو أي جهاز آخر على نفس الشبكة — بدون حاجة لبرامج إضافية.
1. ابحث عن عنوان IP لمضيفك
# ويندوز
ipconfig
# لينكس / macOS
ip addr
ابحث عن عنوان IP للمحول المتصل بجهاز التوجيه (مثل 192.168.1.8).
2. قم بتوجيه المنفذ (ويندوز فقط، إذا كانت الخدمة مرتبطة بـ localhost)
قم بتشغيل CMD كمسؤول:
netsh interface portproxy add v4tov4 listenaddress=192.168.1.8 listenport=8085 connectaddress=127.0.0.1 connectport=8085
netsh advfirewall firewall add rule name="Proxy 8085" dir=in action=allow protocol=TCP localport=8085
3. قم بتكوين البروكسي على هاتفك
قم بتوصيل هاتفك بنفس شبكة Wi-Fi، ثم قم بتعيين البروكسي يدوياً:
192.168.1.8)8085على Android: الإعدادات ← Wi-Fi ← تعديل ← بروكسي ← يدوي
على iPhone: الإعدادات ← Wi-Fi ← (الشبكة) ← HTTP Proxy ← يدوي
4. قم بتثبيت شهادة CA
انقل ca.crt إلى هاتفك، ثم:
ترتبط رموز CAPTCHA (Cloudflare Turnstile/تحدي البوت، reCAPTCHA، hCaptcha) بعنوان IP الذي قام بحل التحدي. يخرج Cloudflare Worker عبر عناوين IP مختلفة للحافة لكل طلب، لذلك يفشل التحقق في الموقع الهدف حتى عندما تقوم بحل التحدي. هذه الإضافة الاختيارية تسمح للـ Worker بتوجيه جميع استدعاءات fetch() عبر خادم Node صغير تشغله على VPS بعنوان IP ثابت — مما يعطي الموقع الهدف عنوان مخرج واحد ومتسق.
cf_clearance).إذا لم تواجه هذه المشاكل، اتركها بدون تكوين — سيعمل الـ Worker تماماً كما كان من قبل.
لا يوفر Cloudflare Worker عنوان IP صادر ثابت — يخرج fetch() عبر مجموعة متغيرة من عناوين IP لحافة Cloudflare، وهذا هو بالضبط ما يفسد رموز CAPTCHA المرتبطة بعنوان IP. خيارات الخروج الثابتة من Cloudflare (BYOIP, Egress Workers) مخصصة للشركات على مستوى Enterprise، لذا فإن VPS صغير بعنوان IP ثابت هو الحل العملي. المرحّل الأمامي هو مجرد بروكسي رقيق يعيد إصدار fetch() من عنوان ثابت.
التنفيذ المرجعي موجود في deploy/upstream-forwarder/upstream_forwarder.js.
يتطلب Node 18+ ولا يحتاج إلى تبعيات. قم بتشغيله خلف Caddy أو nginx مع TLS — الـ Worker يرفض عناوين URL للمرحّل الأمامي غير HTTPS.
# على VPS الخاص بك (مثال Ubuntu/Debian):
sudo apt install -y nodejs # يجب أن يكون 18+
export AUTH_KEY="some-long-random-string-at-least-32-chars"
export PORT=8787
node deploy/upstream-forwarder/upstream_forwarder.js
قم بتحميله مع Caddy لـ TLS تلقائي:
forwarder.example.com {
reverse_proxy 127.0.0.1:8787
}
اختبار سريع:
curl -X POST https://forwarder.example.com/fwd \
-H "x-upstream-auth: $AUTH_KEY" \
-H "content-type: application/json" \
-d '{"u":"https://httpbin.org/ip","m":"GET","h":{}}'
يجب أن يظهر نص الرد المفكوك عنوان IP الخاص بـ VPS.
في لوحة تحكم Cloudflare ← الـ Worker الخاص بك ← Settings ← Variables and Secrets:
احفظ وأعد نشر الـ Worker.
تصفح https://httpbin.org/ip عبر البروكسي — يجب أن ترى عنوان IP الخاص بـ VPS، وليس عنوان Cloudflare. ثم عد لموقع محمي بـ CAPTCHA كان لا يعمل — يجب أن يصبح التحدي صالحاً الآن.
يجب أن يتطلب المرحّل الأمامي المصادقة. بدون
AUTH_KEYيرفض البدء. أي شخص يملك الرابط والمفتاح يمكنه استخدامه كمرحّل، لذا احتفظ بها سرية.
بشكل افتراضي، يوجه الـ Worker كل طلب عبر المرحّل الأمامي، مما يستهلك نطاقاً ترددياً لـ VPS حتى لحركة المرور غير المرتبطة. لإرسال المواقع التي تحتاج فقط إلى عنوان IP مخرج ثابت عبر VPS، قم بإدراجها في forwarder_hosts داخل config.json — نفس بناء bypass_hosts (اسم مضيف دقيق أو .suffix). أي شيء غير متطابق يعود إلى fetch() المباشر على الـ Worker.
{
...
"forwarder_hosts": [
"example.com",
".cf-protected-suffix"
]
...
}
اترك القائمة فارغة (أو احذف المفتاح) للحفاظ على السلوك القديم "توجيه كل شيء".
MHR-CFW مُقدم لأغراض تعليمية واختبارية وبحثية فقط.
| الاسم | النوع | القيمة |
|---|
UPSTREAM_FORWARDER_URL | Secret | https://forwarder.example.com/fwd |
UPSTREAM_AUTH_KEY | Secret | نفس AUTH_KEY الذي قمت بتعيينه على VPS |
UPSTREAM_FAIL_MODE | Variable | closed (افتراضي) — إرجاع 502 عند فشل المرحّل الأمامي. استخدم open للرجوع إلى fetch المباشر. |
UPSTREAM_TIMEOUT_MS | Variable (اختياري) | الافتراضي 25000 |