
# رله ⚡
### **اینترنت گوشیات را با کامپیوترت به اشتراک بگذار.**
### **یک QR اسکن کن. تنظیمات همین بود.**
[](https://github.com/Mahdi-mortazavi/relay/releases/latest/download/Relay-Setup-x64.exe)
[](https://github.com/Mahdi-mortazavi/relay/releases/latest/download/Relay-android-arm64-v8a.apk)
همیشه جدیدترین نسخه · [همهٔ فایلها و توضیحات](https://github.com/Mahdi-mortazavi/relay/releases/latest)
[](https://github.com/Mahdi-mortazavi/relay/actions/workflows/ci.yml)
[](https://github.com/Mahdi-mortazavi/relay/actions/workflows/e2e.yml)
[](https://github.com/Mahdi-mortazavi/relay/releases/latest)
[](LICENSE)
**🌍 [English](README.md) · [فارسی](README.fa.md)**
---
## 📥 دانلود
| | فایل | برای چه کسی |
|---|---|---|
| **ویندوز** | [**Relay-Setup-x64.exe**](https://github.com/Mahdi-mortazavi/relay/releases/latest/download/Relay-Setup-x64.exe) | ویندوز ۱۰ و ۱۱. فقط برای کاربر خودتان نصب میشود — بدون نیاز به ادمین. |
| ویندوز ۳۲ بیتی | [Relay-Setup-x86.exe](https://github.com/Mahdi-mortazavi/relay/releases/latest/download/Relay-Setup-x86.exe) | فقط اگر مطمئنید به آن نیاز دارید. |
| **اندروید** | [**Relay-android-arm64-v8a.apk**](https://github.com/Mahdi-mortazavi/relay/releases/latest/download/Relay-android-arm64-v8a.apk) | اندروید ۸ به بالا. تقریباً هر گوشی از ۲۰۱۷ به بعد. |
| اندروید (هر دستگاهی) | [Relay-android-universal.apk](https://github.com/Mahdi-mortazavi/relay/releases/latest/download/Relay-android-universal.apk) | حجیمتر، ولی همهجا کار میکند. اگر فایل بالا گفت **«برنامه سازگار نیست»**، این را بگیرید. |
| checksum ها | [SHA256SUMS.txt](https://github.com/Mahdi-mortazavi/relay/releases/latest/download/SHA256SUMS.txt) | `sha256sum -c SHA256SUMS.txt` |
**نسخهٔ فعلی `1.8.0` است و تنها ریلیزِ موجود روی این مخزن است.** نسخههای قبلی عمداً حذف شدهاند. همهٔ لینکهای بالا همیشه به تازهترین نسخه اشاره میکنند، و حالا هر دو برنامه شمارهٔ نسخهٔ خود را زیر **پیشرفته** نشان میدهند — پس اگر روزی به نظر رسید گوشی و کامپیوتر با هم نمیخوانند، اول همین دو عدد را مقایسه کنید. باید یکی باشند؛ اگر نبودند، تمام ماجرا همان است.
دو فایل اندروید **یک برنامهٔ واحدند** که در یک بیلد ساخته شدهاند و فقط در معماریهای CPU که همراه دارند فرق میکنند. ممکن نیست رفتار متفاوتی داشته باشند. اگر یکی متفاوت به نظر رسید، نسخهٔ قدیمی است — حذفش کنید و از همین لینکها دوباره نصب کنید.
ویندوز بار اول هشدار میدهد چون هنوز installer امضای کد ندارد — **More info ← Run anyway**. اگر اندروید گفت **«App not installed»**، [این صفحه](docs/install-troubleshooting.md) همهٔ دلایلی را که دیدهام پوشش میدهد.
---
## 🚀 چطور استفاده کنیم
**روی گوشی**
۱. هاتاسپات را روشن کنید — یا گوشی و کامپیوتر را روی یک وایفای بگذارید.
۲. رله را باز کنید و **Start Sharing** را بزنید.
۳. صفحه یک QR و یک **عدد دو رقمی** نشان میدهد.
**روی کامپیوتر**
۴. رله را باز کنید. گوشیهایی که همین حالا در حال اشتراکگذاریاند، هرکدام با کدی که نشان میدهند، فهرست میشوند — روی مال خودتان بزنید. یا **Scan QR** را بزنید و گوشی را جلوی وبکم بگیرید، یا **واردکردن کد ۲ رقمی** را بزنید و همان دو رقم را تایپ کنید.
۵. روی گوشی، درخواستی که ظاهر میشود را تأیید کنید.
تمام — مرورگر و بقیهٔ برنامهها از طریق گوشی وصل میشوند. آخر کار **Disconnect** را بزنید و ویندوز دقیقاً به حالت قبل برمیگردد.
چرا ویندوز یک بار اجازه میخواهد
رله **همهچیز** را عبور میدهد — مرور وب، دانلود، تماس تصویری و بازی. هم TCP و هم UDP، چون یک تونل واقعی WireGuard میسازد نه پروکسیای که فقط بعضی برنامهها به آن اعتنا کنند.
تونل به یک آداپتور شبکه نیاز دارد و ویندوز آداپتور را فقط با اجازهٔ شما میسازد. پس اولین بار که وصل میشوید یک پیام **UAC** میبینید — **بله** را بزنید.
این اجازه فقط به همان پروسهٔ کوچک تونل داده میشود، نه به کل برنامه، و دقیقاً به اندازهٔ عمر همان اتصال دوام دارد. خود رله برای شما تنها نصب میشود و هیچجای دیگری اجازهٔ مدیر نمیخواهد.
قبلاً حالت دومی بود که این پیام را رد میکرد. آن حالت فقط TCP را عبور میداد، پس بازی و تماس بیصدا کار نمیکردند، و برای این کار یک تنظیم پروکسی در سطح کل ویندوز را عوض میکرد که رله باید هر بار درست سر جایش برمیگرداند — حتی بعد از یک کرش. یک پیام روشن، معاملهٔ بهتری است از تنظیمی که ممکن است خراب رها شود. ([ADR-0009](docs/adr/0009-full-mode-only-and-code-pairing.md))
اگر مشکلی پیش آمد
رله تلاش میکند بهجای «اتصال برقرار نشد»، بگوید واقعاً چه اتفاقی افتاده. هر خطا اسم دارد و یک قدم بعدی — فهرست کامل در [docs/errors.md](docs/errors.md).
**اول از همه شمارهٔ نسخه را ببینید.** هر دو برنامه آن را زیر **پیشرفته** نشان میدهند. تفاوت نسخه رایجترین دلیلِ «این دو با هم کار نمیکنند» است، و تا پیش از ۱.۸.۰ برنامهٔ ویندوز نسخهٔ خود را اشتباه گزارش میکرد، برای همین کسی نمیتوانست این را ببیند.
**مرورگرها باید بدون هیچ کاری وصل شوند** — نه افزونهای لازم است، نه واردکردن دستی پروکسی. اگر قبلاً برای عبور کروم از رله به چیزی مثل SwitchyOmega نیاز داشتید، آن یک باگ در نحوهٔ معرفی پروکسی به ویندوز بود و ۱.۸.۰ آن را درست کرده است. افزونه را خاموش کنید.
هر دو برنامه یک لاگ محلی دارند که میتوانید بخوانید و بفرستید (**Advanced ← Logs**). هیچچیز خودبهخود جایی آپلود نمیشود.
---
## 💡 چرا ساختمش
همیشه یک جای مشترک گیر میکردم: لپتاپ بدون اینترنت، گوشی با اینترنت. هاتاسپات ویندوز راه نمیافتاد. تترینگ USB درایور میخواست. برنامههای دیگر اشتراک میخواستند، حساب کاربری میخواستند، و اجازهٔ دیدن همهچیز.
اتصال همیشه همانجا بود. مشکل هیچوقت شبکه نبود — راهاندازیاش بود.
برای همین رله نه حساب کاربری دارد، نه سرور، نه تلهمتری، نه اشتراک. ترافیک شما از گوشی به کامپیوتر روی وایفای خودتان میرود و به هیچچیز من دست نمیزند. **یک کد را اسکن کن و کار میکند** — و وقتی کار نکرد، میگوید چرا.
---
## 🔐 صادقانه دربارهٔ امنیت
ترافیک شما داخل **WireGuard** جابهجا میشود، با کلیدهایی که برای یک نشست ساخته میشوند و با توقف اشتراک دور ریخته میشوند. چیزی روی دیسک نوشته نمیشود و چیزی از این دو دستگاه بیرون نمیرود.
سؤال جالب، خودِ تونل نیست؛ این است که چه کسی اجازهٔ استفاده از آن را دارد. عدد دو رقمی **رمز نیست** — نود عدد هیچوقت نمیتوانست رمز باشد. آن عدد فقط گوشی شما را از بین گوشیهای اطراف انتخاب میکند. **چیزی که غریبهها را بیرون نگه میدارد خود شما هستید:** وقتی کامپیوتری کلیدها را میخواهد، گوشی میایستد و اول از شما میپرسد و نشان میدهد کدام کامپیوتر درخواست داده. تا وقتی گوشی در جیب شماست کسی وارد نمیشود — بیپاسخ ماندن تا یک دقیقه یعنی «نه».
اسکن QR این سؤال را رد میکند، چون گرفتن گوشی جلوی دوربین خودش جواب داده است.
مدل تهدید کامل در [SECURITY.md](SECURITY.md) است — از جمله چیزهایی که رله از آنها محافظت **نمیکند**.
---
## 🧪 چطور تست میشود
هر کامیت، برنامهٔ واقعی را روی ایمیجهای واقعی اندروید (API ۳۰ تا ۳۶) نصب میکند و از داخل UI خودش عبورش میدهد: شروع اشتراک، نمایش QR، جفتشدن یک لپتاپ با کد، پاسخ به پیام تأیید، و توقف. کد سمت ویندوز مقابل یک **گوشی زنده** روی `adb` اجرا میشود. installer واقعی نصب، اجرا و حذف میشود. تونل روی یک آداپتور واقعی WinTun بالا میآید و handshake واقعی WireGuard از رویش تأیید میشود — و کلاینت تا وقتی آن handshake واقعاً انجام نشود حاضر نیست بگوید «متصل شد».
بعد، APK **منتشرشده** روی اندروید ۱۱ تا ۱۶ نصب میشود — چون نسخهای که کسی نتواند نصبش کند، نسخه نیست.
آنچه هنوز فقط سختافزار میتواند ثابت کند در [docs/testing.md](docs/testing.md) نوشته شده، نه پنهان.
---
## 🗺️ وضعیت
| | |
|:---|:---|
| 🚀 تونل WireGuard، TCP + UDP | ✅ **منتشر شده** — هر دو پلتفرم |
| 🔢 جفتشدن با QR **یا** کد دو رقمی | ✅ **منتشر شده** |
| 🔄 اتصال مجدد خودکار، خطاهای قابلاقدام، فارسی و انگلیسی | ✅ **منتشر شده** |
| ✍️ installer امضاشدهٔ ویندوز | 🔨 در برنامه |
| 🍎 کلاینت macOS | 💭 بعداً |
جزئیات در [`docs/roadmap.md`](docs/roadmap.md) · [CHANGELOG](CHANGELOG.md)
---
## 👋 سازنده

### **مهدی مرتضوی** · Mahdi Mortazavi
**توسعهدهندهٔ Full-Stack × سازندهٔ محصول × حلکنندهٔ مسئله**
📍 ایران
من مهدیام. دمو نمیسازم — چیزی را میسازم که خودم لازم داشتهام، و آنقدر رویش کار میکنم تا به درد دست دیگران هم بخورد.
رله دقیقاً همین است. از سرخوردگی خودم شروع شد: لپتاپی بدون اینترنت و گوشیای با اینترنت. حالا روی هر کامیت یک آزمایشگاه دستگاه واقعی اجرا میکند، روی دو پلتفرم منتشر میشود، و دربارهٔ کارهایی که هنوز بلد نیست راستش را میگوید. **همین قسمت آخر، معیار من برای کارم است** — ترجیح میدهم یک محدودیت را بنویسم تا اینکه شما خودتان کشفش کنید.
اگر رله به دردتان خورد، یک ⭐ واقعاً کمک میکند. اگر خراب شد، [به من بگویید](https://github.com/Mahdi-mortazavi/relay/issues/new/choose) — همه را میخوانم.
### 💬 در ارتباط باشیم
[](https://t.me/Startup_legend)
[](https://t.me/Mahdi_mortazavi1)
[](mailto:Mahdi.mortazavi.135@gmail.com)
[](https://github.com/Mahdi-mortazavi)
[](https://mahdi-mortazavi.github.io)
**🚀 [Startup Legend](https://t.me/Startup_legend)** — کامیونیتی من، جایی که مینویسم چه میسازم، چه چیزی خراب شد و از درست کردنش چه یاد گرفتم.
---
## 🛠️ برای توسعهدهندهها
دو برنامه و یک قرارداد مشترک. اندروید با Kotlin و Compose؛ ویندوز با .NET 8 و WinUI 3؛ تونل حالت کامل با Go (`wg/`) که هر دو سر از آن استفاده میکنند.
**نیازی به build محلی نیست** — CI خودش سیستم build است (ADR-0004). push کنید و pipeline میسازد، روی دستگاه واقعی تست میکند و میتواند نسخه منتشر کند.
```
android/ Kotlin + Compose windows/ .NET 8 + WinUI 3
wg/ endpoint وایرگارد (Go) shared/ قرارداد بین دو پلتفرم
docs/ معماری، ADR ها، تست، خطاها
```
از [`docs/architecture.md`](docs/architecture.md) و [ADR ها](docs/adr/) شروع کنید — هر تصمیم مهم، همراه با دلیلی که به آن رسیده، نوشته شده است. بقیهاش در [`CONTRIBUTING.md`](CONTRIBUTING.md) است.
**ساختهشده در ایران 🇮🇷 · [Apache-2.0](LICENSE)**
«WireGuard» علامت تجاری ثبتشدهٔ Jason A. Donenfeld است.