mirror of
https://github.com/denuitt1/mhr-cfw.git
synced 2026-05-17 21:24:36 +03:00
Merge pull request #20 from 0xRadikal/docs/readme-update
Complate README_FA.md
This commit is contained in:
+801
-53
@@ -1,91 +1,308 @@
|
||||
# آموزش راهاندازی پروژه (Cloudflare Worker + Google Apps Script)
|
||||
# MHR-CFW — راهنمای کامل راهاندازی
|
||||
|
||||
<div dir="rtl">
|
||||
|
||||
[](https://github.com/denuitt1/mhr-cfw)
|
||||
|
||||
| [English](README.md) | [Persian](README_FA.md) |
|
||||
| :---: | :---: |
|
||||
|
||||
Persian translation was provided by [pingplas_channel](https://t.me/pingplas_channel)
|
||||
---
|
||||
|
||||
## فهرست مطالب
|
||||
|
||||
- [پروژه چیست؟](#پروژه-چیست)
|
||||
- [چطور کار میکند؟](#چطور-کار-میکند)
|
||||
- [پیشنیازها](#پیشنیازها)
|
||||
- [مرحله ۱ — دریافت کد](#مرحله-۱--دریافت-کد)
|
||||
- [مرحله ۲ — ساخت Cloudflare Worker](#مرحله-۲--ساخت-cloudflare-worker)
|
||||
- [مرحله ۳ — ساخت Google Apps Script](#مرحله-۳--ساخت-google-apps-script)
|
||||
- [مرحله ۴ — تنظیم فایل config.json](#مرحله-۴--تنظیم-فایل-configjson)
|
||||
- [مرحله ۵ — اجرا](#مرحله-۵--اجرا)
|
||||
- [مرحله ۶ — تنظیم مرورگر](#مرحله-۶--تنظیم-مرورگر)
|
||||
- [مرحله ۷ — تست اتصال](#مرحله-۷--تست-اتصال)
|
||||
- [تنظیمات پیشرفته config.json](#تنظیمات-پیشرفته-configjson)
|
||||
- [ابزار اسکن IP گوگل](#ابزار-اسکن-ip-گوگل)
|
||||
- [اشتراکگذاری در شبکه محلی (LAN)](#اشتراکگذاری-در-شبکه-محلی-lan)
|
||||
- [راهاندازی روی لینوکس و مک](#راهاندازی-روی-لینوکس-و-مک)
|
||||
- [عیبیابی](#عیبیابی)
|
||||
- [سؤالات متداول](#سؤالات-متداول)
|
||||
- [سلب مسئولیت](#سلب-مسئولیت)
|
||||
|
||||
---
|
||||
### - [تلگرام ما : @Raydikalx](https://t.me/Raydikalx)
|
||||
---
|
||||
## پروژه چیست؟
|
||||
|
||||
**MHR-CFW** یک پروکسی محلی است که ترافیک اینترنت شما را از طریق زیرساخت Google و Cloudflare عبور میدهد تا سیستمهای DPI (بازرسی عمیق بسته) نتوانند آن را شناسایی و فیلتر کنند.
|
||||
|
||||
از دید سیستم فیلترینگ، همه ترافیک شما شبیه ارتباط عادی با `www.google.com` به نظر میرسد، در حالی که درخواستهای واقعی شما به هر سایتی که بخواهید ارسال میشوند.
|
||||
|
||||
---
|
||||
|
||||
## 1) نصب پیشنیازها
|
||||
دستور زیر را اجرا کنید:
|
||||
## چطور کار میکند؟
|
||||
|
||||
```
|
||||
مرورگر شما
|
||||
│
|
||||
▼
|
||||
پروکسی محلی (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
|
||||
```
|
||||
|
||||
**لینوکس / مک — ترمینال:**
|
||||
```bash
|
||||
python3 --version
|
||||
```
|
||||
|
||||
اگر خروجی `Python 3.10.x` یا بالاتر بود آمادهاید. در غیر این صورت از [python.org](https://www.python.org/downloads/) نصب کنید.
|
||||
|
||||
> **ویندوز:** هنگام نصب Python، تیک گزینه **"Add Python to PATH"** را حتماً بزنید.
|
||||
|
||||
---
|
||||
|
||||
## مرحله ۱ — دریافت کد
|
||||
|
||||
### روش اول: با Git
|
||||
|
||||
```bash
|
||||
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\...>
|
||||
```
|
||||
|
||||
**لینوکس / مک:**
|
||||
```bash
|
||||
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
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2) راهاندازی Cloudflare Worker (worker.js)
|
||||
## مرحله ۲ — ساخت Cloudflare Worker
|
||||
|
||||
1. وارد داشبورد Cloudflare شوید و لاگین کنید.
|
||||
2. از منوی کناری بروید به:
|
||||
**Compute > Workers & Pages**
|
||||
3. روی **Create Application** کلیک کنید.
|
||||
4. گزینه **Start with Hello World** را انتخاب کرده و Deploy کنید.
|
||||
5. روی **Edit code** بزنید.
|
||||
6. تمام کدهای پیشفرض را حذف کنید.
|
||||
7. فایل `worker.js` پروژه (پوشه script) را باز کنید.
|
||||
8. کل کد را کپی کرده و در ادیتور Cloudflare پیست کنید.
|
||||
Cloudflare Worker نقش «خروجی» ترافیک را دارد — درخواست را از Apps Script دریافت کرده و به سایت مقصد ارسال میکند. IP نهاییای که سایت میبیند، IP کلودفلر است.
|
||||
|
||||
⚠️ مهم:
|
||||
این خط را با آدرس ورکر خودتان جایگزین کنید:
|
||||
```
|
||||
### گام به گام:
|
||||
|
||||
**۱.** به [dash.cloudflare.com](https://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`
|
||||
|
||||
**۹.** فایل `script/worker.js` را از پوشه پروژه با یک ویرایشگر متن باز کنید (مثلاً Notepad، VS Code، یا Gedit).
|
||||
|
||||
**۱۰.** تمام محتوای آن را کپی (`Ctrl+A` سپس `Ctrl+C`) و داخل ویرایشگر Cloudflare **Paste** کنید (`Ctrl+V`).
|
||||
|
||||
**۱۱. مهم:** این خط را پیدا کنید:
|
||||
```javascript
|
||||
const WORKER_URL = "myworker.workers.dev";
|
||||
```
|
||||
آدرس `myworker.workers.dev` را با **آدرس Worker خودتان** جایگزین کنید. آدرس Worker شما در بالای صفحه کلودفلر نمایش داده میشود (مثلاً `my-relay.yourname.workers.dev`).
|
||||
|
||||
9. روی **Deploy** کلیک کنید.
|
||||
**۱۲.** دکمه **Deploy** را بزنید.
|
||||
|
||||
**۱۳.** آدرس Worker خود را یادداشت کنید — در مرحله بعد به آن نیاز دارید.
|
||||
آدرس معمولاً به شکل `https://my-relay.yourname.workers.dev` است.
|
||||
|
||||
---
|
||||
|
||||
## 3) راهاندازی Google Relay (Code.gs)
|
||||
## مرحله ۳ — ساخت Google Apps Script
|
||||
|
||||
1. وارد Google Apps Script شوید.
|
||||
2. روی **New Project** کلیک کنید.
|
||||
3. تمام کدهای پیشفرض را حذف کنید.
|
||||
4. فایل `Code.gs` پروژه را باز کرده و کپی کنید.
|
||||
5. کد را داخل ادیتور پیست کنید.
|
||||
Apps Script نقش «دروازه» را دارد — درخواستهای پروکسی محلی شما را دریافت کرده و از طریق زیرساخت گوگل به Worker کلودفلر ارسال میکند.
|
||||
|
||||
⚠️ مهم:
|
||||
```
|
||||
const AUTH_KEY = "your-secret-password-here";
|
||||
const WORKER_URL = "https://myworker.workers.dev";
|
||||
### گام به گام:
|
||||
|
||||
**۱.** به [script.google.com](https://script.google.com/) بروید و با همان حساب Google وارد شوید.
|
||||
|
||||
**۲.** روی **New project** (پروژه جدید) کلیک کنید.
|
||||
|
||||
**۳.** در ویرایشگر بازشده، تمام کد پیشفرض (`function myFunction() {}`) را **حذف** کنید.
|
||||
|
||||
**۴.** فایل `script/Code.gs` را از پوشه پروژه با یک ویرایشگر متن باز کرده، کل محتوا را کپی و داخل ویرایشگر Apps Script **Paste** کنید.
|
||||
|
||||
**۵. مهم:** این دو خط را پیدا کنید:
|
||||
```javascript
|
||||
const AUTH_KEY = "STRONG_SECRET_KEY";
|
||||
const WORKER_URL = "https://example.workers.dev";
|
||||
```
|
||||
|
||||
- یک رمز دلخواه قوی انتخاب کنید.
|
||||
- آدرس Worker خودتان را جایگزین کنید.
|
||||
- **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 را کپی کرده و نگه دارید — در مرحله بعد نیاز است.
|
||||
|
||||
---
|
||||
|
||||
### Deploy کردن
|
||||
## مرحله ۴ — تنظیم فایل config.json
|
||||
|
||||
1. از بالا روی **Deploy → New deployment** کلیک کنید.
|
||||
2. نوع را روی **Web app** بگذارید.
|
||||
3. تنظیمات:
|
||||
- Execute as: **Me**
|
||||
- Who has access: **Anyone**
|
||||
4. روی **Deploy** بزنید.
|
||||
در پوشه پروژه، فایلی به نام `config.example.json` وجود دارد. باید از روی آن یک فایل `config.json` بسازید.
|
||||
|
||||
📌 بعد از Deploy:
|
||||
یک **Deployment ID** دریافت میکنید (رشته طولانی)
|
||||
→ این را ذخیره کنید.
|
||||
**ویندوز:**
|
||||
```
|
||||
copy config.example.json config.json
|
||||
```
|
||||
|
||||
⚠️ رمز عبوری که انتخاب کردید را حتما نگه دارید.
|
||||
**لینوکس / مک:**
|
||||
```bash
|
||||
cp config.example.json config.json
|
||||
```
|
||||
|
||||
---
|
||||
حالا `config.json` را با یک ویرایشگر متن باز کنید و مقادیر لازم را تغییر دهید:
|
||||
|
||||
## 4) تنظیم فایل config.json
|
||||
**ویندوز (Notepad):**
|
||||
```
|
||||
notepad config.json
|
||||
```
|
||||
|
||||
**لینوکس (nano):**
|
||||
```bash
|
||||
nano config.json
|
||||
```
|
||||
> برای **ذخیره** در nano: `Ctrl+O` سپس `Enter`
|
||||
> برای **خروج** از nano: `Ctrl+X`
|
||||
|
||||
سپس فایل `config.json` را باز کرده و مقادیر را وارد کنید:
|
||||
**لینوکس (vim):**
|
||||
```bash
|
||||
vim config.json
|
||||
```
|
||||
> برای **رفتن به حالت ویرایش** در vim: کلید `i` را بزنید
|
||||
> برای **ذخیره و خروج** از vim: کلید `Esc` سپس تایپ کنید `:wq` و `Enter`
|
||||
|
||||
### حداقل تنظیمات لازم:
|
||||
|
||||
```json
|
||||
{
|
||||
"mode": "apps_script",
|
||||
"google_ip": "216.239.38.120",
|
||||
"front_domain": "www.google.com",
|
||||
"script_id": "PASTE_YOUR_DEPLOYMENT_ID_HERE",
|
||||
"auth_key": "your-secret-password-here",
|
||||
"script_id": "DEPLOYMENT_ID_را_اینجا_بگذارید",
|
||||
"auth_key": "همان_رمزی_که_در_Code.gs_گذاشتید",
|
||||
"listen_host": "127.0.0.1",
|
||||
"listen_port": 8085,
|
||||
"socks5_enabled": true,
|
||||
@@ -95,28 +312,559 @@ const WORKER_URL = "https://myworker.workers.dev";
|
||||
}
|
||||
```
|
||||
|
||||
### توضیحات:
|
||||
- `script_id` → همان Deployment ID
|
||||
- `auth_key` → همان رمز مرحله قبل
|
||||
- **script_id**: Deployment ID که در مرحله ۳ کپی کردید
|
||||
- **auth_key**: رمزی که در `Code.gs` برای `AUTH_KEY` گذاشتید (باید دقیقاً یکسان باشد)
|
||||
|
||||
---
|
||||
|
||||
## 5) اجرا (Run)
|
||||
## مرحله ۵ — اجرا
|
||||
|
||||
### روش ساده (توصیه شده)
|
||||
|
||||
**ویندوز:**
|
||||
فایل `run.bat` را دوبار کلیک کنید یا در CMD:
|
||||
```
|
||||
run.bat
|
||||
```
|
||||
|
||||
**لینوکس / مک:**
|
||||
```bash
|
||||
chmod +x run.sh
|
||||
./run.sh
|
||||
```
|
||||
|
||||
این اسکریپتها به صورت خودکار:
|
||||
- محیط مجازی Python میسازند
|
||||
- وابستگیها را نصب میکنند
|
||||
- اگر `config.json` نداشته باشید، wizard راهاندازی را اجرا میکنند
|
||||
- پروکسی را روشن میکنند
|
||||
|
||||
### روش دستی
|
||||
|
||||
اگر محیط مجازی را خودتان ساختهاید:
|
||||
|
||||
```bash
|
||||
# ابتدا محیط مجازی را فعال کنید (اگر نکردهاید)
|
||||
# ویندوز:
|
||||
.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 محلی میسازد که باید به مرورگر شما اضافه شود.
|
||||
|
||||
پروژه سعی میکند این کار را **به صورت خودکار** انجام دهد. اگر خودکار کار نکرد:
|
||||
|
||||
```bash
|
||||
python main.py --install-cert
|
||||
```
|
||||
|
||||
در ویندوز ممکن است پنجرهای برای تأیید باز شود — روی **Yes** کلیک کنید.
|
||||
|
||||
> **نکته:** گواهی CA فقط برای اتصالات از طریق همین پروکسی استفاده میشود. هیچ ترافیک خارج از پروکسی تحت تأثیر نیست.
|
||||
|
||||
---
|
||||
|
||||
## مرحله ۶ — تنظیم مرورگر
|
||||
|
||||
پروکسی روی پورت `8085` اجرا میشود. باید مرورگر خود را تنظیم کنید تا ترافیک را از طریق این پروکسی بفرستد.
|
||||
|
||||
### روش ۱: FoxyProxy (توصیه شده برای Chrome/Firefox)
|
||||
|
||||
**۱.** افزونه FoxyProxy را نصب کنید:
|
||||
- [Chrome](https://chromewebstore.google.com/detail/foxyproxy/gcknhkkoolaabfmlnjonogaaifnjlfnp)
|
||||
- [Firefox](https://addons.mozilla.org/en-US/firefox/addon/foxyproxy-standard/)
|
||||
|
||||
**۲.** روی آیکون FoxyProxy کلیک کنید → **Options**
|
||||
|
||||
**۳.** روی **Add** کلیک کنید و این اطلاعات را وارد کنید:
|
||||
```
|
||||
Proxy Type : HTTP
|
||||
Proxy IP : 127.0.0.1
|
||||
Port : 8085
|
||||
```
|
||||
|
||||
**۴.** یک نام دلخواه بدهید (مثلاً «MHR-CFW») و ذخیره کنید.
|
||||
|
||||
**۵.** از آیکون FoxyProxy، پروکسی ساختهشده را فعال کنید.
|
||||
|
||||
### روش ۲: تنظیمات سیستم ویندوز
|
||||
|
||||
اگر میخواهید همه برنامهها از پروکسی استفاده کنند:
|
||||
|
||||
۱. **Settings** → **Network & Internet** → **Proxy**
|
||||
۲. زیر **Manual proxy setup** گزینه **Use a proxy server** را روشن کنید
|
||||
۳. آدرس `127.0.0.1` و پورت `8085` را وارد کنید
|
||||
۴. **Save**
|
||||
|
||||
### روش ۳: SOCKS5 (برای برنامههای سازگار)
|
||||
|
||||
پروجه همچنین یک پروکسی SOCKS5 روی پورت `1080` دارد:
|
||||
```
|
||||
Protocol : SOCKS5
|
||||
Host : 127.0.0.1
|
||||
Port : 1080
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## مرحله ۷ — تست اتصال
|
||||
|
||||
پس از اینکه پروکسی روشن و مرورگر تنظیم شد:
|
||||
|
||||
**۱.** مرورگر را باز کنید و به آدرس [ipleak.net](https://ipleak.net) بروید.
|
||||
|
||||
**۲.** نتیجه موفق:
|
||||
- IP نمایشدادهشده باید از **Cloudflare** (AS13335) باشد
|
||||
- IP واقعی شما نباید نمایش داده شود
|
||||
|
||||
**۳.** تست دسترسی به سایت فیلترشده: هر سایتی که قبلاً در دسترس نبود را امتحان کنید.
|
||||
# - [تلگرام ما : @Raydikalx](https://t.me/Raydikalx)
|
||||
---
|
||||
|
||||
## تنظیمات پیشرفته config.json
|
||||
|
||||
فایل `config.json` گزینههای زیادی دارد که میتوانید برحسب نیاز تنظیم کنید:
|
||||
|
||||
### تنظیمات اصلی
|
||||
|
||||
| کلید | پیشفرض | توضیح |
|
||||
|------|---------|-------|
|
||||
| `google_ip` | `216.239.38.120` | IP سرور Google برای domain fronting. از ابزار اسکن برای یافتن سریعترین IP استفاده کنید. |
|
||||
| `front_domain` | `www.google.com` | دامنهای که در SNI به سیستم فیلترینگ نمایش داده میشود |
|
||||
| `script_id` | — | Deployment ID گوگل Apps Script شما |
|
||||
| `auth_key` | — | رمز مشترک بین پروکسی و Apps Script |
|
||||
| `listen_host` | `127.0.0.1` | آدرس گوشدادن HTTP پروکسی |
|
||||
| `listen_port` | `8085` | پورت HTTP پروکسی |
|
||||
| `socks5_enabled` | `true` | فعالسازی پروکسی SOCKS5 |
|
||||
| `socks5_port` | `1080` | پورت SOCKS5 |
|
||||
| `log_level` | `INFO` | سطح لاگ: `DEBUG`, `INFO`, `WARNING`, `ERROR` |
|
||||
| `verify_ssl` | `true` | تأیید گواهی SSL هنگام اتصال به گوگل |
|
||||
|
||||
### تنظیمات شبکه و اتصال
|
||||
|
||||
| کلید | پیشفرض | توضیح |
|
||||
|------|---------|-------|
|
||||
| `lan_sharing` | `false` | اشتراک پروکسی با سایر دستگاههای شبکه محلی |
|
||||
| `relay_timeout` | `25` | مهلت زمانی (ثانیه) برای هر درخواست رله |
|
||||
| `tls_connect_timeout` | `15` | مهلت اتصال TLS به گوگل (ثانیه) |
|
||||
| `tcp_connect_timeout` | `10` | مهلت اتصال TCP مستقیم (ثانیه) |
|
||||
| `max_response_body_bytes` | `209715200` | حداکثر حجم پاسخ (200 مگابایت) |
|
||||
| `parallel_relay` | `1` | تعداد Apps Script که به صورت موازی استفاده میشوند (نیاز به چند `script_id`) |
|
||||
|
||||
### چند script_id برای سرعت بیشتر
|
||||
|
||||
اگر چندین پروژه Apps Script دارید، میتوانید ID آنها را به صورت لیست بدهید:
|
||||
|
||||
```json
|
||||
{
|
||||
"script_ids": [
|
||||
"AKfycbzFIRSTID...",
|
||||
"AKfycbzSECONDID...",
|
||||
"AKfycbzTHIRDID..."
|
||||
],
|
||||
"parallel_relay": 3
|
||||
}
|
||||
```
|
||||
|
||||
با `parallel_relay: 3`، پروکسی هر درخواست را به **هر سه** script به صورت همزمان میفرستد و سریعترین پاسخ را برمیگرداند — این latency را به شدت کاهش میدهد.
|
||||
|
||||
### تنظیمات دانلود موازی (Parallel Download)
|
||||
|
||||
برای فایلهای بزرگ، پروکسی از قابلیت HTTP Range استفاده میکند تا چندین قطعه را به صورت موازی دانلود کند:
|
||||
|
||||
```json
|
||||
{
|
||||
"chunked_download_extensions": [".mp4", ".mkv", ".zip", ".iso"],
|
||||
"chunked_download_min_size": 5242880,
|
||||
"chunked_download_chunk_size": 524288,
|
||||
"chunked_download_max_parallel": 8,
|
||||
"chunked_download_max_chunks": 256
|
||||
}
|
||||
```
|
||||
|
||||
| کلید | توضیح |
|
||||
|------|-------|
|
||||
| `chunked_download_extensions` | پسوندهایی که دانلود موازی روی آنها فعال میشود |
|
||||
| `chunked_download_min_size` | حداقل حجم فایل برای فعالشدن دانلود موازی (بایت) — پیشفرض 5MB |
|
||||
| `chunked_download_chunk_size` | حجم هر قطعه (بایت) — پیشفرض 512KB |
|
||||
| `chunked_download_max_parallel` | حداکثر تعداد قطعههای همزمان |
|
||||
| `chunked_download_max_chunks` | حداکثر تعداد کل قطعهها |
|
||||
|
||||
### قوانین مسیریابی
|
||||
|
||||
```json
|
||||
{
|
||||
"block_hosts": ["ads.example.com", ".adserver.net"],
|
||||
"bypass_hosts": ["localhost", ".local", ".lan"],
|
||||
"youtube_via_relay": false,
|
||||
"hosts": {
|
||||
"custom.example.com": "1.2.3.4"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
| کلید | توضیح |
|
||||
|------|-------|
|
||||
| `block_hosts` | دامنههایی که کاملاً مسدود میشوند. قوانین با `.` مثل `.adserver.net` شامل همه زیردامنهها میشوند |
|
||||
| `bypass_hosts` | دامنههایی که مستقیم (بدون رله) اتصال برقرار میشوند |
|
||||
| `youtube_via_relay` | اگر `true` باشد، YouTube از طریق Apps Script رله میشود (پیشفرض: مستقیم با SNI rewrite) |
|
||||
| `hosts` | نگاشت دستی دامنه به IP (مثل hosts سیستمعامل) |
|
||||
|
||||
### تنظیمات گوگل
|
||||
|
||||
```json
|
||||
{
|
||||
"direct_google_exclude": ["gemini.google.com", "mail.google.com"],
|
||||
"direct_google_allow": ["www.google.com", "safebrowsing.google.com"]
|
||||
}
|
||||
```
|
||||
|
||||
سرویسهای گوگل که در `direct_google_exclude` هستند از طریق Apps Script رله میشوند (نه مستقیم). سرویسهای `direct_google_allow` مستقیم به IP گوگل متصل میشوند.
|
||||
|
||||
---
|
||||
|
||||
## ابزار اسکن IP گوگل
|
||||
|
||||
اگر پروکسی کند است یا IP گوگل فعلی مسدود شده، میتوانید سریعترین IP موجود را پیدا کنید:
|
||||
|
||||
```bash
|
||||
python main.py --scan
|
||||
```
|
||||
|
||||
خروجی نمونه:
|
||||
```
|
||||
Scanning 26 Google frontend IPs
|
||||
SNI: www.google.com
|
||||
Timeout: 4s per IP
|
||||
Concurrency: 8 parallel probes
|
||||
|
||||
IP LATENCY STATUS
|
||||
-------------------- ------------ -------------------------
|
||||
216.239.38.120 42ms OK
|
||||
142.250.80.142 45ms OK
|
||||
172.217.14.206 78ms OK
|
||||
...
|
||||
|
||||
Top 3 fastest IPs:
|
||||
1. 216.239.38.120 (42ms)
|
||||
2. 142.250.80.142 (45ms)
|
||||
3. 172.217.14.206 (78ms)
|
||||
|
||||
Recommended: Set "google_ip": "216.239.38.120" in config.json
|
||||
```
|
||||
|
||||
IP پیشنهادشده را در `config.json` در قسمت `google_ip` قرار دهید.
|
||||
|
||||
---
|
||||
|
||||
## اشتراکگذاری در شبکه محلی (LAN)
|
||||
|
||||
اگر میخواهید موبایل یا سایر دستگاههای خانگی هم از این پروکسی استفاده کنند:
|
||||
|
||||
در `config.json`:
|
||||
```json
|
||||
{
|
||||
"lan_sharing": true
|
||||
}
|
||||
```
|
||||
|
||||
پروکسی به صورت خودکار روی همه رابطهای شبکه (`0.0.0.0`) گوش میدهد و آدرسهای قابل دسترس از شبکه محلی را لاگ میکند:
|
||||
|
||||
```
|
||||
INFO [Main] LAN HTTP proxy : 192.168.1.100:8085, 192.168.1.100:8085
|
||||
INFO [Main] LAN SOCKS5 proxy : 192.168.1.100:1080
|
||||
```
|
||||
|
||||
**تنظیم موبایل (Android/iOS):**
|
||||
1. به تنظیمات WiFi بروید
|
||||
2. شبکه متصل را نگه دارید یا روی آیکون ⚙️ بزنید
|
||||
3. گزینه **Proxy** را روی **Manual** بگذارید
|
||||
4. **Hostname**: آدرس IP لپتاپ/PC شما (مثلاً `192.168.1.100`)
|
||||
5. **Port**: `8085`
|
||||
|
||||
> **توجه:** فایروال ویندوز ممکن است اتصال از شبکه محلی را مسدود کند. اگر موبایل نتوانست متصل شود، یک قانون استثنا در Windows Defender Firewall برای پورت ۸۰۸۵ اضافه کنید.
|
||||
|
||||
---
|
||||
|
||||
## راهاندازی روی لینوکس و مک
|
||||
|
||||
تمام مراحل بالا روی لینوکس و مک یکسان است با این تفاوتها:
|
||||
|
||||
### نصب Python (Ubuntu/Debian)
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install python3 python3-pip python3-venv git -y
|
||||
```
|
||||
|
||||
### نصب Python (Fedora/RHEL)
|
||||
```bash
|
||||
sudo dnf install python3 python3-pip git -y
|
||||
```
|
||||
|
||||
### نصب Python (macOS)
|
||||
```bash
|
||||
brew install python3 git
|
||||
```
|
||||
> اگر Homebrew ندارید: `/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"`
|
||||
|
||||
### نصب گواهی CA روی لینوکس
|
||||
|
||||
اگر نصب خودکار با خطا روبرو شد:
|
||||
```bash
|
||||
sudo python main.py --install-cert
|
||||
```
|
||||
|
||||
برای Ubuntu/Debian میتوانید دستی هم نصب کنید:
|
||||
```bash
|
||||
sudo cp ca/ca.crt /usr/local/share/ca-certificates/mhr-cfw.crt
|
||||
sudo update-ca-certificates
|
||||
```
|
||||
|
||||
### حذف گواهی CA
|
||||
```bash
|
||||
sudo python main.py --uninstall-cert
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## آرگومانهای خط فرمان
|
||||
|
||||
```
|
||||
python main.py [گزینهها]
|
||||
|
||||
-c, --config PATH مسیر فایل config (پیشفرض: config.json)
|
||||
-p, --port PORT اوررید پورت HTTP
|
||||
--host HOST اوررید آدرس گوشدادن
|
||||
--socks5-port PORT اوررید پورت SOCKS5
|
||||
--disable-socks5 غیرفعال کردن SOCKS5
|
||||
--log-level LEVEL سطح لاگ (DEBUG/INFO/WARNING/ERROR)
|
||||
--install-cert نصب گواهی CA و خروج
|
||||
--uninstall-cert حذف گواهی CA و خروج
|
||||
--no-cert-check رد شدن از بررسی گواهی CA
|
||||
--scan اسکن IP های گوگل و خروج
|
||||
-v, --version نمایش نسخه
|
||||
```
|
||||
|
||||
مثال — اجرا با پورت متفاوت بدون تغییر config:
|
||||
```bash
|
||||
python main.py -p 9090 --socks5-port 9091 --log-level DEBUG
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## متغیرهای محیطی
|
||||
|
||||
میتوانید به جای تغییر `config.json` از متغیرهای محیطی استفاده کنید:
|
||||
|
||||
| متغیر | معادل config |
|
||||
|-------|-------------|
|
||||
| `DFT_AUTH_KEY` | `auth_key` |
|
||||
| `DFT_SCRIPT_ID` | `script_id` |
|
||||
| `DFT_PORT` | `listen_port` |
|
||||
| `DFT_HOST` | `listen_host` |
|
||||
| `DFT_SOCKS5_PORT` | `socks5_port` |
|
||||
| `DFT_LOG_LEVEL` | `log_level` |
|
||||
| `DFT_CONFIG` | مسیر فایل config |
|
||||
|
||||
**لینوکس/مک:**
|
||||
```bash
|
||||
export DFT_AUTH_KEY="my_secret_key"
|
||||
export DFT_SCRIPT_ID="AKfycbz..."
|
||||
python main.py
|
||||
```
|
||||
|
||||
**ویندوز CMD:**
|
||||
```
|
||||
set DFT_AUTH_KEY=my_secret_key
|
||||
python main.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## خروجی نهایی
|
||||
## عیبیابی
|
||||
|
||||
اگر همه چیز درست باشد، این پیام را میبینید:
|
||||
### خطا: `auth_key is unset or uses a known placeholder`
|
||||
|
||||
**علت:** مقدار `auth_key` در `config.json` تغییر نکرده یا خالی است.
|
||||
|
||||
**راهحل:** در `config.json` مقدار `auth_key` را به یک رمز واقعی تغییر دهید. این رمز باید **دقیقاً** با مقدار `AUTH_KEY` در فایل `Code.gs` یکسان باشد.
|
||||
|
||||
---
|
||||
|
||||
### خطا: `Missing 'script_id' in config`
|
||||
|
||||
**علت:** Deployment ID وارد نشده یا مقدار پیشفرض تغییر نکرده.
|
||||
|
||||
**راهحل:** Deployment ID را از Google Apps Script کپی و در `config.json` وارد کنید.
|
||||
|
||||
---
|
||||
|
||||
### پروکسی اجرا میشود اما سایتها باز نمیشوند
|
||||
|
||||
**۱. بررسی کنید مرورگر به پروکسی متصل است:**
|
||||
- در FoxyProxy مطمئن شوید پروکسی فعال است
|
||||
- در ipleak.net بررسی کنید IP تغییر کرده باشد
|
||||
|
||||
**۲. AUTH_KEY را بررسی کنید:**
|
||||
- مقدار `auth_key` در `config.json` باید **کاملاً یکسان** با `AUTH_KEY` در `Code.gs` باشد
|
||||
- به فاصله، کوچک/بزرگبودن حروف، و کاراکترهای اضافه دقت کنید
|
||||
|
||||
**۳. پس از تغییر Code.gs باید Deploy جدید بسازید:**
|
||||
- هر بار که `Code.gs` را تغییر میدهید، باید دوباره **Deploy → New deployment** کنید
|
||||
- از Deployment ID **جدید** استفاده کنید
|
||||
|
||||
**۴. google_ip را بررسی کنید:**
|
||||
- دستور `python main.py --scan` را اجرا کنید
|
||||
- سریعترین IP را در `config.json` قرار دهید
|
||||
|
||||
---
|
||||
|
||||
### خطا در لاگ: `unauthorized`
|
||||
|
||||
**علت:** `AUTH_KEY` در Apps Script با `auth_key` در `config.json` مطابقت ندارد.
|
||||
|
||||
**راهحل:**
|
||||
1. `Code.gs` را در Apps Script باز کنید
|
||||
2. مقدار `AUTH_KEY` را یادداشت کنید
|
||||
3. همان مقدار را در `config.json` برای `auth_key` قرار دهید
|
||||
4. سرویس را ریاستارت کنید
|
||||
|
||||
---
|
||||
|
||||
### خطا: `MITM CA is not trusted`
|
||||
|
||||
**علت:** گواهی CA نصب نشده یا نصب آن ناموفق بوده.
|
||||
|
||||
**راهحل:**
|
||||
```bash
|
||||
# اجرا با دسترسی ادمین:
|
||||
# ویندوز: CMD را به عنوان Administrator باز کنید
|
||||
python main.py --install-cert
|
||||
|
||||
# لینوکس/مک:
|
||||
sudo python main.py --install-cert
|
||||
```
|
||||
HTTP proxy is running on 127.0.0.1:8085
|
||||
|
||||
اگر مشکل ادامه داشت، گواهی را **دستی** نصب کنید:
|
||||
1. فایل `ca/ca.crt` را پیدا کنید
|
||||
2. روی آن دوبار کلیک کنید (ویندوز)
|
||||
3. **Install Certificate** → **Local Machine** → **Trusted Root Certification Authorities**
|
||||
|
||||
---
|
||||
|
||||
### پروکسی در ویندوز کند است یا قطع میشود
|
||||
|
||||
برخی مواقع Windows Defender یا آنتیویروس ترافیک پروکسی را بررسی میکند.
|
||||
|
||||
پوشه پروژه را به استثناهای آنتیویروس اضافه کنید:
|
||||
- Windows Security → Virus & threat protection → Manage settings → Exclusions
|
||||
|
||||
---
|
||||
|
||||
### پیام: `H2 multiplexing` نمیآید
|
||||
|
||||
این پیام نشان میدهد کتابخانه `h2` نصب نشده. بدون آن پروکسی با HTTP/1.1 کار میکند (کمی کندتر).
|
||||
|
||||
برای نصب:
|
||||
```bash
|
||||
pip install h2>=4.1.0
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## سؤالات متداول
|
||||
|
||||
**آیا این پروژه رایگان است؟**
|
||||
بله، کاملاً رایگان است. Google Apps Script و Cloudflare Workers هر دو پلن رایگان دارند که برای استفاده شخصی کافی است.
|
||||
|
||||
**محدودیتهای Apps Script چیست؟**
|
||||
در پلن رایگان، Google Apps Script روزانه محدودیت ۶ دقیقه زمان اجرا و ۲۰,۰۰۰ درخواست URL دارد. برای استفاده معمول روزانه معمولاً کافی است. اگر پیام `quota_exceeded` در لاگ دیدید، روز بعد سهمیه تجدید میشود.
|
||||
|
||||
**آیا میتوانم چند نفر از یک Apps Script استفاده کنیم؟**
|
||||
بله، اما سهمیه روزانه مشترک میشود. بهتر است هر نفر پروژه مجزای خود را بسازد.
|
||||
|
||||
**آیا ترافیک شما توسط گوگل دیده میشود؟**
|
||||
Apps Script درخواستها را از طریق `UrlFetchApp` ارسال میکند. محتوای JSON رمزگذارینشده توسط Apps Script پردازش میشود. برای اطلاعات حساس از HTTPS اطمینان حاصل کنید (که به صورت پیشفرض رمزگذاری شده باقی میماند).
|
||||
|
||||
**آیا IPv6 پشتیبانی میشود?**
|
||||
پروکسی HTTP روی IPv4 گوش میدهد. اتصالات مستقیم (مثل bypass) هم IPv4 و هم IPv6 را پشتیبانی میکنند.
|
||||
|
||||
**گواهی CA را چطور حذف کنم؟**
|
||||
```bash
|
||||
python main.py --uninstall-cert
|
||||
```
|
||||
یا فایل `run.bat --uninstall-cert` را اجرا کنید.
|
||||
|
||||
**آیا پروکسی بعد از ریاستارت سیستم خودکار اجرا میشود؟**
|
||||
خیر، باید دستی اجرا شود. برای راهاندازی خودکار در ویندوز میتوانید یک Task در Task Scheduler بسازید. در لینوکس میتوانید یک systemd service بنویسید.
|
||||
|
||||
---
|
||||
|
||||
## ساختار فایلهای پروژه
|
||||
|
||||
```
|
||||
mhr-cfw/
|
||||
├── main.py ← نقطه ورود اصلی
|
||||
├── setup.py ← wizard راهاندازی
|
||||
├── config.json ← تنظیمات شما (ساخته نمیشود، باید بسازید)
|
||||
├── config.example.json ← نمونه تنظیمات با همه گزینهها
|
||||
├── requirements.txt ← وابستگیهای Python
|
||||
├── run.bat ← اجراکننده ویندوز
|
||||
├── run.sh ← اجراکننده لینوکس/مک
|
||||
├── ca/ ← گواهی CA (خودکار ساخته میشود)
|
||||
│ ├── ca.crt ← گواهی عمومی CA
|
||||
│ └── ca.key ← کلید خصوصی CA (محرمانه)
|
||||
├── script/
|
||||
│ ├── Code.gs ← کد Google Apps Script
|
||||
│ └── worker.js ← کد Cloudflare Worker
|
||||
└── src/
|
||||
├── proxy_server.py ← سرور HTTP/SOCKS5 محلی
|
||||
├── domain_fronter.py ← موتور رله Apps Script
|
||||
├── h2_transport.py ← انتقال HTTP/2
|
||||
├── mitm.py ← مدیریت گواهی MITM
|
||||
├── cert_installer.py ← نصب CA در سیستمعامل
|
||||
├── codec.py ← رمزگشایی gzip/brotli/zstd
|
||||
├── constants.py ← ثابتهای قابل تنظیم
|
||||
├── google_ip_scanner.py ← اسکنر IP گوگل
|
||||
├── lan_utils.py ← ابزارهای شبکه محلی
|
||||
└── logging_utils.py ← لاگگذاری رنگی
|
||||
```
|
||||
|
||||
> **هرگز** فایل `ca/ca.key` را به کسی ندهید یا در اینترنت آپلود نکنید.
|
||||
|
||||
---
|
||||
|
||||
## سلب مسئولیت
|
||||
|
||||
این نرمافزار فقط برای اهداف آموزشی، تحقیقاتی و تست ارائه شده است.
|
||||
|
||||
- نرمافزار «همانطور که هست» (AS IS) ارائه میشود بدون هیچ ضمانتی
|
||||
- توسعهدهندگان مسئولیتی در قبال خسارات احتمالی ندارند
|
||||
- رعایت قوانین محلی، ملی و بینالمللی بر عهده کاربر است
|
||||
- رعایت شرایط استفاده از سرویسهای Google و Cloudflare بر عهده کاربر است
|
||||
|
||||
</div>
|
||||
Reference in New Issue
Block a user