|
| 1 | +# Tunnel Node — راهنمای فارسی |
| 2 | + |
| 3 | +> *English: [README.md](./README.md)* |
| 4 | +
|
| 5 | +سرور پل HTTP-tunnel برای حالت `full` در MasterHttpRelayVPN. درخواستهای HTTP-tunnel رو که از Apps Script میرسن، به اتصالهای واقعی TCP/UDP تبدیل میکنه. |
| 6 | + |
| 7 | +این `tunnel-node` همون قطعهای از مسیر Full mode هست که روی **VPS شما** اجرا میشه. جواب کوتاه به سؤال «آیا VPS لازمه؟» = **بله، برای حالت Full بدون VPS کار نمیکنه**. |
| 8 | + |
| 9 | +## معماری |
| 10 | + |
| 11 | +``` |
| 12 | +موبایل/PC → mhrv-rs → [TLS با domain-fronting روی Google] → Apps Script → [HTTP] → Tunnel Node (روی VPS شما) → [TCP/UDP واقعی] → اینترنت |
| 13 | +``` |
| 14 | + |
| 15 | +Tunnel-node sessionهای پایدار TCP و UDP رو نگه میداره. sessionهای TCP اتصالهای واقعی به سرور مقصد هستن؛ sessionهای UDP، socketهای connected-UDP به یک `host:port` مقصد هستن. data از طریق پروتکل JSON جریان داره: |
| 16 | + |
| 17 | +- **connect** — باز کردن TCP به `host:port` + برگرداندن session ID |
| 18 | +- **data** — نوشتن data کلاینت + خوندن جواب سرور |
| 19 | +- **udp_open** — باز کردن UDP به `host:port`، اختیاری اولین datagram رو همزمان میفرسته |
| 20 | +- **udp_data** — یک datagram UDP میفرسته، یا اگه `d` ست نشه برای datagramهای برگشتی poll میکنه |
| 21 | +- **close** — تخریب session |
| 22 | +- **batch** — پردازش چند op در یک request HTTP (تعداد روند-تریپ کمتر) |
| 23 | + |
| 24 | +## استقرار |
| 25 | + |
| 26 | +### Cloud Run (پیشنهاد برای کاربران ایرانی متأثر از فیلتر #313) |
| 27 | + |
| 28 | +اجرای tunnel-node روی **Google Cloud Run** یعنی destination IP خود Google هست — احتمال filter شدن مسیر Apps Script → tunnel-node توسط ISP ایران بسیار پایینتر از Hetzner/DigitalOcean. ([کانتکست در #313](https://github.com/therealaleph/MasterHttpRelayVPN-RUST/issues/313)) |
| 29 | + |
| 30 | +```bash |
| 31 | +cd tunnel-node |
| 32 | +gcloud run deploy tunnel-node \ |
| 33 | + --source . \ |
| 34 | + --region us-central1 \ |
| 35 | + --allow-unauthenticated \ |
| 36 | + --set-env-vars TUNNEL_AUTH_KEY=$(openssl rand -hex 24) \ |
| 37 | + --memory 256Mi \ |
| 38 | + --cpu 1 \ |
| 39 | + --max-instances 1 |
| 40 | +``` |
| 41 | + |
| 42 | +### Docker — image آماده (هر VPS) |
| 43 | + |
| 44 | +سریعترین مسیر. image آماده pull کن و اجرا کن؛ نیاز به Rust toolchain روی VPS نیست. |
| 45 | + |
| 46 | +```bash |
| 47 | +# secret قوی بساز. ذخیرهاش کن — همین مقدار رو بعداً تو CodeFull.gs paste میکنی. |
| 48 | +SECRET=$(openssl rand -hex 24) |
| 49 | +echo "TUNNEL_AUTH_KEY شما: $SECRET" |
| 50 | + |
| 51 | +# Pull + run. |
| 52 | +docker run -d \ |
| 53 | + --name mhrv-tunnel \ |
| 54 | + --restart unless-stopped \ |
| 55 | + -p 8080:8080 \ |
| 56 | + -e TUNNEL_AUTH_KEY="$SECRET" \ |
| 57 | + ghcr.io/therealaleph/mhrv-tunnel-node:latest |
| 58 | +``` |
| 59 | + |
| 60 | +تگ `:latest` آخرین release رو دنبال میکنه. برای production توصیه میشه روی version مشخص pin بزنی: `ghcr.io/therealaleph/mhrv-tunnel-node:v1.8.0` (یا هر نسخهای که داری). image روی `linux/amd64` و `linux/arm64` موجوده. |
| 61 | + |
| 62 | +**docker-compose.yml** اگه این رو ترجیح میدی: |
| 63 | + |
| 64 | +```yaml |
| 65 | +services: |
| 66 | + tunnel: |
| 67 | + image: ghcr.io/therealaleph/mhrv-tunnel-node:latest |
| 68 | + restart: unless-stopped |
| 69 | + ports: |
| 70 | + - "8080:8080" |
| 71 | + environment: |
| 72 | + TUNNEL_AUTH_KEY: ${TUNNEL_AUTH_KEY} |
| 73 | +``` |
| 74 | +
|
| 75 | +سپس `TUNNEL_AUTH_KEY=your-secret docker compose up -d`. |
| 76 | + |
| 77 | +### Docker — build از source |
| 78 | + |
| 79 | +اگه میخوای خودت image رو build کنی (یا custom تغییر بدی): |
| 80 | + |
| 81 | +```bash |
| 82 | +cd tunnel-node |
| 83 | +docker build -t tunnel-node . |
| 84 | +docker run -p 8080:8080 -e TUNNEL_AUTH_KEY=your-secret tunnel-node |
| 85 | +``` |
| 86 | + |
| 87 | +### Binary مستقیم |
| 88 | + |
| 89 | +```bash |
| 90 | +cd tunnel-node |
| 91 | +cargo build --release |
| 92 | +TUNNEL_AUTH_KEY=your-secret PORT=8080 ./target/release/tunnel-node |
| 93 | +``` |
| 94 | + |
| 95 | +## متغیرهای محیطی |
| 96 | + |
| 97 | +| متغیر | الزامی | پیشفرض | توضیح | |
| 98 | +|-------|--------|---------|-------| |
| 99 | +| `TUNNEL_AUTH_KEY` | بله | `changeme` | secret مشترک — باید با `TUNNEL_AUTH_KEY` در CodeFull.gs match کنه | |
| 100 | +| `PORT` | خیر | `8080` | پورت listen (Cloud Run خودش این رو ست میکنه) | |
| 101 | +| `MHRV_DIAGNOSTIC` | خیر | (off) | اگه `1` باشه، روی auth بد بهجای decoy 404 nginx، JSON `{"e":"unauthorized"}` صریح برمیگردونه. **فقط برای setup/debug** — قبل از public کردن tunnel-node خاموشش کن. (v1.8.0+) | |
| 102 | + |
| 103 | +## پروتکل |
| 104 | + |
| 105 | +### تک op: `POST /tunnel` |
| 106 | + |
| 107 | +```json |
| 108 | +{"k":"auth","op":"connect","host":"example.com","port":443} |
| 109 | +{"k":"auth","op":"data","sid":"uuid","data":"base64"} |
| 110 | +{"k":"auth","op":"close","sid":"uuid"} |
| 111 | +``` |
| 112 | + |
| 113 | +### Batch: `POST /tunnel/batch` |
| 114 | + |
| 115 | +```json |
| 116 | +{ |
| 117 | + "k": "auth", |
| 118 | + "ops": [ |
| 119 | + {"op":"data","sid":"uuid1","d":"base64"}, |
| 120 | + {"op":"udp_data","sid":"uuid2","d":"base64"}, |
| 121 | + {"op":"close","sid":"uuid3"} |
| 122 | + ] |
| 123 | +} |
| 124 | +→ {"r": [{...}, {...}, {...}]} |
| 125 | +``` |
| 126 | + |
| 127 | +### Health check: `GET /health` → `ok` |
| 128 | + |
| 129 | +## Performance: تعداد deployment و عمق pipeline |
| 130 | + |
| 131 | +کلاینت mhrv-rs در حالت Full یک batch-multiplexer pipelined اجرا میکنه. هر روند-تریپ Apps Script حدود ۲ ثانیه طول میکشه، پس کلاینت چندین request batch همزمان شلیک میکنه — عمق pipeline برابر تعداد deployment IDهای Apps Script هست (حداقل ۲، بدون سقف بالا). |
| 132 | + |
| 133 | +تعداد deployment بیشتر = batchهای همزمان بیشتر روی tunnel-node = latency پایینتر برای session. با ۶ deployment، هر ۰.۳ ثانیه یه batch جدید میرسه (بهجای هر ۲ ثانیه). |
| 134 | + |
| 135 | +خود tunnel-node per-request stateless هست (sessionها بر اساس UUID key میشن)، پس batchهای همزمان رو طبیعی handle میکنه. برای بهترین نتیجه، ۳–۱۲ Apps Script روی accountهای Google جداگانه deploy کن و همهٔ deployment IDها رو در config کلاینت لیست کن. |
| 136 | + |
| 137 | +--- |
| 138 | + |
| 139 | +## سؤالات رایج |
| 140 | + |
| 141 | +### حجم مصرف چقدره؟ |
| 142 | + |
| 143 | +سه لایه overhead هست در حالت Full: |
| 144 | + |
| 145 | +1. **Base64 encoding** برای data ها در JSON envelope = ~۳۳٪ overhead روی payload (4 byte per 3 byte raw) |
| 146 | +2. **JSON envelope + headers** = ~۵-۱۵٪ overhead بسته به اندازه payload |
| 147 | +3. **Random padding (v1.8.0+)** برای DPI defense = متوسط ۵۱۲ بایت اضافه به هر batch |
| 148 | + |
| 149 | +تخمین کلی: اگه ۱ GB دانلود میکنی، ~۱.۲۵-۱.۳ GB روی پهنای باند VPS مصرف میکنه. |
| 150 | + |
| 151 | +برای ۲۰ GB ماهانه استفاده روزمره (browsing + Telegram + ویدیو متوسط)، ~۲۵-۲۷ GB پهنای باند VPS لازم داری. Hetzner CX11 (€۴/ماه) ۲۰ TB ماهانه میده — یعنی به سقف نمیرسی مگه streaming سنگین. |
| 152 | + |
| 153 | +### روی موبایل کل برنامهها رو بالا میاره؟ |
| 154 | + |
| 155 | +**بستگی به Mode داره:** |
| 156 | + |
| 157 | +- **mhrv-rs Android در Tunnel mode (Operating Mode → Tunnel)** + Full + tunnel-node = ✅ کل ترافیک Android (شامل YouTube، Telegram MTProto، Instagram، Snapchat، هر چیزی) capture میشه. این از VpnService استفاده میکنه. |
| 158 | +- **mhrv-rs Android در Proxy mode** + Full + tunnel-node = فقط appهایی که proxy رو صریحاً respect میکنن (Chrome، Firefox، برخی appهای Telegram-فارسی). YouTube/Insta/Telegram اصلی proxy رو نادیده میگیرن + از mhrv-rs رد نمیشن. |
| 159 | + |
| 160 | +برای اینکه «همهٔ appها بیان» = حتماً **Tunnel mode** فعال کن. |
| 161 | + |
| 162 | +### سرعت چقدر خوبه؟ |
| 163 | + |
| 164 | +برای یک flow (یک download، یک ویدیو، یک TCP connection) معمولاً **۵۰–۲۰۰ KB/s** هست. علت: |
| 165 | + |
| 166 | +- Apps Script روند-تریپ floor ~۲۰۰-۵۰۰ ms داره (غیر قابل پایین آوردن، Google-side limit) |
| 167 | +- هر batch به یک deployment باند میشه + هر flow به یک batch |
| 168 | +- در نتیجه per-flow throughput = batch_size / batch_round_trip = (~۶۴-۲۵۶ KB) / (~۲۵۰-۵۰۰ ms) ≈ ۱۲۸-۵۰۰ KB/s ceiling |
| 169 | + |
| 170 | +برای **چند flow همزمان** (browsing با چند تب، Telegram + YouTube همزمان)، throughput جمعی به sum از همه flowها مقیاس میخوره — با ۶ deployment روی ۶ Google account میتونی ۶ flow همزمان داشته باشی. |
| 171 | + |
| 172 | +**توصیه واقعبینانه:** برای browsing عادی + chat + ویدیو متوسط = کافیه. برای دانلود فایلهای بزرگ سریع، **Wireguard مستقیم روی همان VPS** ابزار درستتره (۵-۱۰x سریعتر، چون Apps Script رو دور میزنه). mhrv-rs ارزش اصلیش لایه «دور زدن censorship با domain-fronting» هست، نه سرعت raw — وقتی به اون لایه نیاز نداری (مسیر مستقیم به VPS باز هست)، ابزار سادهتر بهتره. |
| 173 | + |
| 174 | +### آیا VPS لازمه؟ |
| 175 | + |
| 176 | +برای **حالت Full** (شامل Telegram، YouTube بدون 60s SABR cliff، WebSockets، MTProto و هر چیزی غیر-HTTPS-ساده): **بله، VPS الزامی هست**. |
| 177 | + |
| 178 | +برای **حالت `apps_script`** (browsing فقط HTTPS): **خیر، نیاز به VPS نیست** — فقط نیاز به Apps Script setup روی Google account داری. |
| 179 | + |
| 180 | +برای **حالت `google_only`** (فقط Google services مثل Search/Gmail/YouTube ساده): **نه VPS لازمه نه Apps Script** — بوتاسترپ ساده. |
| 181 | + |
| 182 | +### چه VPSای پیشنهاد میشه؟ |
| 183 | + |
| 184 | +- **Hetzner CX11** (Falkenstein/Helsinki، €۴/ماه) — best value، ۲۰ TB ماهانه، خوب برای کاربران اروپا/خاورمیانه |
| 185 | +- **DigitalOcean basic droplet** ($۶/ماه، NYC/SFO) — برای کاربران آمریکا |
| 186 | +- **Google Cloud Run** (free tier تا ۲ میلیون request/ماه + ۵ GB egress) — تنها provider که destination IP اصلاً Google هست، پس مسیر Iran→Apps Script→Cloud-Run-tunnel-node کاملاً درون شبکه Google میمونه و ISP filter نمیبینه. **بهترین گزینه برای کاربران ایرانی متأثر از [#313](https://github.com/therealaleph/MasterHttpRelayVPN-RUST/issues/313)**. |
| 187 | + |
| 188 | +برای راهنمای قدمبهقدم setup: [#310 reply (راهنمای فارسی)](https://github.com/therealaleph/MasterHttpRelayVPN-RUST/issues/310#issuecomment-4326086988). |
0 commit comments