| English | Persian |
|---|---|
MHR-CFW یک پروکسی محلی است که ترافیک اینترنت شما را از طریق زیرساخت Google و Cloudflare عبور میدهد تا سیستمهای DPI (بازرسی عمیق بسته) نتوانند آن را شناسایی و فیلتر کنند.
از دید سیستم فیلترینگ، همه ترافیک شما شبیه ارتباط عادی با www.google.com به نظر میرسد، در حالی که درخواستهای واقعی شما به هر سایتی که بخواهید ارسال میشوند.
مرورگر شما
│
▼
پروکسی محلی (127.0.0.1:8085)
│ ← رمزگشایی TLS محلی (MITM)
▼
اتصال TLS به Google با SNI=www.google.com
│ ← از دید فیلترینگ: ترافیک عادی گوگل
▼
Google Apps Script (script.google.com)
│ ← رله JSON داخل زیرساخت گوگل
▼
Cloudflare Worker
│ ← خروج از طریق IP کلودفلر
▼
سایت مقصد
مزایای این معماری:
- سیستم DPI فقط SNI=www.google.com میبیند
- IP مقصد متعلق به گوگل است (مسدود نمیشود)
- محتوای واقعی درخواست داخل TLS رمزگذاری شده و پنهان است
- IP نهایی شما IP کلودفلر است، نه IP واقعیتان
قبل از شروع به موارد زیر نیاز دارید:
| مورد | توضیح |
|---|---|
| Python 3.10 یا بالاتر | روی سیستم نصب باشد |
| حساب Google | برای ساخت Apps Script |
| حساب Cloudflare | برای ساخت Worker (رایگان) |
| Git (اختیاری) | برای دریافت کد |
ویندوز — PowerShell یا CMD:
python --version
یا:
py --version
لینوکس / مک — ترمینال:
python3 --version
اگر خروجی Python 3.10.x یا بالاتر بود آمادهاید. در غیر این صورت از python.org نصب کنید.
ویندوز: هنگام نصب Python، تیک گزینه "Add Python to PATH" را حتماً بزنید.
git clone https://github.com/denuitt1/mhr-cfw.git
cd mhr-cfw
از GitHub روی Code → Download ZIP کلیک کنید، فایل را از حالت فشرده خارج کرده و وارد پوشه آن شوید.
محیط مجازی یا virtualenv باعث میشود کتابخانههای این پروژه با سایر پروژههای Python روی سیستم شما تداخل نداشته باشند.
ویندوز:
python -m venv .venv
.venv\Scripts\activate
پس از فعال شدن، ابتدای خط ترمینال به این شکل تغییر میکند:
(.venv) C:\Users\...>
لینوکس / مک:
python3 -m venv .venv
source .venv/bin/activate
پس از فعال شدن:
(.venv) user@host:~/mhr-cfw$
برای خروج از محیط مجازی در هر زمان، کافی است تایپ کنید:
deactivate
pip install -r requirements.txt
اگر دسترسی مستقیم به PyPI ندارید:
pip install -r requirements.txt -i https://mirror-pypi.runflare.com/simple/ --trusted-host mirror-pypi.runflare.com
Cloudflare Worker نقش «خروجی» ترافیک را دارد — درخواست را از Apps Script دریافت کرده و به سایت مقصد ارسال میکند. IP نهاییای که سایت میبیند، IP کلودفلر است.
۱. به dash.cloudflare.com بروید و وارد حساب کاربریتان شوید.
اگر حساب ندارید از همین لینک رایگان ثبتنام کنید.
۲. از منوی سمت چپ، روی Compute (Workers) کلیک کنید.
۳. روی Workers & Pages کلیک کنید.
۴. دکمه Create را بزنید.
۵. گزینه Start with Hello World را انتخاب کنید.
۶. یک نام دلخواه برای Worker خود بدهید (مثلاً my-relay) و دکمه Deploy را بزنید.
۷. پس از Deploy، روی Edit code کلیک کنید.
۸. تمام کد پیشفرض داخل ویرایشگر را انتخاب و حذف کنید.
در ویندوز:
Ctrl+AسپسDeleteدر مک:Cmd+AسپسDelete
۹. فایل deploy/cloudflare-worker/worker.js را از پوشه پروژه با یک ویرایشگر متن باز کنید (مثلاً Notepad، VS Code، یا Gedit).
۱۰. تمام محتوای آن را کپی (Ctrl+A سپس Ctrl+C) و داخل ویرایشگر Cloudflare Paste کنید (Ctrl+V).
۱۱. مهم: این خط را پیدا کنید:
const WORKER_URL = "myworker.workers.dev";
آدرس myworker.workers.dev را با آدرس Worker خودتان جایگزین کنید. آدرس Worker شما در بالای صفحه کلودفلر نمایش داده میشود (مثلاً my-relay.yourname.workers.dev).
۱۲. دکمه Deploy را بزنید.
۱۳. آدرس Worker خود را یادداشت کنید — در مرحله بعد به آن نیاز دارید.
آدرس معمولاً به شکل https://my-relay.yourname.workers.dev است.
Apps Script نقش «دروازه» را دارد — درخواستهای پروکسی محلی شما را دریافت کرده و از طریق زیرساخت گوگل به Worker کلودفلر ارسال میکند.
۱. به script.google.com بروید و با همان حساب Google وارد شوید.
۲. روی New project (پروژه جدید) کلیک کنید.
۳. در ویرایشگر بازشده، تمام کد پیشفرض (function myFunction() {}) را حذف کنید.
۴. فایل deploy/gas/Code.gs را از پوشه پروژه با یک ویرایشگر متن باز کرده، کل محتوا را کپی و داخل ویرایشگر Apps Script Paste کنید.
۵. مهم: این دو خط را پیدا کنید:
const AUTH_KEY = "STRONG_SECRET_KEY";
const WORKER_URL = "https://example.workers.dev";
AUTH_KEY را با یک رمز دلخواه قوی (حداقل ۲۰ کاراکتر، ترکیب حروف و اعداد) تغییر دهید.
مثال: const AUTH_KEY = "mYs3cr3tP@ss2024xZ9k";
این رمز را یادداشت کنید — در
config.jsonهم باید همین رمز را وارد کنید.
WORKER_URL را با آدرس Worker کلودفلر که در مرحله قبل ساختید تغییر دهید.
مثال: const WORKER_URL = "https://my-relay.yourname.workers.dev";
۶. کد را ذخیره کنید (Ctrl+S یا Cmd+S).
۷. از منوی بالا روی Deploy کلیک کنید، سپس New deployment را انتخاب کنید.
۸. در پنجره بازشده: - روی آیکون چرخدنده (⚙️) کنار «Select type» کلیک کنید - Web app را انتخاب کنید
۹. تنظیمات را به این شکل پر کنید:
Description : هر چیزی دلتان بخواهد (مثلاً "relay v1")
Execute as : Me
Who has access : Anyone
۱۰. روی Deploy کلیک کنید.
۱۱. اگر اولین بار است، Google از شما میخواهد دسترسیها را تأیید کنید: - روی Authorize access کلیک کنید - حساب Google خود را انتخاب کنید - اگر پیام «Google hasn't verified this app» نمایش داده شد: - روی Advanced کلیک کنید - روی Go to [نام پروژه] (unsafe) کلیک کنید - روی Allow کلیک کنید
۱۲. پس از Deploy موفق، یک Deployment ID به شما نمایش داده میشود که شکلی مانند این دارد:
AKfycbz...................................xYZ
این ID را کپی کرده و نگه دارید — در مرحله بعد نیاز است.
در پوشه پروژه، فایلی به نام config.example.json وجود دارد. باید از روی آن یک فایل config.json بسازید.
ویندوز:
copy config.example.json config.json
لینوکس / مک:
cp config.example.json config.json
حالا config.json را با یک ویرایشگر متن باز کنید و مقادیر لازم را تغییر دهید:
ویندوز (Notepad):
notepad config.json
لینوکس (nano):
nano config.json
برای ذخیره در nano:
Ctrl+OسپسEnterبرای خروج از nano:Ctrl+X
لینوکس (vim):
vim config.json
برای رفتن به حالت ویرایش در vim: کلید
iرا بزنید برای ذخیره و خروج از vim: کلیدEscسپس تایپ کنید:wqوEnter
{
"mode": "apps_script",
"google_ip": "216.239.38.120",
"front_domain": "www.google.com",
"script_id": "DEPLOYMENT_ID_را_اینجا_بگذارید",
"auth_key": "همان_رمزی_که_در_Code.gs_گذاشتید",
"listen_host": "127.0.0.1",
"listen_port": 8085,
"socks5_enabled": true,
"socks5_port": 1080,
"log_level": "INFO",
"verify_ssl": true
}
Code.gs برای AUTH_KEY گذاشتید (باید دقیقاً یکسان باشد)ویندوز:
فایل run.bat را دوبار کلیک کنید یا در CMD:
run.bat
لینوکس / مک:
chmod +x run.sh
./run.sh
این اسکریپتها به صورت خودکار:
- محیط مجازی Python میسازند
- وابستگیها را نصب میکنند
- اگر config.json نداشته باشید، wizard راهاندازی را اجرا میکنند
- پروکسی را روشن میکنند
اگر محیط مجازی را خودتان ساختهاید:
# ابتدا محیط مجازی را فعال کنید (اگر نکردهاید)
# ویندوز:
.venv\Scripts\activate
# لینوکس/مک:
source .venv/bin/activate
# سپس اجرا کنید:
python main.py
اگر همه چیز درست باشد، پیامهایی شبیه به این میبینید:
╭──────────────────────────────────────────────────────────────────────╮
│ mhr-cfw Domain-Fronted GAS-CFW Relay v1.1.0 │
╰──────────────────────────────────────────────────────────────────────╯
10:25:43 • INFO [Main ] DomainFront Tunnel starting (Apps Script relay)
10:25:43 • INFO [Main ] Apps Script relay : SNI=www.google.com → script.google.com
10:25:43 • INFO [Main ] Script ID : AKfycbz...
10:25:44 • INFO [Main ] MITM CA is already trusted.
10:25:44 • INFO [Proxy ] HTTP proxy listening on 127.0.0.1:8085
10:25:44 • INFO [Proxy ] SOCKS5 proxy listening on 127.0.0.1:1080
10:25:44 • INFO [Fronter ] Pre-warmed 28/30 TLS connections
10:25:44 • INFO [H2 ] H2 multiplexing active — one conn handles all requests
برای رمزگشایی ترافیک HTTPS، پروژه یک گواهی CA محلی میسازد که باید به مرورگر شما اضافه شود.
پروژه سعی میکند این کار را به صورت خودکار انجام دهد. اگر خودکار کار نکرد:
python main.py --install-cert
در ویندوز ممکن است پنجرهای برای تأیید باز شود — روی Yes کلیک کنید.
نکته: گواهی CA فقط برای اتصالات از طریق همین پروکسی استفاده میشود. هیچ ترافیک خارج از پروکسی تحت تأثیر نیست.
پروکسی روی پورت 8085 اجرا میشود. باید مرورگر خود را تنظیم کنید تا ترافیک را از طریق این پروکسی بفرستد.
۱. افزونه FoxyProxy را نصب کنید: - Chrome - Firefox
۲. روی آیکون FoxyProxy کلیک کنید → Options
۳. روی Add کلیک کنید و این اطلاعات را وارد کنید:
Proxy Type : HTTP
Proxy IP : 127.0.0.1
Port : 8085
۴. یک نام دلخواه بدهید (مثلاً «MHR-CFW») و ذخیره کنید.
۵. از آیکون FoxyProxy، پروکسی ساختهشده را فعال کنید.
اگر میخواهید همه برنامهها از پروکسی استفاده کنند:
127.0.0.1 و پورت 8085 را وارد کنیدپروجه همچنین یک پروکسی SOCKS5 روی پورت 1080 دارد:
Protocol : SOCKS5
Host : 127.0.0.1
Port : 1080
پس از اینکه پروکسی روشن و مرورگر تنظیم شد:
۱. مرورگر را باز کنید و به آدرس ipleak.net بروید.
۲. نتیجه موفق: - IP نمایشدادهشده باید از Cloudflare (AS13335) باشد - IP واقعی شما نباید نمایش داده شود
۳. تست دسترسی به سایت فیلترشده: هر سایتی که قبلاً در دسترس نبود را امتحان کنید.
وقتی یک ماشین مجازی (VM) اجرا میکنید، در یک محیط شبکهای ایزوله نسبت به سیستم هاست قرار میگیرد. به همین دلیل، VM به طور پیشفرض نمیتواند به سرویسهایی که روی localhost سیستم هاست اجرا میشوند دسترسی داشته باشد — از جمله این پروکسی.
برای حل این مشکل، باید IP گیتویای که هایپروایزر به هاست اختصاص میدهد را پیدا کنید و به جای localhost از آن استفاده کنید.
مثال: 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 Inspection انجام میدهد، ممکن است با خطای certificate مواجه شوید. برای رفع آن، فایل ca.crt موجود در پروژه را نصب کنید:
sudo cp ca.crt /usr/local/share/ca-certificates/ && sudo update-ca-certificates
میتوانید از این پروکسی روی گوشی یا هر دستگاه دیگری در همان شبکه استفاده کنید — بدون نیاز به نرمافزار اضافی.
۱. پیدا کردن IP سیستم هاست
```bash
ipc
$ claude mcp add mhr-cfw \
-- python -m otcore.mcp_server <graph>