MCPcopy Index your code
hub / github.com/denuitt1/mhr-cfw

github.com/denuitt1/mhr-cfw @v2.0.2

repository ↗ · DeepWiki ↗ · release v2.0.2 ↗ · Ask this repo → · + Follow
240 symbols 820 edges 14 files 117 documented · 49% updated 56d agov2.0.2 · 2026-05-10★ 4,380120 open issues
README

MHR-CFW — راهنمای کامل راه‌اندازی

GitHub

English Persian

آموزش ویدیویی

Watch the video

  • لینک یوتیوب: https://youtu.be/L3lJZrAqqUQ
  • لینک داخلی دانلود ویدیو: https://cdn.vayrex.ir/vasls/8440130/1777611424961-86c092e3-mhrv-cfw.mp4

فهرست مطالب


پروژه چیست؟

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 (اختیاری) برای دریافت کد

بررسی نسخه Python

ویندوز — PowerShell یا CMD:

python --version

یا:

py --version

لینوکس / مک — ترمینال:

python3 --version

اگر خروجی Python 3.10.x یا بالاتر بود آماده‌اید. در غیر این صورت از python.org نصب کنید.

ویندوز: هنگام نصب Python، تیک گزینه "Add Python to PATH" را حتماً بزنید.


مرحله ۱ — دریافت کد

روش اول: با Git

git clone https://github.com/denuitt1/mhr-cfw.git
cd mhr-cfw

روش دوم: دانلود مستقیم

از GitHub روی Code → Download ZIP کلیک کنید، فایل را از حالت فشرده خارج کرده و وارد پوشه آن شوید.

ساخت محیط مجازی Python (توصیه شده)

محیط مجازی یا 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

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 است.


مرحله ۳ — ساخت Google Apps Script

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.json

در پوشه پروژه، فایلی به نام 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
}
  • script_id: Deployment ID که در مرحله ۳ کپی کردید
  • auth_key: رمزی که در 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

نصب گواهی CA (اولین بار)

برای رمزگشایی ترافیک HTTPS، پروژه یک گواهی CA محلی می‌سازد که باید به مرورگر شما اضافه شود.

پروژه سعی می‌کند این کار را به صورت خودکار انجام دهد. اگر خودکار کار نکرد:

python main.py --install-cert

در ویندوز ممکن است پنجره‌ای برای تأیید باز شود — روی Yes کلیک کنید.

نکته: گواهی CA فقط برای اتصالات از طریق همین پروکسی استفاده می‌شود. هیچ ترافیک خارج از پروکسی تحت تأثیر نیست.


مرحله ۶ — تنظیم مرورگر

پروکسی روی پورت 8085 اجرا می‌شود. باید مرورگر خود را تنظیم کنید تا ترافیک را از طریق این پروکسی بفرستد.

روش ۱: FoxyProxy (توصیه شده برای Chrome/Firefox)

۱. افزونه FoxyProxy را نصب کنید: - Chrome - Firefox

۲. روی آیکون FoxyProxy کلیک کنید → Options

۳. روی Add کلیک کنید و این اطلاعات را وارد کنید:

Proxy Type  : HTTP
Proxy IP    : 127.0.0.1
Port        : 8085

۴. یک نام دلخواه بدهید (مثلاً «MHR-CFW») و ذخیره کنید.

۵. از آیکون FoxyProxy، پروکسی ساخته‌شده را فعال کنید.

روش ۲: تنظیمات سیستم ویندوز

اگر می‌خواهید همه برنامه‌ها از پروکسی استفاده کنند:

  1. SettingsNetwork & InternetProxy
  2. زیر Manual proxy setup گزینه Use a proxy server را روشن کنید
  3. آدرس 127.0.0.1 و پورت 8085 را وارد کنید
  4. Save

روش ۳: SOCKS5 (برای برنامه‌های سازگار)

پروجه همچنین یک پروکسی 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

Windows

ipc

Core symbols most depended-on inside this repo

get
called by 106
src/proxy_server.py
_run
called by 33
src/cert_installer.py
dim
called by 12
setup.py
_spawn
called by 12
src/domain_fronter.py
close
called by 12
src/h2_transport.py
close
called by 11
src/domain_fronter.py
_error_response
called by 9
src/domain_fronter.py
json
called by 8
deploy/cloudflare-worker/worker.js

Shape

Method 162
Function 67
Class 11

Languages

Python98%
TypeScript2%

Modules by API surface

src/domain_fronter.py92 symbols
src/proxy_server.py51 symbols
src/cert_installer.py18 symbols
src/h2_transport.py17 symbols
setup.py15 symbols
src/logging_utils.py14 symbols
src/mitm.py7 symbols
main.py6 symbols
src/lan_utils.py5 symbols
src/google_ip_scanner.py5 symbols
src/codec.py4 symbols
deploy/cloudflare-worker/worker.js4 symbols

Dependencies from manifests, versioned

brotli1.1.0 · 1×
certifi2024.1.0 · 1×
cryptography41.0.0 · 1×
h24.1.0 · 1×
zstandard0.22.0 · 1×

For agents

$ claude mcp add mhr-cfw \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact