brainstate

dreamboxone/gozarbin · source

Snapshot 0 · 2026-11-04T12:47:28Z · Rust · AGPL-3.0

Content fingerprint6a563c4726d43ba827ab34a899982057f502678cf05646fbe6c44f3a33a5f6c9

GitHub description at capture

A rust core proxy client for openwrt routers and more

README at capture

<div dir="rtl">

# گذربین — پراکسی و تفکیک ترافیک برای OpenWrt

> **گذربین نسخه‌ای تغییر‌یافته از [Aether](https://github.com/CluvexStudio/Aether) است.**
> هستهٔ تونل کار CluvexStudio است و تحت AGPL-3.0 منتشر شده.
> این مخزن آن را در سال ۲۰۲۶ تغییر داده و برایش بسته‌بندی OpenWrt، سرویس، قواعد فایروال،
> هستهٔ اختصاصی sing-box و یک رابط کاربری فارسی اضافه کرده و نامش را گذربین گذاشته است.
> نام Aether علامت تجاری CluvexStudio است و برای نسخهٔ تغییر‌یافته مجوز ندارد؛ نام متفاوت
> به همین دلیل است. فهرست دقیق اینکه کدام بخش کار چه کسی است در [NOTICE](NOTICE) آمده.

راهنمای کامل نصب و استفاده. اگر فقط می‌خواهید شروع کنید، [نصب سریع](#نصب-سریع) کافی است؛ باقی متن توضیح تک‌تک امکانات است.

هسته با Aether `2.4.0` در کامیت بالادست `d58f9d5` همگام شده است؛ شمارهٔ نسخهٔ
بسته‌های گذربین مستقل می‌ماند. این ارتقا اصلاحات ثبت WARP، شنونده‌های پایدار
پراکسی، اتصال Psiphon از پشت پراکسی و بررسی گواهی MASQUE برای Zero Trust را دارد.
سرویس OpenWrt گزینهٔ `enroll_address` ذخیره‌شده را با آرگومان جدید `--api-address`
به هسته می‌فرستد؛ تنظیمات موجود حفظ می‌شوند.

رابط فارسی برای موبایل و تم Material تنظیم شده است. پیام‌های عملیات زیر دکمه‌ها
نمایش داده می‌شوند. جزئیات [به‌روزرسانی داخلی تفاضلی](Docs/internal-update.md)
و [تطبیق کامل تنظیمات اتر](Docs/aether-compatibility.md) نیز در دسترس است.

از نسخهٔ `5.7.29` شمارهٔ انتشار از تاریخ شمسی تهران گرفته می‌شود:
`(سال − ۱۴۰۰).ماه.روز`؛ برای نمونه ۱۴۰۵/۷/۲۹ برابر `5.7.29` است.
اجرای `bash scripts/set-release-version.sh` بدون آرگومان، نسخهٔ روز را در سورس
بسته‌ها تنظیم می‌کند؛ شماره هسته اتر مستقل می‌ماند. برای ویرایش مجدد در همان روز، پسوند `rN` اضافه می‌شود؛
برای نمونه `bash scripts/set-release-version.sh 5.7.29r2` ویرایش دوم را آماده می‌کند.
برچسب انتشار با پیشوند `v` ساخته می‌شود. سربرگ «به‌روزرسانی» نسخهٔ فعلی، آخرین
انتشارهای GitHub شامل Pre-release و مراحل فعال دریافت و نصب را نمایش می‌دهد.

در ویرایش `5.7.29r2`، دکمهٔ روز و شب در سربرگ قرار دارد و انتخاب آن در مرورگر
ذخیره می‌شود. کارت یکپارچهٔ مصرف ترافیک بازه‌های ۱ روز، ۷ روز و ۳۰ روز را نشان
می‌دهد؛ تاریخچه مستقل از مرورگر روی روتر ثبت می‌شود. دادهٔ روزهای قبل از فعال‌شدن
این قابلیت موجود نیست. برای کاهش نوشتن روی فلش، تاریخچه هر ۱۵ دقیقه و پیش از
بازسازی شمارنده‌ها ذخیره می‌شود؛ قطع برق ناگهانی ممکن است نمونه‌های پس از آخرین ذخیره را از دست بدهد.

---

## گذربین چه کار می‌کند؟

‏گذربین یک کلاینت عبور از فیلترینگ است که روی خود روتر اجرا می‌شود. یک تونل رمزنگاری‌شده به بیرون باز می‌کند و آن را به سه شکل در اختیار شما می‌گذارد:

| حالت | چه اتفاقی می‌افتد | مناسب چه کسی |
| --- | --- | --- |
| **پراکسی شفاف (TProxy)**‏ | تمام ترافیک دستگاه‌های شبکه بدون هیچ تنظیمی از تونل رد می‌شود | حالت پیش‌فرض و پیشنهادی |
| **کارت شبکهٔ مجازی (TUN)**‏ | یک اینترفیس مجازی ساخته می‌شود و مسیریابی از آن عبور می‌کند | روترهایی که TProxy در آن‌ها مشکل دارد |
| **فقط SOCKS5**‏ | تنها یک پراکسی محلی باز می‌شود و ترافیک شبکه دست‌نخورده می‌ماند | وقتی می‌خواهید فقط بعضی برنامه‌ها از تونل رد شوند |

بخش SOCKS5 داخل خود هستهٔ تونل پیاده‌سازی شده است. حالت شفاف و حالت TUN با کمک **sing-box** انجام می‌شود؛ گذربین هستهٔ sing-box خودش را دارد و به هستهٔ Passwall2 دست نمی‌زند — توضیحش [پایین‌تر](#هستهٔ-sing-box) آمده.

تونل پیش‌فرض **WARP از راه Psiphon** است: Psiphon راه خروج را پیدا می‌کند و WARP (MASQUE) داخل آن وصل می‌شود، چون روی شبکه‌های فیلترشده دست‌دادن مستقیم MASQUE اغلب قطع می‌شود. حالت‌های دیگر هم هست (MASQUE مستقیم، WireGuard و ترکیب‌هایشان). **Psiphon** داخل همین بسته است — به‌تنهایی یا زنجیرشده با WARP از هر دو طرف — و **کشور خروجی** را خودتان انتخاب می‌کنید. توضیحش در بخش [Psiphon و انتخاب کشور](#psiphon-و-انتخاب-کشور) آمده.

---

## پیش‌نیازها

هنگام نصب بسته، همهٔ موارد زیر به‌طور خودکار توسط `apk` یا `opkg` نصب می‌شوند. نیازی نیست چیزی را دستی نصب کنید:

| بسته | برای چه لازم است |
| --- | --- |
| ‏`kmod-nft-tproxy`‏ | ماژول کرنل برای هدایت ترافیک به تونل |
| ‏`kmod-nft-socket`‏ | ماژول کرنل مکمل TProxy‏ |
| ‏`kmod-tun`‏ | ماژول کرنل برای حالت TUN‏ |
| ‏`nftables`‏ | نوشتن قواعد فایروال |
| ‏`ip-full`‏ | قواعد مسیریابی بر اساس fwmark‏ |
| ‏`ca-bundle` و `libustream-mbedtls`‏ | دانلود امن فهرست‌ها روی HTTPS‏ |
| ‏`curl`، `jsonfilter`، `ucode` و `ucode-mod-fs`‏ | بررسی انتشار، دریافت تفاضلی و بازسازی بستهٔ به‌روزرسانی |

اگر روتر بعداً یکی از این بسته‌ها را از دست بدهد (مثلاً بعد از بازیابی نسخهٔ پشتیبان)، صفحهٔ تنظیمات آن را در کارت «پیش‌نیازها» نشان می‌دهد و دکمهٔ **«نصب پیش‌نیازهای جا افتاده»** آن را نصب می‌کند. همین کار از خط فرمان:

</div>

```sh
gozarbinctl deps          # گزارش وضعیت
gozarbinctl install-deps  # نصب موارد جا افتاده
```

<div dir="rtl">

سرویس هم پیش از شروع حالت شفاف همین بررسی را انجام می‌دهد و اگر چیزی کم باشد، به‌جای خرابی خاموش، پیام آن را در `logread` می‌نویسد.

---

## هستهٔ sing-box

حالت شفاف و حالت TUN به sing-box نیاز دارند، ولی **گذربین هستهٔ خودش را دارد** و در `/usr/libexec/gozarbin/sing-box` نگه می‌دارد. دلیلش ساده است: روی روترهایی که Passwall2 نصب است، بستهٔ `sing-box` معمولاً از فید خود Passwall می‌آید و **همان موتوری است که Passwall2 در همین لحظه رویش کار می‌کند**. گذربین نه از آن استفاده می‌کند و نه به‌روزرسانی‌اش می‌کند، تا چیزی که کار می‌کند از زیر پای شما کشیده نشود.

قاعده‌اش این است:

| روی روتر چه هست | ‏گذربین چه می‌کند |
| --- | --- |
| هستهٔ اختصاصی گذربین نصب است | از همان استفاده می‌کند |
| ‏`sing-box` از فید Passwall و خود Passwall یا Passwall2 هم نصب است | استفاده نمی‌کند؛ هستهٔ خودش را می‌خواهد |
| ‏`sing-box` از فید Passwall ولی خود Passwall نصب نیست | از آن استفاده می‌کند (مال کسی نیست)‏ |
| ‏`sing-box` از فید معمولی OpenWrt‏ | از آن استفاده می‌کند (مال کسی نیست)‏ |
| هیچ‌کدام | حالت شفاف بالا نمی‌آید و دکمهٔ «نصب هسته» در صفحه ظاهر می‌شود |

نصب یا به‌روزرسانی هسته از صفحهٔ تنظیمات با یک دکمه انجام می‌شود، یا از خط فرمان:

</div>

```sh
gozarbinctl install-singbox     # آخرین نسخهٔ پایدار از SagerNet
gozarbinctl singbox --state     # وضعیت هسته
gozarbinctl singbox --origin    # own | system | passwall | none
```

<div dir="rtl">

> ⚠️ فایل رسمی SagerNet حدود **۷۰ مگابایت** است و برای باز کردنش حدود ۱۵۰ مگابایت فضای خالی لازم است. روی روترهای با فلش ۱۶ یا ۳۲ مگابایتی این کار شدنی نیست؛ آنجا بستهٔ `sing-box` فید رسمی OpenWrt را نصب کنید تا گذربین از آن استفاده کند.

### بررسی خودکار نسخهٔ جدید

‏گذربین روزی یک بار صفحهٔ انتشار SagerNet را نگاه می‌کند و اگر نسخهٔ **پایدار** تازه‌ای آمده باشد، بالای صفحهٔ تنظیمات پیامی با دکمهٔ «به‌روزرسانی» نشان می‌دهد. سه قید دارد:

- فقط وقتی انجام می‌شود که تا آن لحظه **بیش از ۱۰۰ مگابایت** از تونل دانلود شده باشد.
- حداکثر روزی یک بار.
- اگر روتر آفلاین بود یا GitHub در دسترس نبود، **هیچ پیامی داده نمی‌شود**. خطا به کاربر نشان داده نمی‌شود چون این حالت روی چنین روتری عادی است، نه خبر.

---

## نصب سریع

۱. فایل `gozarbin-openwrt-<نسخه OpenWrt>-<معماری>.apk` یا فایل `.ipk` متناسب با روتر را از [آخرین انتشار](https://github.com/dreamboxone/gozarbin/releases/latest) دانلود کنید و در `/tmp` روتر قرار دهید. فایل Source code یا بستهٔ انتشار قدیمی را انتخاب نکنید. هر فایل APK یا IPK شامل برنامه و رابط LuCI همان نسخه است.

در دستورهای زیر نام دقیق فایل دانلودشده را به‌جای مقدار `archive` قرار دهید. دستورها را در یک نشست SSH اجرا کنید؛ بسته‌ها در پوشهٔ داخلی آرشیو هستند.

۲. روی OpenWrt 25.12 (که از `apk` استفاده می‌کند):

</div>

```sh
cd /tmp
apk add --allow-untrusted ./gozarbin-openwrt-25.12.5-arm_cortex-a7_neon-vfpv4.apk
```

<div dir="rtl">

روی OpenWrt 24.10 با `opkg`:

</div>

```sh
cd /tmp
opkg install ./gozarbin-openwrt-24.10.8-arm_cortex-a7_neon-vfpv4.ipk
```

<div dir="rtl">

۳. در LuCI به **خدمات ← گذربین** بروید.

۴. گزینهٔ **«فعال کردن برنامه»** را روشن کنید و **ذخیره و اعمال** را بزنید.

همین. پراکسی SOCKS5 روی `127.0.0.1:1819` بالا می‌آید و ترافیک شبکه از تونل عبور می‌کند. فهرست‌های ایران در اولین اتصال خودکار دریافت می‌شوند.

### Psiphon

‏Psiphon از نسخهٔ بعد از ۲.۲.۲ داخل خود بستهٔ `gozarbin` است و نصب جداگانه ندارد. این بسته حدود **۲۰ مگابایت** فضای فلش بیشتر می‌گیرد.

اگر از نسخهٔ ۲.۲.x به‌روز می‌کنید و بستهٔ قدیمی `gozarbin-psiphon` را دارید، بستهٔ جدید فایل قدیمی Psiphon را پاک می‌کند. بعد از نصب، بستهٔ خالیِ باقی‌مانده را حذف کنید. روی روتری که فلش کمی دارد، بهتر است این کار را **قبل از** به‌روزرسانی انجام دهید:

</div>

```sh
apk del gozarbin-psiphon        # OpenWrt 25.12
opkg remove gozarbin-psiphon    # OpenWrt 24.10
```

<div dir="rtl">

---

## صفحهٔ تنظیمات

### داشبورد بالای صفحه

هفت کارت که هر سه ثانیه به‌روز می‌شوند:

| کارت | چه چیزی نشان می‌دهد |
| --- | --- |
| **وضعیت سرویس** | روشن/خاموش، حالت کار و مدت اجرا |
| **ارسال (آپلود)**‏ | سرعت لحظه‌ای و مجموع بایت‌های ارسالی |
| **دریافت (دانلود)**‏ | سرعت لحظه‌ای و مجموع بایت‌های دریافتی |
| **مصرف کل** | جمع دو جهت و تعداد بسته‌ها |
| **نوع دستگاه** | مدل روتر، نسخهٔ OpenWrt و معماری |
| **سرور و اسکن** | سرور فعلی، پینگ، کشور خروجی، و در حالت Psiphon وضعیت اتصال آن |
| **پیش‌نیازها و Passwall2**‏ | وضعیت هستهٔ sing-box، ماژول‌های کرنل، TUN، ‏Psiphon و Passwall2‏ |

اعداد مصرف بر حسب **مگابایت** و **مگابایت بر ثانیه** نوشته می‌شوند و از شمارنده‌های واقعی `nftables` روی مسیر پراکسی خوانده می‌شوند، نه از تخمین. شمارنده‌ها با هر بار راه‌اندازی مجدد سرویس از صفر شروع می‌شوند.

اگر حالت شفاف بالا نیامده باشد، کارت «وضعیت سرویس» **دلیل دقیقش** را می‌نویسد — Passwall2 فعال است، یا یک پیش‌نیاز کم است، یا هستهٔ sing-box نصب نیست — نه حدس و نه چند احتمال با هم.

### دکمه‌های عملیات

- **راه‌اندازی سرویس** — معادل `/etc/init.d/gozarbin restart`؛ سرویس خاموش را روشن می‌کند و روشن را دوباره راه می‌اندازد
- **توقف سرویس** — سرویس را خاموش می‌کند بدون آنکه گزینهٔ «فعال بودن» تغییر کند
- **به‌روزرسانی GeoIP و GeoSite** — فهرست‌های ایران و تبلیغات را دوباره دانلود می‌کند (اگر مستقیم نشد، از تونل)
- **نصب پیش‌نیازهای جا افتاده** — بسته‌های کم را نصب می‌کند

### برگهٔ «عمومی»

| گزینه | توضیح |
| --- | --- |
| **فعال کردن برنامه** | روشن و خاموش کردن گذربین. |
| **حالت کار** | پراکسی شفاف (TProxy)، کارت شبکهٔ مجازی (TUN)، یا فقط پراکسی SOCKS5. |
| **اجرا هم‌زمان با Passwall2‏** | پیش‌فرض خاموش؛ پایین‌تر توضیح داده شده. |
| **پروتکل تونل** | ‏MASQUE، WireGuard، WARP-in-WARP، WireGuard داخل MASQUE یا MASQUE-in-MASQUE. |
| **‏Psiphon‏** | خاموش، Psiphon داخل WARP، WARP از راه Psiphon، یا فقط Psiphon. پایین‌تر توضیح داده شده. |
| **کشور خروجی Psiphon‏** | کشوری که Psiphon از آن خارج می‌شود، یا «خودکار». |
| **شیوهٔ اتصال Psiphon‏** | خودکار، فقط از راه CDN، یا مستقیم. |
| **حالت اسکن سرور** | از `turbo` (سریع) تا `ironclad` (مطمئن). |
| **پورت SOCKS5‏** | پیش‌فرض ۱۸۱۹. |
| **پورت پراکسی HTTP‏** | صفر یعنی خاموش؛ برای برنامه‌هایی که فقط HTTP proxy می‌پذیرند. |

**کدام پروتکل؟** اگر نمی‌دانید، `MASQUE` را دست نزنید. اگر شبکه QUIC را می‌بندد، `WireGuard` را امتحان کنید. `gool` و `mim` دو پرش پشت سر هم می‌سازند و IP خروجی را عوض می‌کنند، به قیمت سرعت کمتر. «WireGuard داخل MASQUE» یک هویت WireGuard را داخل تونل MASQUE می‌برد و از همان‌جا ثبتش می‌کند، پس IP خروجی خارجی است نه ایرانی؛ مثل MASQUE هم از راه Tor وصل می‌شود.

**کدام حالت اسکن؟** `balanced` پیش‌فرض است. روی شبکه‌ای که همه‌چیز بسته به‌نظر می‌رسد `thorough`، و اگر شبکه به اسکن حساس است `stealth`.

### برگهٔ «مسیریابی و تفکیک ترافیک»

| گزینه | توضیح |
| --- | --- |
| **عبور مستقیم ترافیک ایران** | سایت‌ها و سرویس‌های ایرانی، هم بر اساس IP و هم بر اساس نام دامنه، بدون تونل باز می‌شوند. پیش‌فرض روشن. |
| **عبور DNS از تونل** | دامنه‌ها از داخل تونل پاسخ می‌گیرند تا فیلترینگ نتواند جواب جعلی بدهد. پیش‌فرض روشن؛ فقط در حالت شفاف. |
| **خروجی غیرایرانی برای سرویس‌های تحریمی** | دامنه‌های فهرست از وارپی عبور می‌کنند که از راه Tor وصل شده، تا سرویس ایران را تشخیص ندهد. پیش‌فرض خاموش؛ پایین‌تر توضیح داده شده. |
| **دامنه‌های خروجی غیرایرانی** | Anthropic، OpenAI، Spotify، Gemini و Meta AI به‌طور پیش‌فرض؛ هر دامنه زیردامنه‌هایش را هم در بر می‌گیرد. |
| **منبع GeoIP‏** | نشانی فایل `.srs` یا `.json`؛ هر نشانی دلخواهی را می‌توانید وارد کنید. |
| **منبع GeoSite‏** | همان، برای فهرست دامنه‌ها. |
| **مسدود کردن تبلیغات و ردیاب‌ها** | ترافیک مقصدهای فهرست تبلیغات مسدود می‌شود. |
| **منبع فهرست تبلیغات** | نشانی فهرست تبلیغات؛ فقط وقتی مسدودسازی روشن باشد دانلود می‌شود. |
| **فایل پیکربندی گذربین‏** | مسیر فایل هویت و قواعد مسیریابی اختصاصی هستهٔ تونل. |

### برگهٔ «پیشرفته»

| گزینه | توضیح |
| --- | --- |
| **نسخهٔ IP‏** | فقط IPv4، فقط IPv6، یا هر دو. |
| **پروفایل استتار** | از `off` تا `aggressive`؛ روی شبکه‌های سخت‌گیر `gfw` را امتحان کنید. |
| **پروفایل مصرف منابع** | روی روتر `low` بگذارید. |
| **بررسی گواهی TLS** | گواهی API وارپ، DoH و لبهٔ MASQUE را بررسی می‌کند تا جلوی جعل وسط راه گرفته شود. پیش‌فرض خاموش است، چون روی شبکه‌ای که TLS را رهگیری می‌کند تونل با آن وصل نمی‌شود. |
| **اتصال سریع با آخرین سرور موفق** | از اسکن دوباره در هر بار راه‌اندازی جلوگیری می‌کند. |
| **شمارش مصرف آپلود و دانلود** | شمارنده‌های nftables؛ خاموش کردنش نمایش مصرف را غیرفعال می‌کند. |
| **سطح گزارش گذربین‏** | برای عیب‌یابی `debug`. |
| **سطح گزارش sing-box‏** | گزارش موتور حالت شفاف و TUN. |
| **رابط‌های شبکهٔ داخلی** | ترافیک این رابط‌ها به تونل هدایت می‌شود؛ معمولاً `br-lan`. |
| **پورت TProxy‏** | فقط اگر با برنامهٔ دیگری تداخل داشت تغییر دهید. |
| **علامت فایروال (fwmark)‏** | همان، برای علامت بسته‌ها. |
| **شمارهٔ جدول مسیریابی** | همان، برای جدول مسیریابی اختصاصی. |
| **نام کارت شبکهٔ مجازی** | فقط در حالت TUN. |
| **نشانی IPv4 کارت مجازی** | فقط در حالت TUN. |
| **نشانی IPv6 کارت مجازی** | فقط در حالت TUN. |
| **‏MTU کارت مجازی** | فقط در حالت TUN. |
| **پورت داخلی Psiphon‏** | پیش‌فرض ۱۸۲۵، فقط روی `127.0.0.1`؛ نباید با پورت‌های دیگر یکی باشد. |
| **نشانی شنود پراکسی** | پیش‌فرض `127.0.0.1` و برای کار عادی درست است؛ پایین‌تر توضیح داده شده. |

**دربارهٔ «نشانی شنود پراکسی»:** مقدار پیش‌فرض `127.0.0.1` است و برای کار عادی **همین درست است** — حالت شفاف و حالت TUN هر دو از روی خود روتر به پراکسی وصل می‌شوند، پس نیازی به تغییر ندارد. مقدار `0.0.0.0` فقط برای حالتی است که بخواهید دستگاه‌های شبکه **مستقیماً** پراکسی SOCKS5 را تنظیم کنند.

> ⚠️ با `0.0.0.0` پراکسی **بدون رمز عبور** برای کل شبکه باز می‌شود. فقط وقتی این کار را بکنید که فایروال روتر آن پورت را از سمت WAN بسته باشد.

---

## تفکیک ترافیک ایران

گزینهٔ **«عبور مستقیم ترافیک ایران»** از یک منبع استفاده می‌کند — فایل‌های GeoIP و GeoSite — ولی آن را در دو جا به کار می‌برد:

- **بر اساس IP، در خود کرنل:** محدوده‌های IP داخل GeoIP به `nftables` داده می‌شوند، پس ترافیک به نشانی ایرانی اصلاً به sing-box نمی‌رسد و هزینهٔ پردازشی ندارد.
- **بر اساس نام دامنه، در sing-box:** سایت ایرانی‌ای که روی سرور یا CDN خارجی است با نامش شناخته می‌شود (GeoSite) و آن هم مستقیم می‌رود.

فایل‌ها در `/etc/gozarbin/geo/` می‌نشینند. اگر نباشند، بعد از بالا آمدن تونل خودکار دریافت می‌شوند؛ برای دریافت دستی:

</div>

```sh
gozarbinctl update-geo
```

<div dir="rtl">

منابع پیش‌فرض:

| فهرست | نشانی پیش‌فرض |
| --- | --- |
| ‏GeoIP ایران | ‏`https://raw.githubusercontent.com/Chocolate4U/Iran-sing-box-rules/rule-set/geoip-ir.srs`‏ |
| ‏GeoSite ایران | ‏`https://raw.githubusercontent.com/Chocolate4U/Iran-sing-box-rules/rule-set/geosite-ir.srs`‏ |
| تبلیغات | ‏`https://raw.githubusercontent.com/Chocolate4U/Iran-sing-box-rules/rule-set/geosite-category-ads-all.srs`‏ |

هر سه نشانی در صفحهٔ تنظیمات قابل ویرایش‌اند. دریافت اول مستقیم امتحان می‌شود و اگر جواب نداد از داخل تونل. اگر GitHub اصلاً در دسترس نبود، نشانی یک آینه را بگذارید. هم فایل `.srs` (فرمت باینری سینگ‌باکس) و هم `.json` (فرمت متنی) پذیرفته می‌شود؛ تشخیص از روی پسوند نشانی انجام می‌شود و فایل فقط وقتی جایگزین می‌شود که واقعاً یک rule-set معتبر باشد.

### DNS

فیلترینگ فقط اتصال را نمی‌بندد؛ به پرس‌وجوی DNS هم جواب جعلی می‌دهد. مثلاً برای `www.youtube.com` نشانی صفحهٔ فیلتر برمی‌گردد — حتی اگر دستگاه از `8.8.8.8` بپرسد، چون پورت ۵۳ در مسیر شنود می‌شود. دستگاهی که چنین جوابی بگیرد به نشانی اشتباه وصل می‌شود و هیچ پراکسی‌ای بعد از آن کمکی نمی‌کند. برای همین است که مثلاً تلگرام (که با IP ثابت وصل می‌شود) کار می‌کند ولی یوتیوب روی تلویزیون نه.

با **«عبور DNS از تونل»** در حالت شفاف:

- دستگاه‌هایی که از روتر می‌پرسند: dnsmasq به sing-box ارجاع داده می‌شود و sing-box نام را با DNS-over-HTTPS از داخل تونل می‌پرسد (پیش‌فرض `1.1.1.1`).
- دستگاه‌هایی که DNS خودشان را دارند (مثل تلویزیونی که مستقیم از `8.8.8.8` می‌پرسد): sing-box پرس‌وجو را وسط راه می‌گیرد و همان‌طور جواب می‌دهد.
- دامنه‌های ایرانی (GeoSite) از DNS اینترنت خودتان پاسخ می‌گیرند تا به سرورهای داخلی برسند.

این تغییر فقط در `/tmp` نوشته می‌شود، نه در `/etc/config/dhcp`: با خاموش شدن سرویس، قطع تونل، یا راه‌اندازی مجدد روتر، DNS خودکار به حالت عادی برمی‌گردد. وقتی Passwall2 فعال است، DNS در اختیار همان می‌ماند.

</div>

```sh
gozarbinctl dns state   # on یا off
```

<div dir="rtl">

### سرویس‌هایی که ایران را تحریم کرده‌اند

وارپ از فیلترینگ عبور می‌کند ولی موقعیت شما را پنهان نمی‌کند: Cloudflare خروجی وارپ را همان کشوری ثبت می‌کند که اتصال از آن شروع شده، پس از ایران، `loc=IR`. برای همین Claude، ChatGPT، Gemini، Spotify و Meta AI حتی با گذربین هم ایران را می‌بینند.

با **«خروجی غیرایرانی برای سرویس‌های تحریمی»** یک هستهٔ دوم، اتصال وارپ خودش را **از راه Tor** برقرار می‌کند. چون اتصال به Cloudflare از یک خروجی Tor در خارج شروع می‌شود، خروجی وارپ هم خارج از ایران ثبت می‌شود — یک نشانی عادی Cloudflare، نه نشانی Tor که همین سرویس‌ها معمولاً می‌بندند. فقط دامنه‌های فهرست از این مسیر می‌روند؛ بقیهٔ ترافیک مثل قبل از وارپ مستقیم.

چند نکته که باید بدانید:

- **کشور خروجی ثابت نیست.** هر بار که Tor مسیرش را عوض کند ممکن است عوض شود (مثلاً فرانسه یا سوئد).
- **کندتر است** و برای چت و موسیقی کافی است، نه برای ویدیو.
- **اتصال اول حدود دو دقیقه طول می‌کشد.** کارت «وضعیت سرویس» می‌نویسد «در حال اتصال» یا «آماده».
- **تا آماده نشده، این سایت‌ها باز نمی‌شوند.** عمداً به مسیر ایران برنمی‌گردند.
- **حافظه:** حدود ۳۰ مگابایت.
- **سرویس‌های پشت Cloudflare** ممکن است گاهی یک بررسی «آیا انسان هستید» نشان دهند.

</div>

```sh
gozarbinctl unblock     # خروجی غیرایرانی الان کجاست (ip و کشور)
```

<div dir="rtl">

### Psiphon و انتخاب کشور

گزینهٔ **«Psiphon»** در برگهٔ «عمومی» سه حالت دارد:

| حالت | مسیر | خروجی |
| --- | --- | --- |
| **‏Psiphon داخل WARP‏** | شما ← WARP ← Psiphon ← اینترنت | ‏Psiphon، در کشوری که انتخاب کرده‌اید. شبکه فقط WARP را می‌بیند. |
| **‏WARP از راه Psiphon‏** | شما ← Psiphon ← WARP ← اینترنت | ‏WARP؛ شبکه هرگز WARP را نمی‌بیند. فقط با MASQUE (روی HTTP/2). |
| **فقط Psiphon‏** | شما ← Psiphon ← اینترنت | ‏Psiphon، بدون WARP. |

در هر سه حالت **پورت SOCKS5 خروجی نهایی است**، پس حالت شفاف، TUN، شمارش مصرف و هر برنامه‌ای که به پورت ۱۸۱۹ وصل است بدون تغییر کار می‌کنند.

- **کشور خروجی** از فهرست انتخاب می‌شود (با نام فارسی و پرچم). اگر Psiphon در آن لحظه در کشور انتخاب‌شده سروری نداشته باشد، ممکن است اصلاً وصل نشود؛ پس اگر کشور خاصی لازم ندارید، «خودکار» بگذارید. کارت «سرور و اسکن» کشور واقعی خروجی را نشان می‌دهد. کشورهایی که Psiphon همین حالا ارائه می‌کند در فهرست با ✓ مشخص می‌شوند.
- **اگر Psiphon وصل نمی‌شود**، «شیوهٔ اتصال Psiphon» را روی «فقط از راه CDN» بگذارید.
- **اتصال اول** ممکن است تا سه دقیقه طول بکشد.
- داده‌های Psiphon در حافظهٔ RAM نگه داشته می‌شوند تا حافظهٔ فلش فرسوده نشود. مصرف حافظه حدود ۳۰ تا ۵۰ مگابایت است.
- ‏Psiphon یا Tor، فقط یکی می‌تواند اتصال تونل را برقرار کند؛ با «WARP از راه Psiphon» یا «فقط Psiphon» گزینه‌های Tor نادیده گرفته می‌شوند.

</div>

```sh
gozarbinctl psiphon chain DE    # Psiphon داخل WARP با خروجی آلمان
gozarbinctl psiphon only auto   # فقط Psiphon، کشور خودکار
gozarbinctl psiphon off
```

<div dir="rtl">

### قواعد دستی خود گذربین

هستهٔ تونل مسیریابی مستقل خودش را هم دارد که با فایل پیکربندی کار می‌کند. در فایلی که در «فایل پیکربندی گذربین» معرفی کرده‌اید می‌توانید بنویسید:

</div>

```ini
[direct]
example.com
full:bank.ir
keyword:arvancloud
10.0.0.0/8
private

[block]
doubleclick.net
port:25
```

<div dir="rtl">

‏`block` اول بررسی می‌شود، بعد `direct`، و باقی ترافیک از تونل می‌رود.

---

## هم‌زیستی با Passwall2

### مهم: علامت فایروال

Passwall2 (و Passwall و ShadowSocksR) **هر بسته‌ای را که خود روتر می‌فرستد** به پراکسی خودشان می‌برند، مگر آنکه بایت آخر علامت فایروال آن بسته `ff` باشد. قاعده‌شان دقیقاً این است:

</div>

```
meta mark & 0x000000ff == 0x000000ff  return
```

<div dir="rtl">

پس اگر علامت گذربین به `ff` ختم نشود، ترافیک خودِ تونل هم دزدیده می‌شود. نتیجه بدترین حالت ممکن است: تونل **وصل می‌شود**، صفحه می‌گوید «متصل»، ولی هیچ ترافیکی از آن رد نمی‌شود و هیچ خطایی هم داده نمی‌شود.

پیش‌فرض `0x0aff` است و درست است. اگر دستی عوضش کردید، بایت آخر را `ff` نگه دارید. صفحه ناسازگاری را تشخیص می‌دهد و دکمهٔ «اصلاح علامت» نشان می‌دهد. از خط فرمان:

</div>

```sh
gozarbinctl fix-mark
```

<div dir="rtl">


اگر Passwall2 روی روتر فعال باشد، دو برنامه سر قواعد `nftables` و جدول مسیریابی با هم تداخل می‌کنند. به همین دلیل:

- ‏گذربین وضعیت Passwall2 را می‌خواند و اگر فعال بود، **حالت شفاف را بالا نمی‌آورد** و در `logread` دلیلش را می‌نویسد.
- پراکسی SOCKS5 در هر حال بالا می‌آید، پس می‌توانید همچنان از آن استفاده کنید.
- اگر می‌دانید چه می‌کنید و آن‌ها را روی پورت‌ها و مارک‌های جدا تنظیم کرده‌اید، گزینهٔ **«اجرا هم‌زمان با Passwall2»** این محافظ را برمی‌دارد.

---

## خط فرمان

</div>

```sh
gozarbinctl on              # روشن کردن و راه‌اندازی
gozarbinctl off             # خاموش کردن
gozarbinctl restart         # راه‌اندازی مجدد
gozarbinctl status          # گزارش کامل: سرویس، Passwall2، پیش‌نیازها و مصرف
gozarbinctl version         # نسخهٔ بسته و نسخهٔ هسته
gozarbinctl traffic         # یک خط JSON از شمارنده‌های زنده
gozarbinctl deps            # گزارش پیش‌نیازها
gozarbinctl install-deps    # نصب پیش‌نیازهای جا افتاده
gozarbinctl update-geo      # به‌روزرسانی GeoIP و GeoSite
gozarbinctl dns state       # آیا DNS شبکه از تونل می‌رود
gozarbinctl unblock         # کشور خروجی غیرایرانی
gozarbinctl singbox         # وضعیت هستهٔ sing-box
gozarbinctl install-singbox # نصب یا به‌روزرسانی هستهٔ اختصاصی
gozarbinctl mode tun        # تغییر حالت کار: tproxy | tun | socks
gozarbinctl psiphon chain NL # Psiphon: off | chain | reverse | only، و کشور خروجی
```

<div dir="rtl">

خود هستهٔ تونل هم ده‌ها گزینهٔ دیگر دارد که با `gozarbin --help` فهرست می‌شوند (Tor، Psiphon، Zero Trust، ECH، تکه‌تکه کردن ClientHello و…).

---

## تنظیمات در UCI

همهٔ گزینه‌های صفحهٔ تنظیمات در `/etc/config/gozarbin` ذخیره می‌شوند و مستقیماً هم قابل ویرایش‌اند:

</div>

```sh
uci set gozarbin.main.mode=tun
uci set gozarbin.main.protocol=wg
uci set gozarbin.main.geo_enabled=1
uci set gozarbin.main.psiphon=chain          # off | chain | reverse | only
uci set gozarbin.main.psiphon_region=DE      # خالی = خودکار
uci set gozarbin.main.psiphon_mode=auto      # auto | cdn | direct
uci commit gozarbin
/etc/init.d/gozarbin restart
```

<div dir="rtl">

این فایل جزو `conffiles` بسته است، یعنی ارتقای نسخه آن را پاک نمی‌کند. گزینه‌های جدیدِ هر نسخه هنگام ارتقا با مقدار پیش‌فرض به آن اضافه می‌شوند.

---

## عیب‌یابی

**سرویس روشن است ولی اینترنت ندارم**

</div>

```sh
logread -e gozarbin | tail -50
```

<div dir="rtl">

اگر پیام مربوط به Passwall2 دیدید، یکی از دو برنامه را خاموش کنید. اگر پیام کمبود پیش‌نیاز دیدید، `gozarbinctl install-deps` را بزنید.

**کارت مصرف صفر می‌ماند**

مطمئن شوید «شمارش مصرف آپلود و دانلود» در برگهٔ پیشرفته روشن است، و سرویس بعد از روشن کردن آن یک بار راه‌اندازی مجدد شده باشد.

**سایت‌های ایرانی کند شده‌اند**

مطمئن شوید «عبور مستقیم ترافیک ایران» روشن است و دکمهٔ «به‌روزرسانی GeoIP و GeoSite» را یک بار بزنید.

**یک سایت روی یک دستگاه باز نمی‌شود ولی روی دستگاه دیگر باز می‌شود**

تقریباً همیشه DNS است. مطمئن شوید «عبور DNS از تونل» روشن است و بعد روی روتر ببینید چه جوابی برمی‌گردد:

</div>

```sh
gozarbinctl dns state
nslookup www.youtube.com 127.0.0.1
```

<div dir="rtl">

اگر نشانی‌ای شبیه `10.10.34.x` برگشت، جواب از فیلترینگ آمده و DNS هنوز از تونل نمی‌رود.

**تونل وصل نمی‌شود**

پروفایل استتار را روی `gfw` و حالت اسکن را روی `thorough` بگذارید. اگر باز هم نشد، پروتکل را به `WireGuard` تغییر دهید. اگر WARP روی این شبکه اصلاً وصل نمی‌شود، «فقط Psiphon» یا «WARP از راه Psiphon» را امتحان کنید.

**‏Psiphon وصل نمی‌شود یا کارت می‌گوید «Psiphon وصل نشد»**

«شیوهٔ اتصال Psiphon» را روی «فقط از راه CDN» بگذارید. اگر گزینه‌های Psiphon اثری ندارند، فایل Psiphon روی روتر نیست؛ `gozarbinctl psiphon` این را می‌گوید و نصب دوبارهٔ بستهٔ `gozarbin` آن را برمی‌گرداند. گزارش‌های Psiphon را این‌طور ببینید:

</div>

```sh
gozarbinctl psiphon
logread -e gozarbin | grep -i psiphon | tail -20
```

<div dir="rtl">

**کشور خروجی با کشوری که انتخاب کردم فرق دارد**

‏Psiphon فقط کشورهایی را می‌دهد که همان لحظه در آن‌ها سرور دارد و اگر کشور انتخابی نبود، کشور دیگری می‌دهد. کشورهای در دسترس در فهرست انتخاب کشور با ✓ مشخص می‌شوند. در حالت «WARP از راه Psiphon» خروجی WARP است و کشورش را Cloudflare تعیین می‌کند، معمولاً نزدیک به کشور Psiphon.

**می‌خواهم ببینم دقیقاً چه قواعدی نصب شده‌اند**

</div>

```sh
nft list table inet gozarbin_proxy
ip rule list
cat /var/run/gozarbin/sing-box.json
```

<div dir="rtl">

---

## حذف

</div>

```sh
gozarbinctl off
apk del gozarbin      # OpenWrt 24.10 به بعد
opkg remove gozarbin  # نسخه‌های قدیمی‌تر
```

<div dir="rtl">

پیش از حذف، سرویس خودش قواعد فایروال و مسیریابی را پاک می‌کند.

---

## ساخت از سورس

</div>

```sh
cargo build --release --manifest-path aether/Cargo.toml
bash psiphon-build.sh linux arm ./pt 7      # اختیاری: Psiphon، مثلاً برای armv7
./scripts/build-openwrt-packages.sh <sdk-directory> <core-binary> <output-directory> [psiphon-binary]
```

<div dir="rtl">

اسکریپت بالا بسته یکپارچه `gozarbin` شامل LuCI را با OpenWrt SDK می‌سازد و در پوشهٔ خروجی می‌گذارد؛ اگر باینری Psiphon را هم بدهید، داخل همان بستهٔ `gozarbin` قرار می‌گیرد. ‏`psiphon-build.sh` خودش دقیقاً همان نسخهٔ Go را که Psiphon لازم دارد دریافت می‌کند، چون Psiphon ساخته‌شده با نسخهٔ دیگر هنگام اجرا از کار می‌افتد.

---

## ساخت بستهٔ «مبهم‌سازی‌شده»

اسکریپت‌های shell و فایل‌های رابط کاربری که روی روتر نصب می‌شوند می‌توانند پیش از بسته‌بندی از توضیحات، خطوط خالی و تورفتگی خالی شوند، به‌طوری‌که فقط کد اجراشدنی و هدر کپی‌رایت باقی بماند:

</div>

```sh
GOZARBIN_OBFUSCATE=1 ./scripts/build-openwrt-packages.sh <sdk> <binary> <output>
```

<div dir="rtl">

ابزارش [openwrt/tools/obfuscate.py](openwrt/tools/obfuscate.py) است و به‌تنهایی هم قابل اجراست:

</div>

```sh
python3 openwrt/tools/obfuscate.py --check openwrt/files luci-app-gozarbin/htdocs
```

<div dir="rtl">

این کار محافظه‌کارانه است: هیچ نامی تغییر نمی‌کند و هیچ چیزی دوباره کدگذاری نمی‌شود، پس برنامه دقیقاً همان برنامه می‌ماند.

**اما صریح بگویم:** این کار فقط کپی‌برداری را پرزحمت‌تر می‌کند و جلوی آن را نمی‌گیرد. هستهٔ تونل تحت AGPL-3.0 منتشر شده و هر اثر مشتق‌شده‌ای هم باید AGPL-3.0 بماند؛ یعنی هر کسی که بسته را می‌گیرد، قانوناً حق دارد سورس واقعی را هم داشته باشد. چیزی که واقعاً جلوی انتشار مجدد به نام شخص دیگر را می‌گیرد این‌هاست:

- **لایسنس** — AGPL-3.0 استفادهٔ تجاری بدون انتشار سورس و بدون حفظ همین لایسنس را ممنوع می‌کند.
- **هدر کپی‌رایت** — روی تک‌تک فایل‌ها هست و حذف یا تغییر آن نقض لایسنس است.
- **نشان تجاری** — نام و لوگوی گذربین طبق [TRADEMARK.md](TRADEMARK.md) قابل استفاده در فورک تغییر داده‌شده نیست.
- **تاریخچهٔ عمومی مخزن** — کامیت‌های زمان‌دار و Releaseهای امضاشده مدرک تقدم شما هستند.

---

## لایسنس

این پروژه تحت **AGPL-3.0-only** منتشر شده است. متن کامل در [LICENSE](LICENSE) و نشان تجاری در [TRADEMARK.md](TRADEMARK.md).

هستهٔ تونل کار [CluvexStudio](https://github.com/CluvexStudio/Aether) است. بسته‌بندی OpenWrt و رابط کاربری فارسی در این مخزن نگهداری می‌شود. جزئیات در [NOTICE](NOTICE).

</div>

---

<div dir="rtl">

## 💚 حمایت از این پروژه

اگر این پروژه به کارتان آمده، می‌توانید با واریز تتر از آن حمایت کنید:

**USDT (تتر) — فقط شبکه BEP20 (BSC)**

</div>

```
0x56daaa6b76d88ee0c8dba8042121f4b77de0a813
```

<div dir="rtl">

> ⚠️ این آدرس فقط برای واریز تتر در شبکه BEP20 (BSC) است. واریز ارز دیگر یا از شبکه دیگر به این آدرس از دست می‌رود.

</div>